柳 成,榮 靜
?
基于MIPS架構(gòu)的多周期CPU設(shè)計
柳 成,榮 靜
(揚州大學(xué)廣陵學(xué)院,江蘇 揚州 225000)
為了提高多周期CPU流水線的效率,在指令存儲器和數(shù)據(jù)存儲器的數(shù)據(jù)讀取中設(shè)計發(fā)送地址在上升沿、讀取數(shù)據(jù)在下降沿,從而實現(xiàn)譯碼和訪存在一個周期內(nèi)完成。在取指級不再單獨設(shè)置加法器,把PC+4放在ALU中完成。通過大量的多路選擇器與數(shù)據(jù)交互總線來進(jìn)行數(shù)據(jù)聯(lián)通。采用Verilog HDL語言設(shè)計出CPU,并在VIVADO平臺上實現(xiàn)仿真,最后通過龍芯公司的LS-CPU-EXB-002試驗箱來進(jìn)行驗證,結(jié)果表明所設(shè)計的多周期CPU的有效性。
流水線;Verilog HDL;多周期CPU;LS-CPU-EXB-002試驗箱
MIPS架構(gòu)是為流水線而生,每條MIPS指令的執(zhí)行分為五個部分,每一個部分為一個流水級。MIPS是最簡單且內(nèi)核開源的微處理器之一,相對于其它架構(gòu)微處理器,相同位數(shù)的MIPS架構(gòu)的時鐘頻率較低,其運行速度也較慢。高效的CPU要求流水線的每一個階段都占用固定的時間,再通過縮短流水線各個階段的執(zhí)行時間來提高時鐘頻率,在此我們通過改進(jìn)取地址和讀數(shù)據(jù)時鐘控制來實現(xiàn)。
傳統(tǒng)的MIPS架構(gòu)多周期CPU的設(shè)計中,在發(fā)送地址的下一拍才能獲得相應(yīng)的數(shù)據(jù),從指令和數(shù)據(jù)存儲器中讀取數(shù)據(jù)就需要等待一個周期,這樣往往會造成資源浪費。為了消除這個閑置時間,將發(fā)送地址設(shè)計在時鐘的上升沿,讀取數(shù)據(jù)放在下降沿,最終實現(xiàn)32位MIPS架構(gòu)多周期CPU。
MIPS體系結(jié)構(gòu)主要采用了流水線技術(shù)[1],它把一條指令的執(zhí)行分為幾個周期來完成。這樣每個周期處理器只做一件事,大大的減輕了處理器的任務(wù),使處理器的頻率更快,處理器也更高效。通過改進(jìn)文獻(xiàn)[2]中的五級流水線得到如圖1所示的多周期CPU流水線設(shè)計。
32位MIPS架構(gòu)的匯編指令長度為32位,都是三操作數(shù)指令,在此直接采用MIPS32指令系統(tǒng)中的20條指令[2,3]。分為五種類型,具體如表1所示。

