RiscV ISS实施中的错误

时间:2017-06-21 21:10:17

标签: riscv

我正在开发一个RiscV ISS,当我运行验证套件时,我收到添加指令的错误。我把问题钉在了这部分代码上(在执行期间注册状态作为注释):

lui   ra,0x80000   ;; ra = 0x80000000 
lui   sp,0xffff8   ;; sp = 0xffff8000
add   t5,ra,sp     ;; t5 = 0x17fff8000
lui   t4,0xffff0   ;; t4 = 0xffff0000
addiw t4,t4,-1     ;; t4 = 0xfffeffff
slli  t4,t4,0xf    ;; t4 = 0x7fff7fff8000
li    gp,7         ;; gp = 7
bne   t5,t4,800005f0 <fail> ;; The program branches to fail :(

显然,寄存器t5和t4在执行期间不呈现相同的值,因此程序分支到失败例程。

任何人都可以指出哪些指令在我的代码中产生了错误的结果?

干杯

2 个答案:

答案 0 :(得分:3)

我在spike中运行相同的程序来比较结果并找到了bug。 LUI和ADDIW指令都缺少32位符号扩展。感谢阅读帖子并提出一些想法的人。

答案 1 :(得分:0)

我认为此代码用于RV64I实现(64位)。

LUI指令符号扩展了RV64I实现,而前两行没有这样做。