劉秋菊, 張光照, 王仲英
(1.鄭州工程技術學院 信息工程學院,鄭州 450000; 2.河南經貿職業學院 技術科學系,鄭州 450018)
基于MIPS指令集的流水線CPU設計與實現
劉秋菊1, 張光照2, 王仲英2
(1.鄭州工程技術學院 信息工程學院,鄭州 450000; 2.河南經貿職業學院 技術科學系,鄭州 450018)

提出了一種CPU設計方案,實現指令集為MIPS指令集中選取15條指令作為本CPU的基本指令,采用基本5步流水線CPU設計。分析了流水線CPU的邏輯結構與指令的處理過程,給出了取指階段IF、譯碼階段ID、執行階段EX、內存訪問階段MEM、寄存器寫回階段WB階段的設計與實現。對流水線產生的相關性問題,采用Bubble法和Forwarding法相結合的方法來消除相關性,在FPGA平臺上進行了測試,測試結果表明,該方案符合設計要求。
流水線; 中央處理器; 設計; 指令集
在工業設計和機器人研究中,微處理器作為控制部件的核心是設計的關鍵,其性能直接影響整個系統的性能。CPU作為微處理器的核心其設計得到很多學者的研究,劉明達在研究中很粗略的介紹了CPU各模塊的設計,何克東在研究教學實驗平臺中提到了如何設計高性能CPU,提到五級流水線CPU設計,介紹了CPU設計有單周期和流水線兩種設計CPU方式[1-5]。現代微處理器廣泛采用流水線CPU設計,本文詳細介紹了流水線CPU設計的5個階段以及對遇到的Hazard數據相關問題提出了解決方法。
1.1 實現的指令
本次設計從MIPS指令集中選取15條指令作為本CPU的基本指令,其他指令在譯碼階段均解釋為未定義指令[6-8],指令格式如圖1所示。

圖1 CPU基本指令格式
1.2 五步流水線組成
流水線5個階段分別是指取指階段IF、譯碼階段ID、執行階段EX、內存訪問階段MEM、寄存器寫回階段WB(見圖2)。

圖2 五步流水線組成
1.3 流水線CPU邏輯原理圖
基本5步流水線CPU的邏輯原理圖如圖3所示。總的來說由5個Stage Register和5個Stage部分組成:在各階段執行完成后所產生的結果將鎖存在Stage Register中以供下一階段使用;CPU控制信號在譯碼階段由控制單元產生,也將后面階段才發生作用的控制信號鎖存在Stage Register中。執行結果和控制信號就是這樣在Stage Register中一級一級傳遞,以滿足各個階段的執行與控制需求。因此,Stage Register在流水線結構中起著非常重要的作用,它必須是邊沿觸發的,以保證本條指令的中間數據不會被后續指令干擾。

圖3 基本5步流水線CPU的邏輯原理圖
這樣由5個Stage部分和5個Stage Register的流水線結構設計非常清晰,各個階段執行自己的任務,由Stage Register作為數據通路,使得具體實現過程中可以對各個階段單獨進行測試,最后再將各階段串聯起來進行集成測試,功能調試與測試將變得簡單。
1.4 流水線CPU實現原理圖
基本5步流水線CPU的實現原理圖如圖4所示。實現原理圖保持了邏輯原理圖中5個Stage Register和5個Stage的清晰的設計結構:前綴為REG的部件是Stage Register;前綴為STAGE的部件為Stage。整體數據流向為從上往下、自左往右,結構比較清晰,且各個部件均經過單獨測試成功后才集成在一起。本實現原理圖為基本5步流水線結構,還不包括Cache和精確中斷響應部分。增加Cache和精確中斷響應部分需要對總體流水線結構做適當擴充,具體擴充后的原理圖以及實現在今后繼續研究。

圖4 基本5步流水線CPU實現原理圖
2.1 IF階段實現
IF階段要完成的任務是:從指令存儲器中取出指令、將當前PC值加4、選擇出PC的下一個值。實現原理圖如圖5所示,IF階段需要判斷下一個PC值是PC+4還是跳轉的目的地址,判斷的依據是ID階段所給的BRANCH控制信號,因此輸入腳必須包括BRANCH控制線和跳轉目標地址數據線PCTAR。
2.2 ID階段實現
ID階段需要完成的任務比較重:指令譯碼、根據指令類型產生控制信號、從寄存器文件中選擇需要的寄存器、判斷是否是絕對跳轉或分支指令,如果是還要計算出它們的跳轉目標地址、檢測是否存在可能的Data Hazard,并選擇是否使用Bubble法和Forwarding法消除Hazard[9-12]。實現原理圖如圖6所示,其中需要特別說明的是寄存器文件只實現了8個,而不是MIPS指令集的32個。最重要的部分是控制單元,它是用Verilog語言實現的,任務是解釋指令、產生控制信號、檢測與消除Data Hazard。

圖5 IF實現原理圖
控制單元的輸出腳都是控制信號,而輸入腳中有6個是為了Data Hazard的檢測與消除。在檢測Data Hazard時,首先測試 EWREG和EM2REG輸入腳:如果EWREG為1,那么本條指令的前一條指令是回寫寄存器指令;如果EM2REG為1,那么前一條指令是Load指令。再用本條指令的RS和RT字段(即本條指令可能引用的寄存器地址)與EDESR比較就可以知道是否存在Data Hazard數據相關性。同樣通過測試MWREG、MM2REG及MDESR即可知道本條指令與前前條指令是否存在Data Hazard。

