999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

并行CISC指令譯碼器的設(shè)計(jì)與實(shí)現(xiàn)

2007-12-31 00:00:00駿樊曉椏
計(jì)算機(jī)應(yīng)用研究 2007年11期

摘要:針對(duì)x86系列兼容微處理器串行譯碼速度慢、效率低的缺點(diǎn),提出了一種并行譯碼器設(shè)計(jì)方案。該方案將整個(gè)譯碼過程分為長(zhǎng)度譯碼和地址譯碼兩個(gè)階段進(jìn)行流水譯碼,在指令不帶前綴的情況下單拍完成長(zhǎng)度譯碼,支持任意兩條指令并行譯碼,提高了譯碼效率。其使用Verilog-HDL進(jìn)行描述,SYNOPSYS-DV在SMIC CMOS 0.18工藝庫(kù)下進(jìn)行綜合。結(jié)果表明完全達(dá)到了設(shè)計(jì)要求。

關(guān)鍵詞:指令集; 微處理器; 譯碼器; 復(fù)雜指令系統(tǒng)計(jì)算機(jī)

中圖分類號(hào):TP303文獻(xiàn)標(biāo)志碼:A

文章編號(hào):1001-3695(2007)11-0200-03

0引言

微處理器是機(jī)載設(shè)備和工控平臺(tái)的核心部件,關(guān)系著國(guó)防安全。因此,研制生產(chǎn)自主知識(shí)產(chǎn)權(quán)的高性能微處理器具有重要意義。西北工業(yè)大學(xué)在微處理器設(shè)計(jì)方面開展了大量工作,設(shè)計(jì)了基于x86指令集的LongtiumC2微處理器。

指令譯碼器是微處理器流水線的數(shù)據(jù)源,是流水線連續(xù)、高效執(zhí)行的重要保證。因此,設(shè)計(jì)高性能指令譯碼器是微處理器設(shè)計(jì)的重點(diǎn)之一。串行譯碼方案中對(duì)指令數(shù)據(jù)讀入電路和指令長(zhǎng)度譯碼電路的設(shè)計(jì)是一個(gè)瓶頸。它采用一拍讀入一個(gè)字節(jié)的方式,通過狀態(tài)機(jī)的控制來逐個(gè)讀入指令字節(jié)并對(duì)每一個(gè)字節(jié)進(jìn)行譯碼,直至完成一條指令的譯碼[1]。譯碼時(shí)用1~4拍譯出該指令的長(zhǎng)度;然后用每拍讀入一個(gè)字節(jié)的速率來讀入偏移量和立即數(shù),這可能需要1~8拍。整個(gè)過程需要1~12拍。如果指令包含前綴還需要另外的1~4拍,那么整個(gè)過程速度慢、效率低,影響到處理器的整體性能。所以,設(shè)計(jì)針對(duì)x86指令集的并行譯碼方案很有必要。

1LongtiumC2體系結(jié)構(gòu)

LongtiumC2是與x86指令集兼容的CISC微處理器。包括一個(gè)32位的整數(shù)處理單元、一個(gè)浮點(diǎn)單元、一個(gè)32 KB大小且8路組相連的指令數(shù)據(jù)混合cache、一個(gè)存儲(chǔ)器管理單元、一個(gè)總線接口單元、一個(gè)指令譯碼器和一個(gè)微程序控制器;另外還包括一個(gè)保護(hù)測(cè)試單元和一個(gè)異常檢測(cè)單元。

LongtiumC2體系結(jié)構(gòu)如圖1所示。

32位的整數(shù)單元可以完成8、16、32位數(shù)據(jù)的完整算術(shù)和邏輯運(yùn)算。大多數(shù)的指令可以單拍執(zhí)行。浮點(diǎn)單元支持32、64和80位的數(shù)據(jù)格式,符合IEEE 754標(biāo)準(zhǔn);提供不同數(shù)據(jù)類型的算術(shù)運(yùn)算指令,并且支持超越函數(shù)的運(yùn)算功能。指令和數(shù)據(jù)混合cache大小為32 KB、8路組相連,每行16 Byte,寫通策略,在地址命中時(shí)一個(gè)周期內(nèi)讀出數(shù)據(jù)。采用偽隨機(jī)最少使用替換策略。存儲(chǔ)器管理單元同時(shí)支持分段和分頁,最大尋址空間4 GB。它對(duì)地址的管理和存儲(chǔ)空間的保護(hù)保證了在多任務(wù)和虛擬存儲(chǔ)器環(huán)境下存儲(chǔ)器的完整性。總線接口單元負(fù)責(zé)進(jìn)行數(shù)據(jù)傳輸。指令預(yù)取在處理器內(nèi)部單元與外部進(jìn)行控制,提供存儲(chǔ)器讀寫、指令預(yù)取、cache行的填充等功能,支持突發(fā)傳送,帶有寫緩沖功能,并能動(dòng)態(tài)地在8、16和32位之間切換總線的寬度。指令譯碼器從指令預(yù)取隊(duì)列中取出指令進(jìn)行譯碼,得到有效地址和微程序入口地址等信息。不帶前綴的指令在一個(gè)時(shí)鐘周期內(nèi)被譯碼。微控制器接收來自譯碼器的入口地址,產(chǎn)生一組微指令。這些微指令對(duì)執(zhí)行單元進(jìn)行控制,完成指令執(zhí)行。LongtiumC2的流水線劃分為取指、譯碼、物理地址計(jì)算、讀操作數(shù)、執(zhí)行并寫回五級(jí)。整個(gè)指令流水過程由多個(gè)功能部件協(xié)同完成。

所有的指令編碼都是圖2的一個(gè)子集。前綴字節(jié)指定總線鎖定、指令重復(fù)、段超越、數(shù)據(jù)或者地址尺寸轉(zhuǎn)換等信息;操作碼指明該指令所要完成的動(dòng)作;MOD/RM和SIB字節(jié)指明該指令的尋址方式;立即數(shù)和偏移量表示指令的操作數(shù)信息。

一條指令可以由若干個(gè)字節(jié)組成。在沒有前綴的情況下,最短的指令只有1 Byte,最長(zhǎng)的指令有11 Byte[3]。結(jié)合前文描述的指令結(jié)構(gòu)形式,可以作出如圖3所示的組合形式圖。圖3是在沒有前綴的情況下所有可能的字節(jié)組合情況。如果一條指令只有操作碼,只需等到操作碼譯完之后就能知道指令長(zhǎng)度。如果一條指令不帶SIB字節(jié),只有MOD/RM字節(jié),則需要3 Byte來知道指令的長(zhǎng)度。如果一條指令存在SIB字節(jié):a)若操作碼是一個(gè)字節(jié),至少需要3 Byte才能知道指令的長(zhǎng)度;b)若操作碼是2 Byte,則需要4 Byte就能知道指令的長(zhǎng)度。因此,任何一條指令,至多4 Byte就能知道整個(gè)指令的長(zhǎng)度。這一結(jié)論為并行譯碼x86指令提供了依據(jù)。

3指令譯碼器設(shè)計(jì)

