这个csrrw的正确行为是什么

时间:2015-12-17 10:49:59

标签: simulation riscv

我正在使用RISCV Privileged 1.7 Instruction set,第8页描述了csrrw。

处理器执行时:

csrrw   a0,cycle,a0
  1. 是否应该使用CSR“循环”值更新“a0”寄存器,并在用户模式下写入时引发异常?
    1. 是否应该引发异常并且不更新CSR“循环”寄存器?

2 个答案:

答案 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