圖6 ID實現原理圖
如果存在Hazard,則根據不同情況發出不同的信號控制Hazard的消除。NOSTALL輸出信號用于Bubble技術的控制,而FWDA、FWDB及 FWDC輸出信號用于FORWARDING技術的控制。
2.3 EX階段實現
EX階段執行運算任務,本CPU可以執行加減、邏輯及移位三類運算。EX階段最主要的任務是進行運算,運算單元ALU實現原理圖如圖7所示。
2.4 MEM階段實現
MEM階段執行訪問數據存儲器任務,本次設計中將指令與數據存儲器分開,且存儲容量都是32個字。實現原理圖如圖8所示。

圖7 ALU實現原理圖

圖8 MEM階段實現原理圖
2.5 WB階段實現
WB階段執行將指令執行結果寫回寄存器的任務,而執行結果有兩種可能:一種是ALU運算結果;另一種是MEM取數據結果。實現原理圖如圖9所示,根據WM2REG控制信號(即判斷指令是否為Load指令)來選擇最終的回寫數據。實際上從這可以看出本設計中所用的都是開關式控制方式,它的特點是不管指令屬于何種類型,按其所有可能的形式執行操作,讓所有的部件都運轉起來,最后可能產生多種結果數據,再由控制信號來控制開關以選擇所需的結果。

圖9 WB階段實現原理圖
功能模擬測試需要設計典型的代碼序列來測試流水線的運行狀況及Hazard問題的解決[13-16]。圖10所示為測試代碼與測試波形圖。
測試結果表明,該設計是成功的,同時該設計的應用成果在電子設計大賽中也取得了很好的成績。

圖10 測試代碼與測試波形圖
提出了一種流水線CPU的設計方法。介紹了5步流水線CPU設計的步驟,并針對邏輯圖介紹了每個階段的詳細實現,CPU設計中還要考慮數據相關性問題,本次設計中在ID階段通過不同的控制信號來解決不同的數據相關性問題,最后進行了功能測試,測試結果符合設計要求。CPU設計中會遇到很多問題,例如緩沖、中斷等,這也是下一步要繼續研究的問題。
[1] 朱子玉,李亞民.CPU芯片邏輯設計技術[M]. 北京:清華大學出版社,2005.31-110.
[2] John L.Computer architecture: A quantitative approach, fourth edition[M].3rd ed. Boston: AP ProtwaaionL, 2006. 2009:88-172.
[3] 劉明達.基于VerilogHDL的簡單CPU設計[J].計算機光盤軟件與應用,2013,16(13):302-304.[4] 何克東,王恒才.高性能CPU設計實驗平臺及其應用[J].實驗室研究與探索,2007(12): 212-214.
[5] 陳國強.基于AD9954的信號發生器設計[J].實驗室研究與探索,2010,29(8):222-225.
[6] 劉 明,蔡啟先,余祖峰.改進MIPS指令集模擬方法的研究[J].廣西工學院學報,2009(12): 54-57.
[7] 薛 勃,周玉潔.MIPS32指令集兼容的CPU模擬器設計[J].計算機工程,2009,35(1):263-265.
[8] 袁 婷,劉怡俊.自主設計精簡指令集的流水線CPU[J].微電子學與計算機,2015,32(2):124-128.
[9] 李山山,劉敬晗.利用Tomasulo算法處理數據相關的流水線CPU設計[J].實驗室研究與探索,2014,33(12):90-95.
[10] 劉秋菊,李 飛,劉書倫.一種流水線CPU設計中的Hazard消除法[J].微電子學與計算機,2012,29(8):33-36.
[11] 王艷秋.基于FPGA的CPU設計與實現[D].天津:河北工業大學,2008.
[12] 賴兆磬,潘 明,張 輝.基于FPGA流水線CPU控制器的設計與實現[J].微計算機信息,2008(20):233-235.
[13] 曹學飛,張盛兵,張 駿.32位CISC微處理器流水線的設計[J].微電子學與計算機,2007,24(4):186-189.
[14] 劉秋菊,李 飛,劉書倫.帶Cache和精確中斷響應的CPU設計[J].實驗室研究與探索,2012,31(3):68-74.
[15] 曹學飛,張盛兵.“LongtiumC2”微處理器流水線設計[J].微處理機,2010(1):9-12.
[16] 東野長磊,戚 梅.一種帶Cache的嵌入式CPU的設計與實現[J].微型機與應用,2010,29(14):17-19.
Design and Implementation of Pipeline CPU Based on MIPS Instruction Set
LIU Qiuju1, ZHANG Guangzhao2, WANG Zhongying2
(1. School of Information Engineering, Zhengzhou Institute of Technology, Zhengzhou 450000, China; 2. Department of Technical, Henan Institute of Economics and Trade, Zhengzhou 450018, China)
In this paper, a design method of CPU was proposed, the instruction set of the CPU contained 15 items of MIPS instruction set, and the basic method of five step pipeline CPU design was used. Analyses were conducted on the logic structure of the pipeline CPU and the processing of the instruction. This paper also gave design and realization of stage IF, stage ID, stage EX, stage MEM and stage WB. About the pipeline-related problems, the paper adopted Bubble and Forwarding technologies to eliminate it. The tests on the FPGA platform show that the scheme meets the design requirements.
pipelines; CPU; design; instruction set
2016-11-20
河南省科技攻關項目(172102210606);河南省高等學校重點科研項目(17B520040)
劉秋菊(1970-),女,河南孟州人,教授,現主要從事計算機應用教學研究。Tel.:15737152760;E-mail:mzlqj@126.com
TP 332
A
1006-7167(2017)08-0148-05