Verilog hdl 实现单周期cpu

参考计组实验测试指令 - 简书,添加了一些细节。

1.添加 bne指令

修改 ctrl.v

Verilog hdl 实现单周期cpu_第1张图片
 

 

Verilog hdl 实现单周期cpu_第2张图片
 

 


 

之后修改mipstestloopjal_sim.asm,mars dump 为 bnetest.dat

 

Verilog hdl 实现单周期cpu_第3张图片
 

修改sccomp_tb

 


 

modelsim编译,模拟。信号添加sccomp_tb: u_ctrl -> i_bne ,npc,  pc

 

Verilog hdl 实现单周期cpu_第4张图片
 

可见i_bne控制信号为1时,npc变为44。添加bne成功

2.添加jr指令

先看其格式。

 


 

R型指令。

故在ctrl.v如下修改。

Verilog hdl 实现单周期cpu_第5张图片
 

ctrl.v又两处修改

 

Verilog hdl 实现单周期cpu_第6张图片
 

然后在NPC.v修改。注意添加参数和input

 


 

 


 

 

=RD1的原因可见sccpu.v

 


 

在ctrl_encode_def 定义NPC_JR

Verilog hdl 实现单周期cpu_第7张图片
 

在sccpu.v添加参数  .RD1

Verilog hdl 实现单周期cpu_第8张图片
 

然后写测试程序

$ra先赋值为4.这样应该会不断循环。

导出测试

Verilog hdl 实现单周期cpu_第9张图片
 

勿忘修改sccomp_tb

 


 

波形图可见PC从1c变到设定的4。添加成功

 


 

3.添加JALR

 


 

ctrl.v

 


 

 


 

 


 

 

Verilog hdl 实现单周期cpu_第10张图片
 

 

JALR指令格式为 jalr rs

无条件跳转到由寄存器rs指定的指令,并将下一条指令的地址保存到寄存器$ra中

测试代码

 

Verilog hdl 实现单周期cpu_第11张图片
 

可见从14跳到4,


 

并且$ra 记录 18

 


 

4.添加NOR指令

 

Verilog hdl 实现单周期cpu_第12张图片
 

 


 

 


 

在alu.v中

 

Verilog hdl 实现单周期cpu_第13张图片
 

测试代码

Verilog hdl 实现单周期cpu_第14张图片
 

波形:

 


 

寄存器:

Verilog hdl 实现单周期cpu_第15张图片
 

5.添加sll & sra & srl指令

注意这里做了扩展

Verilog hdl 实现单周期cpu_第16张图片
 

注意同时修改了input ALUOp的宽度

Verilog hdl 实现单周期cpu_第17张图片
 

然后在ctrl.v中

写寄存器

注意只改了RegWrite,下面的RD没改

Verilog hdl 实现单周期cpu_第18张图片
 

 

添加输出

 

Verilog hdl 实现单周期cpu_第19张图片
 

 

 


 

 

在sccpu.v中


 

 


 
Verilog hdl 实现单周期cpu_第20张图片
 

 

Verilog hdl 实现单周期cpu_第21张图片
 

 

Verilog hdl 实现单周期cpu_第22张图片
 

测试代码:

 


 

波形:可以看到ALUop对应 sll,srl,sra的1000,1001,1010

 

Verilog hdl 实现单周期cpu_第23张图片
 

寄存器值:

 

Verilog hdl 实现单周期cpu_第24张图片
 

6.sllv和srlv

 

这里sllv使用的是rs低五位 自己动手写CPU之第五阶段(3)——MIPS指令集中的逻辑、移位与空指令 - yxwkaifa - 博客园

sllv $t1,$t2,$t3。

则t1值为t2左移t3的低五位

但是这里不太懂,没搞明白是怎么实现的逻辑左右移,位数可变

这里犯了一次错误。复制粘贴后忘了改数字了


 

 


 

 

 


 

 


 

 

Verilog hdl 实现单周期cpu_第25张图片
 

测试代码:

 

Verilog hdl 实现单周期cpu_第26张图片
 

波形:

 

Verilog hdl 实现单周期cpu_第27张图片
 

寄存器变化

 

Verilog hdl 实现单周期cpu_第28张图片
 

7.stli指令

小于则置一

 


 

 


 

 


 

 


 

测试代码:

 


 

波形:

 


 

寄存器值:

 

Verilog hdl 实现单周期cpu_第29张图片
 

8.lui指令

取高十六位


 

 


 

 


 

 

 


 

 


 

 

测试代码:


 

波形图:

 


 

寄存器值:

 

Verilog hdl 实现单周期cpu_第30张图片
 

9.andi指令

 


 

 


 

别忘了RT

Verilog hdl 实现单周期cpu_第31张图片
 

 

aluop同and


 

测试代码:

 


 

波形图:

 


 

寄存器:

 

Verilog hdl 实现单周期cpu_第32张图片
 

以上。nice!

学号后八位排序

01510029

lui 0x0151

ori 0x0029

 


 

记得改sccomp_tb

 


 

跑完看result.txt

 

Verilog hdl 实现单周期cpu_第33张图片
 

大概是完成了排序。

转载于:https://www.cnblogs.com/lqerio/p/11117623.html

你可能感兴趣的:(Verilog hdl 实现单周期cpu)