文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2014)07-0009-04
RISC(精簡指令集處理器)處理器完成一個(gè)指令集包含的操作只需要一條指令,而要完成一個(gè)指令集不包含的操作則需要幾條甚至幾十條基本操作指令,,大大降低了處理效率[1],。針對(duì)這一問題,本文提出一種在通用RISC微處理器中增加指令擴(kuò)展接口的方法,。用戶可以根據(jù)自己的需要,,在擴(kuò)展接口掛接自己設(shè)計(jì)的擴(kuò)展模塊,即可簡單,、靈活地進(jìn)行指令擴(kuò)展,。如何消除數(shù)據(jù)沖突是設(shè)計(jì)指令擴(kuò)展接口的關(guān)鍵技術(shù)。
在編寫程序時(shí)通過人為調(diào)整指令順序可以消除數(shù)據(jù)沖突,,這種方法不需要更改硬件電路,,但是容易發(fā)生錯(cuò)誤,而且對(duì)于無法通過調(diào)整順序消除的沖突需要插入空指令,,降低了執(zhí)行效率,。另外一種簡單的方法就是設(shè)置流水線互鎖部件,如果檢測到兩條指令之間存在沖突,,則使流水線停頓,,直到?jīng)_突消除,這種方法同樣會(huì)導(dǎo)致執(zhí)行效率的降低,。
本文將處理器通用指令和擴(kuò)展指令按照運(yùn)算結(jié)果產(chǎn)生時(shí)刻分為兩種類型,,通過分析不同類型指令發(fā)生數(shù)據(jù)沖突的情況,設(shè)計(jì)數(shù)據(jù)定向通道來消除數(shù)據(jù)沖突,。通過設(shè)計(jì)數(shù)據(jù)定向通道可以保證程序執(zhí)行的正確性和執(zhí)行效率,。
1 指令擴(kuò)展接口結(jié)構(gòu)
指令擴(kuò)展接口在RISC處理器的基礎(chǔ)上設(shè)計(jì),本文選用的 RISC處理器以MIPS指令集為標(biāo)準(zhǔn),,采用哈佛結(jié)構(gòu)程序空間與數(shù)據(jù)空間相互獨(dú)立,,設(shè)立5級(jí)流水線[2]。5級(jí)流水線包括:
(1)指令獲取(Instruction Fetch,,IF),;
(2)指令譯碼(Instruction Decode,ID),;
(3)指令執(zhí)行(Instruction Execute,,EX);
(4)內(nèi)存讀寫(Memory Access,,MEM),;
(5)寄存器回寫(Write Back,WB)。
整個(gè)微處理器系統(tǒng)[3]劃分為兩部分:一部分是數(shù)據(jù)單元,,另一部分是控制單元,。在每條指令執(zhí)行的過程中,控制單元控制數(shù)據(jù)通路正確無誤地執(zhí)行每條指令,,完成數(shù)據(jù)的各種運(yùn)算,,實(shí)現(xiàn)處理器的各項(xiàng)功能。
設(shè)計(jì)完成的指令擴(kuò)展接口支持兩種類型的擴(kuò)展指令:一種為A型簡單指令,,該指令用于實(shí)現(xiàn)簡單的邏輯運(yùn)算,;另一種為B型復(fù)雜指令,該指令用于實(shí)現(xiàn)一些復(fù)雜的操作,。用戶在進(jìn)行指令擴(kuò)展時(shí),,根據(jù)運(yùn)算的復(fù)雜度選擇相應(yīng)的指令類型,可以降低難度,,提高效率,。
對(duì)于A型指令,由于只是實(shí)現(xiàn)簡單的邏輯運(yùn)算,,可以通過擴(kuò)展流水線執(zhí)行級(jí)的ALU(邏輯運(yùn)算單元)實(shí)現(xiàn),,是單個(gè)時(shí)鐘周期內(nèi)組合邏輯電路。這種擴(kuò)展方法與Nios II的定制指令相似[4-5],。
對(duì)于B型指令,,外圍擴(kuò)展模塊要占用EX和MEM兩個(gè)流水級(jí)[6],這是因?yàn)椋?1)擴(kuò)展指令不能對(duì)處理器數(shù)據(jù)存儲(chǔ)區(qū)進(jìn)行訪問,,所以處理器執(zhí)行擴(kuò)展指令時(shí)系統(tǒng)EX和MEM級(jí)處于空閑狀態(tài),;(2)如果用戶設(shè)計(jì)的邏輯運(yùn)算單元關(guān)鍵路徑太長,延時(shí)大于時(shí)鐘周期,,就需要在運(yùn)算單元中間插入一級(jí)寄存器,;(3)用戶可能需要自建存儲(chǔ)區(qū)域,需要兩個(gè)時(shí)鐘周期才能完成存取操作,?;谝陨?點(diǎn)原因,使擴(kuò)展模塊占用兩個(gè)流水級(jí)能夠給外部擴(kuò)展模塊預(yù)留足夠的設(shè)計(jì)空間,,更好地滿足設(shè)計(jì)需求,。B型指令擴(kuò)展結(jié)構(gòu)在處理器與外部擴(kuò)展模塊之間增加了一個(gè)接口單元。接口單元的作用是隔離系統(tǒng)的控制通路,,使擴(kuò)展接口只保留數(shù)據(jù)信號(hào)[7],。
2 數(shù)據(jù)沖突分析
數(shù)據(jù)沖突是指令在流水線中重疊執(zhí)行時(shí)因需要用到前面指令的執(zhí)行結(jié)果而發(fā)生的沖突。流水線沖突除了數(shù)據(jù)沖突還有結(jié)構(gòu)沖突和控制沖突,。由于加入指令擴(kuò)展接口以后,,只對(duì)處理器的數(shù)據(jù)沖突產(chǎn)生重大影響,,所以本文對(duì)如何消除結(jié)構(gòu)沖突和控制沖突就不再介紹,只介紹處理器的數(shù)據(jù)沖突以及如何將其消除,。
為了能夠更加清楚地說明增加指令擴(kuò)展接口以后流水線數(shù)據(jù)沖突的情況,本文用數(shù)據(jù)路徑的快照形式反映流水線的執(zhí)行過程,。在時(shí)空?qǐng)D中數(shù)據(jù)路徑的快照示例如圖1所示,。
在圖1中,將處理器的指令(包括通用指令和兩種類型擴(kuò)展指令)按照運(yùn)算結(jié)果產(chǎn)生時(shí)刻分為兩類:(1)在流水線第三級(jí)(執(zhí)行級(jí))產(chǎn)生結(jié)果,,這種指令包括處理器自身的數(shù)據(jù)操作指令和A型擴(kuò)展指令,,用圖1中(a)表示;(2)在流水線第四級(jí)(內(nèi)存讀寫級(jí))產(chǎn)生結(jié)果,,這種指令包含處理器load指令和B型擴(kuò)展指令,,用圖1中(b)表示。在圖2所示的時(shí)空?qǐng)D中將采用上面兩種數(shù)據(jù)路徑快照表示相應(yīng)指令的執(zhí)行過程,。
將指令分為(a),、(b)兩種類型以后,相鄰兩條指令存在數(shù)據(jù)沖突的情況就可以歸結(jié)為以下四種情況,。
在圖2中,,箭頭代表數(shù)據(jù)需要傳輸?shù)穆窂剑^起點(diǎn)為第一條指令數(shù)據(jù)最早產(chǎn)生的位置,,箭頭終點(diǎn)為第二條指令最遲需要數(shù)據(jù)的位置,。從圖2可以看出,(1),、(2)兩種情況下數(shù)據(jù)產(chǎn)生的時(shí)刻比數(shù)據(jù)需要的時(shí)刻早,,對(duì)于這種情況采取措施將前一條指令的運(yùn)算結(jié)果通過專用通道提前送給當(dāng)前指令需要數(shù)據(jù)的位置,流水線可以順序執(zhí)行,。而對(duì)于(3),、(4)兩種情況,前一條指令結(jié)果產(chǎn)生的時(shí)刻比后一條指令需要數(shù)據(jù)的時(shí)刻晚,,所以無論采取什么措施,,都無法得到前一條指令的運(yùn)算結(jié)果,對(duì)于這種情況,,流水線必須暫停一個(gè)時(shí)鐘周期,,等前一條指令運(yùn)算完成以后數(shù)據(jù)通過定向通道送給第二條指令,流水線才能繼續(xù)執(zhí)行,。
上面分析的是簡單數(shù)據(jù)沖突,,第二條指令只與前面一條指令發(fā)生數(shù)據(jù)沖突。還有一種更復(fù)雜的情況是后面一條指令與前面兩條指令都發(fā)生數(shù)據(jù)沖突,。為了能夠更形象地體現(xiàn)這種情況,,將圖1中(a)型指令的數(shù)據(jù)路徑快照稍微修改,即為如圖3所示的復(fù)雜情況的數(shù)據(jù)沖突。
在圖3中,,第三條指令中執(zhí)行級(jí)的源操作數(shù)a是第一條指令的目的操作數(shù),,源操作數(shù)b是第二條指令的目的操作數(shù)。此時(shí)源操作數(shù)a通過定向通道已經(jīng)準(zhǔn)備好了,,而源操作數(shù)b還沒有運(yùn)算完成,,所以執(zhí)行第三條指令時(shí)需插入一個(gè)氣泡。流水線停頓一個(gè)時(shí)鐘周期以后,,第二條指令的運(yùn)算結(jié)果可以通過定向通道送給第三條指令的執(zhí)行級(jí),。但是此時(shí)第一條指令的運(yùn)算結(jié)果已經(jīng)回寫到數(shù)據(jù)寄存器,通過定向通道送過來的數(shù)據(jù)已經(jīng)不是第三條指令所需的數(shù)據(jù),,這樣就導(dǎo)致運(yùn)算結(jié)果出錯(cuò),。
對(duì)于這種情況,需要對(duì)第一條指令定向過來的數(shù)據(jù)寄存一級(jí),,流水線停頓一個(gè)時(shí)鐘周期以后源操作數(shù)a使用寄存以后的數(shù)據(jù),,源操作數(shù)b使用定向通道送來的數(shù)據(jù)。
3 數(shù)據(jù)定向通道設(shè)計(jì)
數(shù)據(jù)定向通道就是將EX級(jí)和MEM級(jí)操作完成以后的數(shù)據(jù)和目的寄存器的地址直接送到EX級(jí)輸入端,?;厮湍康募拇嫫鞯刂酚糜跈z測數(shù)據(jù)沖突,沖突檢測部件的工作過程:(1)比較當(dāng)前指令源操作數(shù)寄存器的地址與回送的目的寄存器地址是否相同,;(2)檢測前面指令運(yùn)算結(jié)果是否有效,;(3)檢測當(dāng)前指令源地址是否有效;(4)條件全部滿足以后,,發(fā)出流水線沖突信號(hào),。
控制單元檢測沖突類型,如果流水線不需要停頓,,則控制EX級(jí)內(nèi)部的數(shù)據(jù)選擇器選擇定向通道的數(shù)據(jù),;如果需要停頓,則控制流水線停頓,。
對(duì)于B型擴(kuò)展指令,,如果在接口單元內(nèi)部再設(shè)計(jì)一套沖突檢測部件和數(shù)據(jù)定向通道,則會(huì)造成資源浪費(fèi),。在執(zhí)行B型擴(kuò)展指令時(shí),,處理器EX級(jí)和MEM級(jí)處于空閑狀態(tài),因此可以利用EX級(jí)中的部分資源,。最后設(shè)計(jì)數(shù)據(jù)定向通道后處理器的局部數(shù)據(jù)路徑如圖4所示,。
在圖4中只顯示與數(shù)據(jù)流動(dòng)有關(guān)的部件。圖中接口單元和EX級(jí)使用相同的數(shù)據(jù)定向通道[8],,數(shù)據(jù)沖突檢測部件也使用同一個(gè),。接口單元在執(zhí)行B型擴(kuò)展指令且沒有發(fā)生數(shù)據(jù)沖突時(shí),,接口單元控制信號(hào)才有效,接口單元通過指令擴(kuò)展接口向外傳遞有效數(shù)據(jù),,而且只有在控制信號(hào)有效時(shí),,接口單元接收到的數(shù)據(jù)才送到回寫單元,否則將接收到的數(shù)據(jù)丟棄,。雖然控制單元不能直接控制外部擴(kuò)展模塊,,但是通過控制接口單元導(dǎo)通、關(guān)斷數(shù)據(jù)的方式,,可使外部擴(kuò)展模塊準(zhǔn)確地工作在流水線中。圖4中右上角“Reg”寄存器的作用是對(duì)MEM級(jí)定向的數(shù)據(jù)寄存一級(jí),,用于解決3條指令存在數(shù)據(jù)沖突的問題,。
4 功能測試
最后在RISC微處理器基礎(chǔ)上設(shè)計(jì)完成指令擴(kuò)展接口,預(yù)留的A型和B型擴(kuò)展指令各有200條,,對(duì)增加了指令擴(kuò)展接口的處理器進(jìn)行數(shù)據(jù)沖突測試,。擴(kuò)展一條A型指令,指令格式:AR3 Rd,,Rt,;指令功能:將Rt寄存器的值按位取反,結(jié)果賦給Rd寄存器,。擴(kuò)展一條B型指令,,指令格式:BR1 Rd,Rs,,Rt,;指令功能:Rs寄存器的值和Rt寄存器的值按位同或,結(jié)果賦給Rd寄存器,。編寫一段針對(duì)性強(qiáng)的程序,,用于測試增加指令擴(kuò)展接口以后處理器處理數(shù)據(jù)沖突的能力。測試程序如圖5所示,,圖6為測試結(jié)果,。
圖5中的4條測試程序包含了可能的數(shù)據(jù)沖突的情況。圖6為使用EDA(Electronic Design Automation)軟件仿真得到的波形圖,。從圖中可以看出,,除了第三條指令,其他指令數(shù)據(jù)沖突都通過數(shù)據(jù)定向解決,,流水線沒有停頓,;第三條指令和前兩條指令產(chǎn)生沖突,流水線停頓一個(gè)時(shí)鐘周期以后得到正確的運(yùn)算結(jié)果,。
如果使用指令調(diào)度解決數(shù)據(jù)沖突,,同樣是執(zhí)行圖5中的程序,,則需要編譯軟件或者人為地在存在數(shù)據(jù)沖突的指令之間插入空指令,最后處理器實(shí)際執(zhí)行的指令如下:
AR3 R4,,R1,;
NOP;NOP,;NOP,;
BR1 R5,R2,,R4,;
NOP;NOP,;NOP,;
ADDU R6,R5,,R4,;
NOP;NOP,;NOP,;
OR R7,R6,,R1,;
使用流水線停頓解決數(shù)據(jù)沖突,處理器最后執(zhí)行效果與上面結(jié)果相同,,只是使用指令調(diào)度處理器通過執(zhí)行空指令等待前面程序運(yùn)行完成,,而流水線停頓是通過內(nèi)部設(shè)置的流水線互鎖部件使流水線停頓等待前面程序運(yùn)行完成。上面兩種方法使用軟件仿真得到測試結(jié)果如圖7所示,。
從圖6,、圖7中可以看出,執(zhí)行相同的程序,,圖6使用的時(shí)鐘數(shù)明顯比圖7中使用的時(shí)鐘數(shù)多,。為了能夠更直觀地對(duì)比處理器的執(zhí)行效率,引入每條指令的平均時(shí)鐘周期數(shù)CPI(Cycles Per Instruction),。通過簡單計(jì)算可知,,執(zhí)行上面的測試程序時(shí)本文方法的CPI=5/4=1.25,而使用軟件調(diào)度或者流水線停頓方法的CPI=13/4=3.25,??梢姡褂脭?shù)據(jù)定向通道可以提高處理器的執(zhí)行效率,。
在進(jìn)行SoC設(shè)計(jì)時(shí),,使用具有指令擴(kuò)展接口的處理器,,只需要設(shè)計(jì)擴(kuò)展模塊就可以完成指令擴(kuò)展,實(shí)現(xiàn)復(fù)雜操作,,而且不會(huì)對(duì)處理器自身產(chǎn)生任何影響,,在保證系統(tǒng)穩(wěn)定性的前提下,增加了系統(tǒng)的運(yùn)算能力,。如果本文的設(shè)計(jì)方法能夠廣泛應(yīng)用到微處理器的設(shè)計(jì)中,,則具有指令擴(kuò)展接口的RISC 微處理器將會(huì)極大地促進(jìn)SoC設(shè)計(jì)的進(jìn)步。
參考文獻(xiàn)
[1] 夏軍.32位RISC微處理器設(shè)計(jì)研究[D].武漢:華中科技大學(xué),,2004.
[2] 張晨曦,,王志英.計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)[M].北京:高等教育出版社,2011.
[3] 鄭緯民.計(jì)算機(jī)組成和設(shè)計(jì)[M].北京:清華大學(xué)出版社,,2003.
[4] 李蘭英.Nios II嵌入式軟核SoPC設(shè)計(jì)原理及應(yīng)用[M].北京:北京航空航天大學(xué)出版社,,2009.
[5] 屈文新,樊曉椏.一種高代碼密度RISC結(jié)構(gòu)微控器的設(shè)計(jì)[J].小型微型計(jì)算機(jī)系統(tǒng),,2006,27(7):1242-1244.
[6] 劉元鋒.RISC架構(gòu)微處理器擴(kuò)展對(duì)稱密碼處理指令的研究[D].鄭州:解放軍信息工程大學(xué),,2006.
[7] 張琰,,戴紫彬.RISC結(jié)構(gòu)微處理器專用存儲(chǔ)單元的研究與實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,2008,,34(7):140-146.
[8] 李秀娟,,王祖強(qiáng),張?zhí)?一種8位嵌入式RISC MCU IP核數(shù)據(jù)通道模型設(shè)計(jì)[J].電子技術(shù)應(yīng)用,,2006,,32(4):105-106.