CSR 位字段

RISC-V siselect CSR 寄存器详解

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

siselect(0x150)是 Sscsrind 的 Supervisor indirect register select CSR,用于选择 sireg* alias 访问的间接寄存器。

字段映射

按 bit 字段理解 siselect

1 个关键字段
XLEN-1:0

SELECT

读写

选择 sireg* 访问的 Supervisor 间接寄存器;至少支持 0..0xFFF,最高位为 1 的值保留给 custom use。

这个字段控制什么

  • - 选择 sireg* 访问的 Supervisor 间接寄存器;至少支持 0..0xFFF,最高位为 1 的值保留给 custom use。

常见取值

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

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

siselect 只负责选择;实际数据经 sireg* alias 访问。未实现选择值的访问不能从名字推导,官方规范将其留给对应扩展定义或标为 UNSPECIFIED。

官方 Sscsrind 表列出 siselect/sireg/sireg2/sireg3/sireg4/sireg5/sireg6 为 Supervisor-level CSRs。
siselect 至少支持 0..0xFFF;最高位为 1 的值用于 custom use。
mstateen0[60] 和 hstateen0[60] 可限制较低特权级/虚拟机对 siselect+sireg* 状态的访问。

读这个 CSR 时先看什么

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

写入前的风险检查

  • - 写 siselect 时只修改官方定义的目标字段,保留未修改位。
  • - 对 WARL/WLRL/WPRI 或保留字段按官方规范处理;不要把整个 CSR 当普通整数覆盖。

放回真实流程里理解

1

写入 siselect 选择要访问的 Supervisor 间接寄存器编号。

2

通过匹配的 sireg/sireg2/sireg3/sireg4/sireg5/sireg6 读写被选中的状态。

3

若选择值未实现,M/S 模式访问 sireg* 的行为为 UNSPECIFIED;实现通常建议触发非法指令异常便于模拟。

常见问题

siselect 自身保存被访问的数据吗?

不保存。它是 selector;数据通过 sireg* alias 窗口访问。

选择未实现编号后访问 sireg 会怎样?

M/S 模式下行为为 UNSPECIFIED,规范建议实现触发非法指令异常便于模拟。