CSR 位字段

RISC-V vsireg CSR 寄存器详解

地址 0x251特权级 Hypervisor 直接访问 / VS 别名访问访问 HRW(Hypervisor 读写) / 当前 XLEN(不是 VSXLEN)Hypervisor 与虚拟化 CSR

vsireg 是 Sscsrind/H 扩展的 VS 间接 CSR 数据窗口,由 vsiselect 的选择值决定访问语义。

字段映射

按 bit 字段理解 vsireg

1 个关键字段
XLEN-1:0

DATA / ctrsource

按选择值定义;通常为 RW、RO0 或异常

当 vsiselect=0x200..0x2FF 时访问与 sireg 类似的 ctrsource(源 PC 和有效位 V);其他选择值按分配扩展定义。vsireg CSR 自身宽度始终是当前 XLEN;CTR entry register state 没有 V=1 的独立副本。

这个字段控制什么

  • - 当 vsiselect=0x200..0x2FF 时访问与 sireg 类似的 ctrsource(源 PC 和有效位 V);其他选择值按分配扩展定义。vsireg CSR 自身宽度始终是当前 XLEN;CTR entry register state 没有 V=1 的独立副本。

常见取值

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

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

vsireg 是由 vsiselect 选择的 VS 间接 CSR 数据窗口。它的独立地址供 M/HS 直接访问;V=1 guest 通常经 siselect/sireg* alias 访问 VS 状态。

vsireg 的地址、访问类和宽度:0x251,HRW,当前 XLEN(不是 VSXLEN)。
vsiselect 至少支持 0..0xFFF;最高位为 1 的选择值仅用于 custom use,最高位随 XLEN 移动。
直接 VS/VU 访问 vsiselect/vsireg* 触发 virtual-instruction exception;VS 通过 siselect/sireg* alias 访问时使用本节规则。
CTR 范围 0x200..0x2FF 选择逻辑 entry 0..255;vsireg 访问 ctrsource,包含源 PC 和 V 位。

读这个 CSR 时先看什么

  • - vsireg 的独立 CSR 地址按官方表属于 HRW;H 扩展实现时该 VS CSR 必须存在。
  • - VS/VU 直接访问 vsiselect 或 vsireg* 会触发 virtual-instruction exception;guest 通常通过 siselect/sireg* alias 访问同一 VS 状态。
  • - 若 vsiselect 选择未在 HS 层实现的值,M/HS 访问 vsireg* 或 VS 通过 sireg* alias 访问的行为为 UNSPECIFIED。
  • - mstateen0.CSRIND/hstateen0.CSRIND 可先限制间接 CSR 访问;当选择 0x200..0x2FF 的 CTR 状态时,mstateen0.CTR/hstateen0.CTR 也可限制访问。

写入前的风险检查

  • - 不要把 vsireg* 当成内存窗口;每个选择值和每个 alias CSR 的读写、RO0 或异常行为都由分配该范围的扩展定义。
  • - CTR entry 状态没有 V=1 的独立副本;vsiselect=0x200..0x2FF 时访问与对应 sireg* 相同的 CTR entry register state。

放回真实流程里理解

1

确认 H 与 Sscsrind 已实现,并检查 CSRIND state-enable 门控。

2

写入或确认 vsiselect;标准选择空间至少支持 0..0xFFF,最高位为 1 的值仅用于 custom use。

3

通过 vsireg 访问被选择扩展定义的状态;CTR entry 使用 0x200..0x2FF 选择逻辑 entry 0..255。

常见问题

vsiselect 的选择值范围是什么?

vsiselect 至少支持 0..0xFFF;最高位为 1 的选择值仅用于 custom use,最高位清零的值属于标准空间并保留到标准扩展分配。

vsireg 能由 VS-mode 直接访问吗?

不能。VS/VU 直接访问 vsiselect 或 vsireg* 会触发 virtual-instruction exception;guest 应经 siselect/sireg* alias。