新增自定义 CSR
- 根据 RISC-V 特权手册中预留的 Custom CSR Address 确定要新增的 CSR Address
- 以非特权级为例,
0x800-0x8ff可用于可读可写的自定义 CSR , 这里选择0x800为例
- 以非特权级为例,
- 在 gem5 中添加自定义 CSR 定义:
src/arch/riscv/regs/misc.hh中MiscRegIndex中定义 CSR 的 MiscReg 索引:MISCREG_CUSTOM,CSRIndex中定义 CSR :CSR_CUSTOM = 0x800CSRData中声明相应的 CSRMetadata:1
2{CSR_CUSTOM,
{"CUSTOM", MISCREG_CUSTOM, rvTypeFlags(RV64, RV32), isaExtsFlags()}}
src/arch/riscv/isa.ccMiscRegNames中定义相应的 MiscReg 的名称映射:[MISCREG_CUSTOM] = "CUSTOM",
至此,已经可以通过 csr 读写指令访问自定义的 CSR 寄存器
注意
MISCREG_CUSTOM应当定义到NUM_PHYS_MISCREGS前
如果希望在访问 CSR 寄存器时进行额外的操作,比如自定义的检查,则需修改 src/arch/riscv/isa.c 中的 readMiscReg 和 setMiscReg 函数添加相应的 case