CSR 位字段

RISC-V sctrstatus CSR 寄存器详解

地址 0x14F特权级 Supervisor 模式访问 读写 / 32Supervisor AIA、定时器与间接中断 CSR

sctrstatus(0x14F)是 32 位 Supervisor CTR status CSR,保存 CTR 写指针和冻结等状态,并在 CTR active 时由硬件更新。

位作用速览
bit 3 = 只有第 3 位;bits 12..11 = 第 12 到第 11 位
高位 MSB低位 LSB
字段映射

按 bit 字段理解 sctrstatus

1 个关键字段
31:0

CTR_STATUS

读写/硬件更新

包含 WRPTR 和 FROZEN 等 CTR status 字段;未定义位为 WPRI。具体字段位置按 Smctr 图表解释。

这个字段控制什么

  • - 包含 WRPTR 和 FROZEN 等 CTR status 字段;未定义位为 WPRI。具体字段位置按 Smctr 图表解释。

常见取值

这个字段更适合结合上下文字段解释,不用按固定枚举背诵。

打开官方手册
官方依据与检索要点

sctrstatus 是 CTR buffer 的运行状态入口。它会被硬件更新,因此写入时比普通配置 CSR 更容易破坏正在记录的状态。

WRPTR 指示下一次写入的物理 CTR buffer entry,并随记录更新。
FROZEN 抑制 transfer recording。
逻辑 entry 0 对应 WRPTR 前一个物理 entry;逻辑/物理映射取决于 sctrdepth。

读这个 CSR 时先看什么

  • - 先确认当前 hart 实现 sctrstatus 所属扩展;未实现或权限不足的 CSR 访问会触发非法指令异常。
  • - 结合地址 0x14F、最低访问特权级和官方访问类判断软件是否可以直接访问。
  • - 读取保留、WPRI、WARL 或 WLRL 字段时不要假设固定值,应按官方规范和实现返回值解释。

写入前的风险检查

  • - CTR active 时硬件会更新 sctrstatus;多指令 read-modify-write 可能丢失硬件更新。
  • - 修改 sctrstatus 前通常应确保 CTR inactive,例如 FROZEN=1 或当前特权模式未启用记录。
  • - 恢复 CTR 状态时应先写 sctrstatus,再恢复 CTR entry state。

放回真实流程里理解

1

在读取 CTR entries 前读取 sctrstatus,确定 WRPTR/FROZEN 等 buffer 状态。

2

修改 sctrstatus 前先让 CTR inactive,避免覆盖硬件正在更新的状态。

3

保存恢复 CTR 时先恢复 sctrstatus,再恢复具体 CTR entry state。

常见问题

为什么写 sctrstatus 要先停 CTR?

因为 CTR active 时硬件可能同时更新 WRPTR/FROZEN 等状态,多指令 RMW 可能覆盖硬件更新。