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