繼續(xù)單周期CPU設(shè)計(jì)(一)
整體設(shè)計(jì)方案:
1 課程主要目的
本課程是在前期《數(shù)字系統(tǒng)組成與設(shè)計(jì)》課程學(xué)習(xí)的基礎(chǔ)上胁编,通過實(shí)踐課的方式,依照集成電路設(shè)計(jì)流程专酗,完成一個(gè)簡(jiǎn)單獨(dú)立硬件功能電路模塊的設(shè)計(jì)睹逃,從而到達(dá)對(duì)《數(shù)字系統(tǒng)組成與設(shè)計(jì)》課程的深入理解和提高電路設(shè)計(jì)的實(shí)踐能力。
2 課程的主要內(nèi)容和任務(wù)
MIPS是典型的32位定長(zhǎng)指令字RISC處理器祷肯,要求深入理解MIPS處理器的內(nèi)部結(jié)構(gòu)及工作原理沉填。采用verilogHDL設(shè)計(jì)一個(gè)兼容MIPS指令格式,具有17條指令功能的單周期CPU硬件電路佑笋,并選用modelsim仿真工具(或其他環(huán)境)完成設(shè)計(jì)電路的仿真驗(yàn)證翼闹。在此基礎(chǔ)上,進(jìn)一步完成多周期CPU的設(shè)計(jì)及仿真蒋纬。
3 單周期處理器設(shè)計(jì)
?????? 說明:?jiǎn)沃芷贑PU指的是一條指令的執(zhí)行在一個(gè)時(shí)鐘周期內(nèi)完成猎荠,然后開始下一條指令的執(zhí)行,即一條指令用一個(gè)時(shí)鐘周期完成蜀备。
?????? 單周期CPU的功能:能夠?qū)崿F(xiàn)一些指令功能操作关摇。
?????? 設(shè)計(jì)原理:
?????? CPU在處理指令時(shí),一般需要經(jīng)過以下幾個(gè)步驟:
(1)取指令(IF):根據(jù)程序計(jì)數(shù)器PC中的指令地址琼掠,從存儲(chǔ)器中取出一條指令拒垃,同時(shí),PC根據(jù)指令字長(zhǎng)度自動(dòng)遞增產(chǎn)生下一條指令所需要的指令地址瓷蛙,但遇到“地址轉(zhuǎn)移”指令時(shí)悼瓮,則控制器把“轉(zhuǎn)移地址”送入PC,當(dāng)然得到的“地址”需要做些變換才送入PC艰猬。
(2)指令譯碼(ID):對(duì)取指令操作中得到的指令進(jìn)行分析并譯碼横堡,確定這條指令需要完成的操作,從而產(chǎn)生相應(yīng)的操作控制信號(hào)冠桃,用于驅(qū)動(dòng)執(zhí)行狀態(tài)中的各種操作命贴。
(3)指令執(zhí)行(EXE):根據(jù)指令譯碼得到的操作控制信號(hào),具體地執(zhí)行指令動(dòng)作食听,然后轉(zhuǎn)移到結(jié)果寫回狀態(tài)胸蛛。
(4)存儲(chǔ)器訪問(MEM):所有需要訪問存儲(chǔ)器的操作都將在這個(gè)步驟中執(zhí)行,該步驟給出存儲(chǔ)器的數(shù)據(jù)地址樱报,把數(shù)據(jù)寫入到存儲(chǔ)器中數(shù)據(jù)地址所指定的存儲(chǔ)單元或者從存儲(chǔ)器中得到數(shù)據(jù)地址單元中的數(shù)據(jù)葬项。
(5)結(jié)果寫回(WB):指令執(zhí)行的結(jié)果或者訪問存儲(chǔ)器中得到的數(shù)據(jù)寫回相應(yīng)的目的寄存器中。
?單周期CPU迹蛤,是在一個(gè)時(shí)鐘周期內(nèi)完成這五個(gè)階段的處理民珍。
3.1 總體設(shè)計(jì)方案
主要包括內(nèi)容:
1)指令定義
2)總體結(jié)構(gòu)設(shè)計(jì)(對(duì)各個(gè)子模塊簡(jiǎn)單說明其功能)
總體模塊框圖如下:
如上圖襟士,此兼容MIPS指令格式,具有17條指令功能的單周期CPU硬件電路可分為七個(gè)模塊:
1)PC模塊:用于計(jì)算下一條指令地址嚷量;
2)指令存儲(chǔ)器模塊:用于存儲(chǔ)指令陋桂;
3)數(shù)據(jù)存儲(chǔ)器模塊:用于存儲(chǔ)數(shù)據(jù);
4)寄存器堆模塊:多個(gè)寄存器模塊蝶溶,可用于存取數(shù)據(jù)嗜历;
5)立即數(shù)擴(kuò)展模塊:判斷是否進(jìn)行擴(kuò)展,并輸出擴(kuò)展后的值;
6)ALU計(jì)算模塊:各種計(jì)算身坐;
7)主控制模塊:通過指令計(jì)算各種控制信號(hào)的值秸脱。
3)接口定義和接口時(shí)序等
?? 頂層模塊是整個(gè)CPU的控制模塊落包,通過連接各個(gè)子模塊來達(dá)到運(yùn)行CPU的目的部蛇,整個(gè)模塊設(shè)計(jì)如下:
頂層設(shè)計(jì)框圖:
3.2子模塊詳細(xì)設(shè)計(jì)
3.2.1主控制模塊
功能:通過判斷當(dāng)前執(zhí)行的操作碼(con_opCode)和運(yùn)算結(jié)果標(biāo)志(con_zero)來控制各個(gè)控制信號(hào)的輸出,從而達(dá)到控制各指令的目的咐蝇。
3.2.2 ALU運(yùn)算單元 功能:模塊ALU接收寄存器的數(shù)據(jù)和控制信號(hào)作為輸入涯鲁,將結(jié)果輸出,具體設(shè)計(jì)如下:
3.2.3 PC模塊
?? PC單元以時(shí)鐘信號(hào)clk有序,重置標(biāo)志reset抹腿,立即數(shù)pc_immediate以及pc_PCWre和pc_PCSrc兩個(gè)控制信號(hào)為輸入,輸出當(dāng)前PC地址旭寿,具體設(shè)計(jì)如下:
3.2.4 立即數(shù)擴(kuò)展模塊
?? 擴(kuò)展單元的設(shè)計(jì)比較簡(jiǎn)單警绩,其功能就是將一個(gè)16位的立即數(shù)擴(kuò)展到32位,具體模塊設(shè)計(jì)如下:
3.2.5數(shù)據(jù)存儲(chǔ)器
?? 數(shù)據(jù)存儲(chǔ)單元的功能是讀取數(shù)據(jù)盅称,根據(jù)數(shù)據(jù)通路圖可以有如下模塊設(shè)計(jì):
3.2.6指令存儲(chǔ)器
根據(jù)當(dāng)前的PC地址得到對(duì)應(yīng)的ins_op, ins_rs,
ins_rt, ins_rd, ins_immediate以及ins_target肩祥,具體設(shè)計(jì)如下:
內(nèi)部實(shí)現(xiàn):將需要測(cè)試的匯編指令程序轉(zhuǎn)化為指令代碼,為了書寫的簡(jiǎn)便缩膝,將32位二進(jìn)制指令代碼轉(zhuǎn)化為16進(jìn)制混狠,具體測(cè)試設(shè)計(jì)表見上表各類型測(cè)試指令。
3.2.7寄存器堆
寄存器文件單元的功能是接收instructionMemory中的rs,rt,rd作為輸入疾层,輸出對(duì)應(yīng)寄存器的數(shù)據(jù)将饺,從而達(dá)到取寄存器里的數(shù)據(jù)目的泡徙。為了防止0號(hào)寄存器寫入數(shù)據(jù)需要內(nèi)部writeReg的時(shí)候多加一個(gè)判斷條件肥卡,即writeReg不等于0時(shí)寫入數(shù)據(jù)沧竟。具體設(shè)計(jì)如下:
3.3設(shè)計(jì)總體連接及仿真驗(yàn)證
??? 設(shè)計(jì)總體連接圖如圖示: