计组实验测试指令

本文详细记录了RISC-V处理器中多种指令的实现和测试过程,包括bne、jr、JALR、NOR、sll/sra/srl、sllv/srlv等。通过添加和修改指令,观察波形和寄存器变化,逐步解决遇到的问题,最终成功实现了所有指令的正确执行。在测试过程中,还涉及到了多路选择器的选择和ALU的扩展。
摘要由CSDN通过智能技术生成

bne指令测试

添加BNE指令,


10651191-7d53150da757266a.png

这是最开始原始指令结果


10651191-b6e5be1d9546f710.png

然后添加测试文件


10651191-2509a5abd58c75a1.png

可以看到指令这次成功的实现了跳转!!

文件名。。。是.dat的后缀
然后


10651191-3f46c54c35c1ecbd.png

显然是没有成功的
为什么呢?

因为BNE需要一个比较的零信号, 然后我就忘记添加了

10651191-35a952c1bb06795c.png

看一下仿真的波形和寄存器的值吧

在这之前需要添加测试的文件


10651191-265f7b5b1912c758.png
通过Mars 去dump一个十六进制的指令文件

我不是特别清楚修改了源文件之后是不是需要重新编译, 不过最好还是退出仿真然后重新编译吧。

然后我们添加测试的信号
由于是跳转指令, 就看一下控制信号和PC NPC这几个信号吧


10651191-c899e950ed331090.png
修改成十六进制方便查看

然后我们看到在PC = 18的时候bne的控制信号为1
这时候发生跳转, NPC的值被置为44

10651191-3a5712187455de84.png

在transscript的输出窗口也可以看到PC的变化

10651191-56f825f9c289e6a5.png

jr指令实现

jr指令是R类型的指令, 实现读取寄存器的值然后进行跳转。

调用了一条jal指令, 返回地址被压入了 $ra寄存器中

10651191-f4f68ec57f827075.png

写到这里我终于知道自己出现什么问题了。
因为指令在译码的时候出错了。

10651191-bd1aa0bf398ae9e7.png

看到这里指令的信号来到了上升沿。
所以成功了。

10651191-4c40bc59ae4ab3cc.png

测试JALR指令

10651191-47ac5e8fca5b7ee6.png
指令译码
10651191-bcafbd00f19a9355.png
需要写寄存器
10651191-d13dfcc6cc9f2b9c.png
需要选择写哪些寄存器
10651191-d4bfe83e595168b1.png
需要选择写的数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值