圖1 多周期CPU流水線示意圖
表1 指令格式
其中rs和rt是源操作數(shù)的寄存器號;rd是目的寄存器號,有時也可以做源寄存器號;immediate表示立即數(shù),offset是偏移量,address是地址,sa是移位量。
本文將分為取指、譯碼、執(zhí)行、訪存、寫回五個階段[4]來設(shè)計。
在此階段CPU主要完成兩個任務(wù),一是PC+4,二是根據(jù)PC值從指令存儲器[5]中取出指令。當(dāng)IF級運行時,執(zhí)行級處于閑置狀態(tài),設(shè)計 PC+4在ALU中完成,不再單獨設(shè)置加法器。通常CPU讀取地址后,需要等待一個周期,再讀取數(shù)據(jù)。但事實上,這一個周期里只有上升沿有效,下降沿是空閑,而對于多周期CPU來說又不存在數(shù)據(jù)相關(guān)問題,所以使讀取地址放在上升沿,獲取數(shù)據(jù)放在下降沿,這樣只需一拍時間就能完成取指。
此階段主要完成的任務(wù)是把操作碼op、功能碼sa送入控制器中,得出控制信號,由控制信號來決定CPU接下來的任務(wù)[6]。主要控制信號有指令操作、存儲操作、執(zhí)行操作、寫回操作任務(wù)和PC值變化形式。
為了使資源利用最大化,我們將跳轉(zhuǎn)指令的高位加載也放在ALU中進(jìn)行,立即數(shù)的擴(kuò)展設(shè)置專門的擴(kuò)展電路來完成,由控制信號EXTOP來決定是零擴(kuò)展還是符號擴(kuò)展。
跳轉(zhuǎn)指令在譯碼階段已經(jīng)完成了,其他四種類型指令將進(jìn)入執(zhí)行階段,不同類型指令在執(zhí)行階段的情況也不同[7]。我們在執(zhí)行階段設(shè)置一個新的判決電路模塊[8],把在存儲器、寄存器堆中取出的數(shù)據(jù)和控制器發(fā)出的相關(guān)控制信號送進(jìn)去經(jīng)過判決生成兩個信號,作為ALU操作數(shù)端口前的數(shù)據(jù)選擇器的選擇信號。
在此階段讀取高速緩存中的數(shù)據(jù)變量。在MIPS架構(gòu)中只有兩條指令用到它,lw(讀數(shù)據(jù))和sw(寫數(shù)據(jù)),在執(zhí)行級中已計算出存儲器的地址
為了在執(zhí)行寫字節(jié)時,依據(jù)地址的低兩位,移動store的字節(jié)到對應(yīng)的位置,我們在數(shù)據(jù)存儲器前后各設(shè)置一個四選一數(shù)據(jù)選擇器。在此階段設(shè)置時鐘上升沿從EX_MEM總線中取出數(shù)據(jù),向存儲器中發(fā)出地址,在時鐘下降沿中讀出數(shù)據(jù),然后鎖存在MEM_WB總線中。
此階段就是為了把ALU計算的數(shù)據(jù)或者是在存儲器中取出的數(shù)據(jù)寫回到寄存器堆中,其中寫回的目的寄存器號有rt和rd。
設(shè)計六個狀態(tài),分別是空閑、取指、譯碼、執(zhí)行、訪存和寫回。令I(lǐng)DLE表示為空閑狀態(tài)、FETCH表示為取指階段、DECODE表示為譯碼階段、EXE表示為執(zhí)行階段、MEM表示為訪存階段、WB表示為寫回階段。在譯碼階段要判斷跳轉(zhuǎn)指令有效值和譯碼完成有效值的“與”運算是否為1,為1則跳回取值級,否則進(jìn)入下一階段。多周期CPU狀態(tài)機(jī)[9]示意圖如圖2所示,整個多周期CPU的結(jié)構(gòu)設(shè)計如圖3所示。

圖2 多周期CPU狀態(tài)機(jī)示意圖

圖3 多周期CPU結(jié)構(gòu)圖
(1)仿真圖
我們采用Verilog HDL語言來實現(xiàn)整個CPU功能[10],在VIVADO上編譯仿真。圖4是多周期CPU對預(yù)設(shè)指令執(zhí)行的部分仿真[11]圖,其中紅色的高阻狀態(tài)總線表示的是寄存器堆取數(shù)據(jù),此時CPU在執(zhí)行指令的過程中從交互總線鎖存器中取數(shù)據(jù),所以寄存器堆處于高阻,在寫回階段完成后,數(shù)據(jù)將會寫回到寄存器堆中。
(2)實驗箱驗證
LS-CPU-EXB-002實驗箱[12,13]采用了簡單化的輸入輸出控制接口,它的觸摸屏實現(xiàn)的是硬件驅(qū)動,可以隨時進(jìn)行輸入輸出,通過該實驗箱來驗證所設(shè)計的多周期CPU的有效性。如圖5所示,其中IF_PC表示IF模塊PC值,ID_PC、EXEPC、MEMPC、WB_PC表示當(dāng)前模塊的PC值,IF_IN表示從IF級中取出的指令,MADDR表示存儲器地址,MDATA表示從存儲器中讀出的數(shù)據(jù),REG表示32位寄存器測試標(biāo)識符,隨著PC值的變化,不斷的有結(jié)果寫入。在試驗箱上通過撥碼可以控制PC值的變化,從指令存儲器中取出指令并進(jìn)行數(shù)據(jù)裝載,實驗表明,此CPU可以高效地完成測試的指令,并能把計算的結(jié)果寫入寄存器堆中。

圖4 仿真圖

