2025-10-19

nemu的srai似乎有问题,平台选择riscv-nemu时,程序执行到下面代码处

0x80000094: slli a0,a0,0x18
0x80000098: srai a0,a0,0x18

执行前$a0的值为0x61,按理说执行完毕后$a0的值应该是0x00000061,但是通过调试器发现执行结束后$a0的值为0。

发现问题了,是提取立即数的时候出了问题。对于立即数型移位指令,指令中的[31:25]位不参与运算,slli指令的[31:25]为全0,srli指令的[31:25]为全0,srai指令的[31:25]为0100000

这句话说得太有道理了,真的是浪费生命
image

所以还是需要把nemu中那些debug工具在npc里再实现一遍,当然有些代码是可以复用的。
今天最少要实现NPC的单步执行,打印寄存器,扫描内存

verilator想在cpp中调用verilog的函数并且函数涉及到verilog中的信号时需要做额外的设置,

const svScope scope = svGetScopeFromName("TOP.dut");
assert(scope);
svSetScope(scope);

这一点在Verilator的文档中有提到。

posted on 2025-10-19 11:40  veosat  阅读(1)  评论(0)    收藏  举报