Loading

tinyriscv——gp寄存器/riscv-tests的变化

在 RISC-V 中,gp 寄存器是全局指针(Global Pointer)寄存器,用于存储全局数据区(.data 和 .sdata 段)的地址。在程序启动时,该寄存器会被设置为一个固定的值,通常为 __global_pointer$的地址,表示全局指针的起始地址。在一些情况下,可以通过修改该寄存器的值来实现一些特定的功能。

在常见的用法下,其可以替换掉luipuipc指令的 absolute/pc-relative寻址,变为gp-relative寻址,使得代码效率更高。

在最新的riscv-tests中,如果程序测试成功,会执行RVTEST_PASS,其会使TESTNUM,TESTNUM被设置为gp

 目前尚不清楚为何这么做。

在tinyriscv中找到了riscv-tests的改版,可以注意到RVTEST_PASS和FAIL的定义并非现在这样tinyriscv/riscv_test.h at master · liangkangnan/tinyriscv · GitHub

将成功与失败的条件改为x26和x27的值,并在testbench中判断,在rocket设计中我们也可以沿用这一点,从而大大简化仿真架构。

posted @ 2023-05-10 15:46  Haowen_Zhao  阅读(403)  评论(0编辑  收藏  举报