圖5 CPU驗證圖
經(jīng)過對取指級的改進(jìn),使PC+4在ALU中實現(xiàn),這樣最大化地利用CPU中EXE模塊資源。同時通過對時鐘上下沿控制,將指令存儲器與數(shù)據(jù)存儲器發(fā)送地址與讀取地址在一個周期內(nèi)完成,那么譯碼級與訪存級就只需一個周期,這樣能大大提高CPU的時鐘頻率。特別是在執(zhí)行級中我們設(shè)計了一個判決電路,加快數(shù)據(jù)的交互與傳輸。最后通過軟件仿真和硬件仿真驗證,來證實所設(shè)計的CPU的正確性,由硬件仿真可以看到所設(shè)計的CPU具有實用性。
[1] 劉秋菊, 張光照, 王仲英. 基于MIPS指令集的流水線CPU設(shè)計與實現(xiàn)[J]. 實驗室研究與探索, 2017, 36(8): 148-152.
[2] D.Sweetman. 看MIPS跑linux——MIPS體系結(jié)構(gòu)剖析(中文版)[M]. 北京: 機(jī)械工業(yè)出版社, 2008.
[3] M View. MIPS32 Architecture for programmers volume II: the MIPS32 Introduction set[S]. MIPS Technologies Inc, 2005: 10-300.
[4] M View. MIPS32 Architecture for programmers volume I: Introduction to the MIPS32 Architecture[S]. MIPS Technologies Inc, 2005: 7-65.
[5] 閻石. 數(shù)字電子技術(shù)基礎(chǔ)[M]. 北京: 高等教育出版社, 2005.
[6] 秘海曉. 基于FPGA的32位五級流水線CPU的研究與設(shè)計[D]. 河北: 河北工業(yè)大學(xué), 2012.
[7] 李亞民. 計算機(jī)原理與設(shè)計[M]. 北京: 清華大學(xué)出版社, 2011.
[8] 張震. 基于FPGA的通用型FIR數(shù)字濾波器的研究與設(shè)計[J]. 軟件, 2015, 36(6): 125-128.
[9] 馮建文. 基于有限狀態(tài)機(jī)的多周期CPU實驗設(shè)計[J]. 實驗技術(shù)與管理, 2017, 34(7): 127-131.
[10] 焦華. 基礎(chǔ)編程的思考方法[J]. 軟件, 2018, 39(3): 57-62.
[11] 張玲, 晏伯武. 時序仿真和驅(qū)動編寫在數(shù)字電路實踐教學(xué)中的應(yīng)用研究[J]. 軟件, 2016, 37(3): 107-109.
[12] 夏宇聞. Verilog數(shù)字系統(tǒng)設(shè)計教程[M]. 北京: 北京航空航天大學(xué)出版社, 2003.
[13] 龍芯中科技術(shù)有限公司.LS-CPU-EXB-002CPU設(shè)計與體系結(jié)構(gòu)實驗指導(dǎo)手冊[Z]. 2016.
Design of Multi-cycle CPU Based on MIPS Architecture
LIU Cheng, RONG Jing
(Guangling College of Yangzhou University, Yangzhou 225000)
In order to improve the efficiency of the multi-cycle CPU pipeline, the designation of the sending address is on the rising edge and the reading data is on the falling edge in the data reading of the instruction memory and the data memory, so that the decoding and the access are completed in one cycle. The adder is no longer set separately at the fetch level, and PC+4 is placed in the ALU. Data communication is performed through a large number of multiplexers and data exchange buses. The CPU was designed using Verilog HDL language, and the simulation was implemented on the VIVADO platform. Finally, the verification was performed by the company's LS-CPU-EXB-002 test box. The results showed the effectiveness of the designed multi-cycle CPU.
Pipeline; Verilog HDL; Multi-cycle CPU; LS-CPU-EXB-002 test box
TP332
A
10.3969/j.issn.1003-6970.2018.08.009
揚州大學(xué)廣陵學(xué)院資助項目(JGYB17012)
柳成(1994-),本科生,研究方向為計算機(jī)體系結(jié)構(gòu);榮靜(1990-),研究生,揚州大學(xué)廣陵學(xué)院助教,研究方向為信息安全。
本文著錄格式:柳成,榮靜. 基于MIPS架構(gòu)的多周期CPU設(shè)計[J]. 軟件,2018,39(8):40-44