1

我正在使用RISCV 特权 1.7 指令集,第 8 页描述了 csrrw。

当处理器执行时:

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

或者

  1. 它是否应该引发异常而不更新 CSR“循环”寄存器?
4

2 回答 2

0

csrrw 的格式是:

csrrw    rd,csr,rs1

所以,你正在尝试做

R[rd]=CSR; CSR=R[rs1]
this means  
R[a0]=cycle; cycle=R[a0]

这有一个问题“循环”是只读的CSR。您可以改用 mcycle,mcycle 有一个随机值,但您可以覆盖它。

csrrw a0, mcycle, a0
于 2021-06-15T17:00:03.550 回答
0

RISC-V Privileged Architecture文档指定这cycle是一个只读 CSR,因此对它的任何写入都应产生非法指令异常。

尝试在没有适当特权级别的情况下访问 CSR 或写入只读寄存器也​​会引发非法指令异常。

(强调我的,第 2.1 节 CSR 地址映射约定,第 5 页,RISC-V 指令集手册。第二卷:特权架构。1.12 草案)

如果由于写入只读 CSR 而引发非法指令异常,规范未指定目标寄存器会发生什么。

这意味着无论实现是否写入目标寄存器,只要它引发非法指令异常,它就符合规范。

于 2020-02-16T18:28:17.840 回答