CSR 位字段

RISC-V sireg6 CSR 寄存器详解

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

sireg6(0x157)是 Sscsrind Supervisor indirect register alias 6,通过 siselect 当前值访问扩展状态。

字段映射

按 bit 字段理解 sireg6

1 个关键字段
XLEN-1:0

ALIAS_DATA

依选择值而定

alias 数据窗口;具体语义由 siselect 当前值对应扩展定义。delegated-counter 0x40..0x5F 范围访问 sireg6 会触发非法指令异常;CTR 0x200..0x2FF 范围中 sireg6 为只读 0;AIA 0x30..0x3F 和 0x70..0xFF 范围访问 sireg2..sireg6 会触发非法指令异常。

这个字段控制什么

  • - alias 数据窗口;具体语义由 siselect 当前值对应扩展定义。delegated-counter 0x40..0x5F 范围访问 sireg6 会触发非法指令异常;CTR 0x200..0x2FF 范围中 sireg6 为只读 0;AIA 0x30..0x3F 和 0x70..0xFF 范围访问 sireg2..sireg6 会触发非法指令异常。

常见取值

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

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

sireg6 不是独立固定含义寄存器;它是由 siselect 选择的 alias 窗口。

官方 Sscsrind 规定 sireg* 的行为由 siselect/sireg* 组合和对应扩展定义。
CTR 使用 siselect 0x200..0x2FF 访问 CTR entry,其中 sireg6 为只读 0;delegated-counter 0x40..0x5F 范围中 sireg6 会触发非法指令异常。
AIA 0x30..0x3F 和 0x70..0xFF 范围只通过 sireg 访问,访问 sireg2..sireg6 会触发非法指令异常。
未实现选择值下不要假设全 0、可写或固定副作用。

读这个 CSR 时先看什么

  • - 先确认当前 hart 实现 Sscsrind,且 Smstateen 未通过 mstateen0.CSRIND 或 hstateen0.CSRIND 阻止当前访问。
  • - 结合地址 0x157、最低访问特权级和官方访问类判断软件是否可以直接访问。
  • - 读取保留、WPRI、WARL 或 WLRL 字段时不要假设固定值,应按官方规范和实现返回值解释。

写入前的风险检查

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

放回真实流程里理解

1

先写 siselect 选择间接寄存器编号。

2

再按所选扩展定义判断 sireg6 是可访问状态、只读 0,还是非法指令异常。

3

不要用 sireg6 访问 AIA iprio 或 IMSIC interrupt-file 范围;这些 AIA 范围只使用 sireg,访问 sireg2..sireg6 会触发非法指令异常。

常见问题

sireg6 的位字段为什么不像普通 CSR?

因为它是 alias 窗口;位字段取决于 siselect 当前值和对应扩展。