串行譯碼方案每拍只讀入一個(gè)指令字節(jié),導(dǎo)致無法盡可能早地知道本條指令長(zhǎng)度;同時(shí)也就不可能得到下條指令的起始位置,進(jìn)而導(dǎo)致不能提前讀取下條指令的數(shù)據(jù),并行譯碼多條指令也就無從談起。針對(duì)串行譯碼的缺點(diǎn),筆者提出一種并行譯碼方案。設(shè)計(jì)采用一次讀入多個(gè)指令字節(jié),設(shè)置多個(gè)長(zhǎng)度譯碼單元,將整個(gè)譯碼過程分為長(zhǎng)度譯碼(LD)和地址譯碼(AD)兩個(gè)階段的流水譯碼方式,從而提高譯碼效率。圖4是Long ̄tiumC2譯碼器的結(jié)構(gòu),包括指令預(yù)取隊(duì)列、長(zhǎng)度譯碼部件、地址譯碼部件。多個(gè)長(zhǎng)度譯碼單元對(duì)一條指令所有可能出現(xiàn)的組合形式進(jìn)行并行譯碼,在指令不帶前綴的情況下單拍得到指令長(zhǎng)度。長(zhǎng)度譯碼和地址譯碼流水執(zhí)行,支持任意兩條指令并行譯碼。

3.1指令預(yù)取隊(duì)列

預(yù)取部件負(fù)責(zé)產(chǎn)生預(yù)取指令的地址,從cache或者主存中取指令。在cache不使能或者不命中的情況下,預(yù)取指令總是從主存取指;如果cache命中,則直接從cache中取指。指令預(yù)取隊(duì)列是譯碼器的直接數(shù)據(jù)源,由兩級(jí)寄存器構(gòu)成。第一級(jí)寄存器為空時(shí)發(fā)預(yù)取請(qǐng)求,取回的指令在兩級(jí)寄存器中進(jìn)行緩存;在譯碼器空閑時(shí)將第二級(jí)寄存器緩存的指令數(shù)據(jù)送給譯碼器,在程序發(fā)生跳轉(zhuǎn)時(shí)清空指令預(yù)取隊(duì)列,從跳轉(zhuǎn)目標(biāo)處重新開始取指。

指令預(yù)取隊(duì)列有兩個(gè)接口,即與cache的接口和與譯碼器的接口。所以指令預(yù)取隊(duì)列設(shè)計(jì)必須同時(shí)兼顧到cache存儲(chǔ)指令數(shù)據(jù)的特征和譯碼器使用指令數(shù)據(jù)的需求。從與cache接口一側(cè)來看,cache每一行有16 Byte,為了簡(jiǎn)化邏輯,提高讀操作效率,指令預(yù)取隊(duì)列的兩級(jí)寄存器的寬度也應(yīng)該為16 Byte,這樣一次cache讀命中就可以將cache的一行讀入指令預(yù)取隊(duì)列的一行;從與譯碼器接口一側(cè)來看,由于x86指令在不帶前綴的情況下最多4 Byte就能單拍譯出一條指令的長(zhǎng)度,譯碼器每次至少應(yīng)該從預(yù)取隊(duì)列讀入4 Byte的指令數(shù)據(jù),這樣才能保證對(duì)指令長(zhǎng)度單拍譯碼的有效性。考慮到x86 指令集2和3 Byte的指令最多[4],如果選擇大于4 Byte的數(shù)據(jù)路徑寬度,將增加長(zhǎng)度譯碼讀入電路和預(yù)取隊(duì)列發(fā)送電路的復(fù)雜度。考慮到預(yù)取時(shí)可能發(fā)生的不對(duì)齊現(xiàn)象,指令預(yù)取隊(duì)列與譯碼器之間的數(shù)據(jù)通路寬度應(yīng)該設(shè)定為最大4 Byte,最小1 Byte。只要預(yù)取隊(duì)列能提供4 Byte的指令數(shù)據(jù),傳輸就以4 Byte寬度進(jìn)行。

3.2長(zhǎng)度譯碼部件

