多周期MIPS(微程序)8指令CPU
1、? ?數(shù)據(jù)通路設(shè)計
首先根據(jù)慕課中華科給出的數(shù)據(jù)通路連接自己的數(shù)據(jù)通路


?這里的取地址很有講究

因為MIPS架構(gòu)是按照字編址,且MIPS的字長為定長的32位即四字節(jié),所以PC=PC+1是實際上的PC=PC+4,且RAM容量為,又因為,所以取指階段Men[PC]->IR的時候需要把PC寄存器的2-11位送入RAM。

還要注意Branch細(xì)分出來的Beq和Bne指令的連接,結(jié)合微程序控制器,可以看出來Beq和Bne只要有一個有效的時候PCSrc就為真,可以設(shè)計出如上的邏輯電路。

容易得知Beq與Alu的equal信號對應(yīng),所以直接與equal做與運算,Bne對應(yīng)Alu的不相等,所以equal要先取非再與Bne做與運算。兩個與運算的結(jié)果只要有一個有效即可,所以經(jīng)過或門形成PCsrc。
根據(jù)數(shù)據(jù)通路以及所學(xué)知識可得,需要將I型指令的imm立即數(shù)帶符號擴展到32位才能正常做運算。
總周期的部分可以用微地址來和Syscall的微地址13來進行對比運算,只要沒有停機,周期就一直在增加,因此可以設(shè)計一個下圖所示的電路

2、??? 微程序控制器設(shè)計
1、指令譯碼邏輯
根據(jù)以上指令的OpCode字段和FUNCT字段結(jié)合logism自帶的比較器,可以設(shè)計出指令譯碼邏輯部分。


2、ALU控制邏輯
根據(jù)下方提示,00的時候ALU做加法,01的時候ALU做減法,10的時候ALU的功能由FUNC字段決定,又因為FUNC字段跟R型指令關(guān)聯(lián),且Syscall不做運算,SLT做有帶符號比較運算,ADD做加法運算,因此可以設(shè)計出以下簡易的ALU控制邏輯部分


4、?實現(xiàn)微程序地址邏輯轉(zhuǎn)移

根據(jù)慕課給出的Excel表格,結(jié)合之前設(shè)計的ALU控制邏輯,加上電路分析功能,設(shè)計出的微程序地址轉(zhuǎn)移電路如下

5、根據(jù)狀態(tài)圖構(gòu)建微程序
結(jié)合狀態(tài)圖、數(shù)據(jù)通路和控制信號說明


加上Excel表格
可以看出來,取指令的時候,PC=PC+4,所以ALUSrcB=01,Ir寄存器和PC寄存器要寫入數(shù)據(jù),對應(yīng)的使能信號為1,還要讀取存儲器里面的指令,MenRead也為1。根據(jù)狀態(tài)轉(zhuǎn)換圖,只有譯碼的時候發(fā)生了跳轉(zhuǎn),其他指令都是根據(jù)下址字段運行,所以譯碼指令的P=1。Beq和Bne的PCSrc字段,根據(jù)數(shù)據(jù)通路圖或者狀態(tài)轉(zhuǎn)換圖中的指令功能可以得出是1。

可以設(shè)計出控制存儲器

3、測試:
