參考計組實驗測試指令 - 簡書,添加了一些細節。
1.添加 bne指令
修改 ctrl.v
之后修改mipstestloopjal_sim.asm,mars dump 為 bnetest.dat
修改sccomp_tb
modelsim編譯,模擬。信號添加sccomp_tb: u_ctrl -> i_bne ,npc, pc
可見i_bne控制信號為1時,npc變為44。添加bne成功
2.添加jr指令
先看其格式。
R型指令。
故在ctrl.v如下修改。
ctrl.v又兩處修改
然后在NPC.v修改。注意添加參數和input
=RD1的原因可見sccpu.v
在ctrl_encode_def 定義NPC_JR
在sccpu.v添加參數 .RD1
然后寫測試程序
$ra先賦值為4.這樣應該會不斷循環。
導出測試
勿忘修改sccomp_tb
波形圖可見PC從1c變到設定的4。添加成功
3.添加JALR
ctrl.v
無條件跳轉到由寄存器rs指定的指令,並將下一條指令的地址保存到寄存器$ra中
測試代碼
可見從14跳到4,
並且$ra 記錄 18
4.添加NOR指令
在alu.v中
測試代碼
波形:
寄存器:
5.添加sll & sra & srl指令
注意這里做了擴展
注意同時修改了input ALUOp的寬度
然后在ctrl.v中
寫寄存器
注意只改了RegWrite,下面的RD沒改
添加輸出
在sccpu.v中
測試代碼:
波形:可以看到ALUop對應 sll,srl,sra的1000,1001,1010
寄存器值:
6.sllv和srlv
這里sllv使用的是rs低五位 自己動手寫CPU之第五階段(3)——MIPS指令集中的邏輯、移位與空指令 - yxwkaifa - 博客園
sllv $t1,$t2,$t3。
則t1值為t2左移t3的低五位
但是這里不太懂,沒搞明白是怎么實現的邏輯左右移,位數可變
這里犯了一次錯誤。復制粘貼后忘了改數字了
測試代碼:
波形:
寄存器變化
7.stli指令
小於則置一
測試代碼:
波形:
寄存器值:
8.lui指令
取高十六位
測試代碼:
波形圖:
寄存器值:
9.andi指令
別忘了RT
aluop同and
測試代碼:
波形圖:
寄存器:
以上。nice!
學號后八位排序
01510029
lui 0x0151
ori 0x0029
記得改sccomp_tb
跑完看result.txt
大概是完成了排序。