長(zhǎng)度譯碼部件包括一個(gè)指令移位寄存器、一個(gè)計(jì)數(shù)器、一個(gè)控制狀態(tài)機(jī)、四個(gè)并行長(zhǎng)度譯碼單元和一個(gè)指令裝配部件。長(zhǎng)度譯碼級(jí)主要完成指令的長(zhǎng)度譯碼、指令數(shù)據(jù)的分解、簡(jiǎn)單/復(fù)雜指令的識(shí)別、微程序入口譯碼等功能。指令移位寄存器用來存放從指令預(yù)取隊(duì)列讀入的指令數(shù)據(jù)。設(shè)計(jì)的關(guān)鍵是寬度的選擇。讀入一條完整指令后,指令數(shù)據(jù)從移位寄存器被送到指令裝配部件進(jìn)行裝配。由于指令移位寄存器至少要能容納一條完整指令,根據(jù)486指令的特點(diǎn),在不帶前綴的情況下一條指令最長(zhǎng)為11 Byte,所以寬度至少為11 Byte。假設(shè)將寬度定為11,如果當(dāng)前移位寄存器中有10 Byte指令數(shù)據(jù),預(yù)取隊(duì)列送來的指令數(shù)據(jù)寬度是4 Byte,而這條指令的長(zhǎng)度是11 Byte,移位寄存器剩余一個(gè)空閑字節(jié),不具備讀入指令的能力,那么這條指令的長(zhǎng)度譯碼永遠(yuǎn)也不會(huì)完成,形成死鎖。所以應(yīng)該將移位寄存器的長(zhǎng)度設(shè)定為14 Byte,即使在上述極端情況下仍能讀入指令數(shù)據(jù),而不會(huì)造成死鎖。

計(jì)數(shù)器和控制狀態(tài)機(jī)根據(jù)譯碼得到的指令長(zhǎng)度控制從指令預(yù)取隊(duì)列的讀數(shù)據(jù)操作和對(duì)指令移位寄存器的移位操作。在指令帶前綴的情況下,狀態(tài)機(jī)每拍譯碼一個(gè)前綴,并置相應(yīng)前綴標(biāo)志。

四個(gè)并行的長(zhǎng)度譯碼單元在指令移位寄存器首字節(jié)不是前綴的情況下啟動(dòng)譯碼,單拍得到指令長(zhǎng)度。由于x86指令編碼的正交性,不可能出現(xiàn)四個(gè)并行的長(zhǎng)度譯碼單元對(duì)同一條指令譯出兩個(gè)長(zhǎng)度的情況。長(zhǎng)度譯碼時(shí),為每條指令都建立一條長(zhǎng)度譯碼路徑,四個(gè)并行長(zhǎng)度譯碼單元一定包括了所有指令的長(zhǎng)度譯碼路徑,所以對(duì)某一條指令來說,一定只有某個(gè)長(zhǎng)度譯碼單元中的某一條路徑是有效的。每個(gè)長(zhǎng)度譯碼單元都對(duì)應(yīng)各自的使能信號(hào)和指令長(zhǎng)度信息,對(duì)于某一條指令只有一個(gè)長(zhǎng)度譯碼單元的使能信號(hào)是有效的。所以根據(jù)四個(gè)長(zhǎng)度譯碼單元輸出的使能信號(hào)就能得到正確的指令長(zhǎng)度信息。

指令裝配部件接收來自指令移位寄存器中的一條完整指令,對(duì)指令數(shù)據(jù)進(jìn)行分解。根據(jù)不同指令的各種字段組合規(guī)則,將一條指令分解為操作碼、MOD/RM、SIB、偏移量和立即數(shù),準(zhǔn)備送入地址譯碼級(jí)。

LongtiumC2處理器將x86指令分為簡(jiǎn)單指令和復(fù)雜指令。簡(jiǎn)單指令直接由譯碼器譯出微指令;復(fù)雜指令則通過長(zhǎng)度譯碼部件譯出微程序入口,由微程序控制器給出整個(gè)微程序。所以在長(zhǎng)度譯碼級(jí)還要譯出一條指令的簡(jiǎn)單/復(fù)雜標(biāo)志和微程序入口。在一條指令執(zhí)行完畢時(shí)將長(zhǎng)度譯碼部件譯出的所有信息一起送入地址譯碼級(jí),同時(shí)啟動(dòng)下一條指令的長(zhǎng)度譯碼過程。

3.3地址譯碼部件

地址譯碼部件包括地址和操作數(shù)譯碼單元、簡(jiǎn)單指令微程序生成單元和微指令拼接單元。地址譯碼級(jí)接收來自長(zhǎng)度譯碼級(jí)的數(shù)據(jù)信息,主要完成訪存指令段地址和有效地址的計(jì)算、指令操作數(shù)的計(jì)算、簡(jiǎn)單指令微程序生成、簡(jiǎn)單/復(fù)雜微指令選擇和微指令拼接等功能。

地址譯碼單元根據(jù)當(dāng)前地址寬度、地址前綴、段超越前綴、MOD/RM和SIB字段,并通過讀取寄存器文件來計(jì)算訪存指令使用的段地址和有效地址。操作數(shù)譯碼單元根據(jù)操作數(shù)前綴、操作碼、MOD/RM、偏移量和立即數(shù)字段譯出當(dāng)前指令使用的操作數(shù)。簡(jiǎn)單指令微程序生成單元根據(jù)當(dāng)前指令在簡(jiǎn)單指令標(biāo)志有效的情況下生成相應(yīng)的簡(jiǎn)單指令微程序。一個(gè)多路選擇器由簡(jiǎn)單/復(fù)雜指令標(biāo)志控制。在簡(jiǎn)單指令標(biāo)志有效的情況下選擇簡(jiǎn)單指令微程序生成單元生成的微指令,在復(fù)雜指令標(biāo)志有效的情況下選擇來自微程序控制器的微指令,將選擇的結(jié)果送入微指令拼接單元。由于同一條指令可能使用不同的操作數(shù)、多條不同指令可能共用一段微程序的原因,需要對(duì)選出的微指令的不同字段作拼接、替換操作。微指令拼接單元根據(jù)微指令中的拼接標(biāo)志位,使用已經(jīng)譯出的操作碼、操作數(shù)、段地址、有效地址等信息對(duì)微指令中的相應(yīng)字段作拼接和替換操作;最后將拼接完成的微指令送入流水線,由相應(yīng)的功能單元執(zhí)行。至此,完成了一條指令的整個(gè)譯碼過程。

4指令譯碼器的實(shí)現(xiàn)

LongtiumC2處理器設(shè)計(jì)頻率為133 MHz,功耗小于1 W,使用SMIC CMOS 0.18工藝加工,目前正在進(jìn)行后端設(shè)計(jì)。指令譯碼器采用Verilog-HDL進(jìn)行描述,使用LEDA進(jìn)行代碼檢查、VCS工具進(jìn)行仿真、VERA進(jìn)行功能驗(yàn)證,使用DESIGN_VISION在SMIC CMOS 0.18工藝庫(kù)下進(jìn)行邏輯綜合。綜合時(shí)采用TOP_DOWN、子模塊級(jí)結(jié)構(gòu)化、子模塊內(nèi)邏輯展開的策略。時(shí)鐘約束7.4 ns,最大扇出數(shù)為30,線負(fù)載模型使用smic18_wl30,面積無約束。

根據(jù)綜合結(jié)果,關(guān)鍵路徑出現(xiàn)在14 Byte指令移位寄存器的控制通路上,關(guān)鍵路徑長(zhǎng)度達(dá)到7.28 ns,實(shí)際運(yùn)行頻率為137.36 MHz。結(jié)果符合設(shè)計(jì)要求,并給DFT設(shè)計(jì)留有余地。

5結(jié)束語

本文分析了x86指令集的特點(diǎn),指出一條x86指令在不帶前綴的情況下至多4 Byte就能得到指令長(zhǎng)度。同時(shí)針對(duì)串行譯碼方案速度慢、效率低的缺點(diǎn),提出一種并行譯碼器設(shè)計(jì)方案,實(shí)現(xiàn)了在不帶前綴的情況下單拍譯出指令長(zhǎng)度,支持任意兩條指令并行譯碼,從而提高了譯碼效率。

參考文獻(xiàn):

[1]艾德才,盧明,李文彬.80486/386系統(tǒng)原理與接口技術(shù)大全[K].北京:清華大學(xué)出版社,1996.

[2]周紅群,胡傳國(guó),李清慈.Intel 80486微處理器技術(shù)參考手冊(cè)[K].上海:上海科學(xué)普及出版社,1992.

[3]劉詩斌,高德遠(yuǎn),樊曉椏,等.一種嵌入式MPU指令譯碼器設(shè)計(jì)[J].西北工業(yè)大學(xué)學(xué)報(bào),2001,19(1):1-5.

[4]STEVENS K, ROTEM S, GINOSAR R, et al. An asynchronous instruction length decoder[J]. IEEE Solid State Circuits, 2001,36(2):217-226.

[5]居小波,李志斌,寧兆熙,等.一種新型CISC微處理器指令譯碼器設(shè)計(jì)方法[J].微電子學(xué),2003,33(2):154-156.

“本文中所涉及到的圖表、注解、公式等內(nèi)容請(qǐng)以PDF格式閱讀原文”

主站蜘蛛池模板: 国产va在线观看免费| 最新亚洲av女人的天堂| 永久免费无码日韩视频| 亚洲无码视频图片| 亚洲乱码视频| 国产黄色爱视频| 无码免费视频| 四虎精品黑人视频| 91在线视频福利| 91小视频版在线观看www| 久久婷婷色综合老司机| 国产一区二区三区视频| 一本综合久久| 四虎在线观看视频高清无码| 国产亚洲第一页| 漂亮人妻被中出中文字幕久久| 亚洲a级在线观看| 自拍偷拍欧美日韩| 欧美色视频网站| 欧美激情视频二区| 天天躁日日躁狠狠躁中文字幕| 在线观看视频一区二区| 久久综合五月婷婷| 国产福利观看| 国产丝袜91| 国产精女同一区二区三区久| 久久狠狠色噜噜狠狠狠狠97视色| 日本a级免费| 国内精自视频品线一二区| 欧美亚洲日韩中文| 国产精品无码一区二区桃花视频| 久久综合国产乱子免费| 2020精品极品国产色在线观看| 久久综合丝袜长腿丝袜| 国产精品久线在线观看| 色天天综合| 国产香蕉一区二区在线网站| 久久精品娱乐亚洲领先| 欧美成人亚洲综合精品欧美激情| a级毛片免费看| V一区无码内射国产| 欧美成一级| 国产精品va免费视频| 东京热高清无码精品| 黑色丝袜高跟国产在线91| 色婷婷亚洲综合五月| 免费毛片视频| 日韩激情成人| 久久精品人人做人人综合试看| 国产欧美精品一区二区| 欧美色综合久久| 久久久久青草大香线综合精品| 毛片手机在线看| 欧美成人午夜影院| 精品一区国产精品| 婷婷99视频精品全部在线观看| 99无码熟妇丰满人妻啪啪| 成人免费黄色小视频| hezyo加勒比一区二区三区| 国产成人亚洲综合A∨在线播放| 免费中文字幕一级毛片| 亚洲AⅤ综合在线欧美一区| 97精品久久久大香线焦| 国产又大又粗又猛又爽的视频| 国国产a国产片免费麻豆| 色久综合在线| 亚洲精品视频网| 欧美精品亚洲精品日韩专区| 精品人妻无码中字系列| 亚洲av成人无码网站在线观看| 国产精品白浆无码流出在线看| 99精品视频九九精品| 88av在线| 91精品国产自产在线观看| 欧美成人午夜视频免看| 欧美精品成人一区二区视频一| 欧美性天天| 欧美色视频日本| 一区二区三区在线不卡免费| 成人av手机在线观看| 天天综合天天综合| 欧美另类图片视频无弹跳第一页|