我正在使用RISCV Privileged 1.7 Instruction set,第8页描述了csrrw。
处理器执行时:
csrrw a0,cycle,a0
或
答案 0 :(得分:0)
RISC-V Privileged Architecture文档指定cycle
是只读CSR,因此对其进行任何写操作都会产生非法的指令异常。
尝试在没有适当特权级别的情况下访问CSR或编写只读寄存器也会引发非法指令异常。
(着重于《第2.1节CSR地址映射约定》,第5页,The RISC-V Instruction Set Manual. Volume II: Privileged Architecture。1.12版)
如果由于写入只读CSR而引发非法指令异常,则规范未指定目标寄存器会发生什么。
这意味着只要引发非法指令异常,实现就是否写入目标寄存器都符合规范。
答案 1 :(得分:0)
csrrw 的格式为:
csrrw rd,csr,rs1
所以,你正在尝试做
R[rd]=CSR; CSR=R[rs1]
this means
R[a0]=cycle; cycle=R[a0]
这有一个问题,“循环”是只读的 CSR。您可以改用 mcycle,mcycle 有一个 ramdom 值,但您可以覆盖它。
csrrw a0, mcycle, a0