CSR 位字段

RISC-V vsireg6 CSR 寄存器详解

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

vsireg6 是 VS 间接 CSR 的数据窗口,目标由 vsiselect 选择。

字段映射

按 bit 字段理解 vsireg6

1 个关键字段
XLEN-1:0

DATA

由选择值定义

被 vsiselect 选择的 VS 间接 CSR 别名窗口;在 CTR 选择值 0x200..0x2FF 下为只读 0。若同时实现 Sscsrind,AIA 选择值 0x30..0x3F 或 0x70..0xFF 下访问 vsireg2..6 会按 AIA 规则异常。

这个字段控制什么

  • - 被 vsiselect 选择的 VS 间接 CSR 别名窗口;在 CTR 选择值 0x200..0x2FF 下为只读 0。若同时实现 Sscsrind,AIA 选择值 0x30..0x3F 或 0x70..0xFF 下访问 vsireg2..6 会按 AIA 规则异常。

常见取值

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

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

vsireg6 是 H 扩展下的 VS 间接 CSR 别名窗口,宽度为当前 XLEN。它的含义完全由 vsiselect 当前值和对应扩展定义;在 CTR 0x200..0x2FF 范围内为只读 0。

vsireg6 的地址、访问类和宽度按官方 CSR 表核对:0x257,HRW(Hypervisor 读写),当前 XLEN(不是 VSXLEN)。
vsiselect 至少支持 0..0xFFF 的标准 selector 范围;custom selector 使用最高位为 1 的空间。
VS/VU 直接访问 vsiselect/vsireg* 会触发 virtual-instruction exception;guest 通过 siselect/sireg* alias 访问 VS 间接状态。
Smctr/Ssctr 规定 0x200..0x2FF 下只有 vsireg、vsireg2、vsireg3 分别访问 ctrsource、ctrtarget、ctrdata;vsireg6 为只读 0。
若同时实现 Sscsrind,AIA 规定 0x30..0x3F 或 0x70..0xFF 下访问 vsireg2..6 会触发 illegal-instruction 或 virtual-instruction exception,具体取决于访问模式。

读这个 CSR 时先看什么

  • - vsireg6 的独立 CSR 地址按官方表属于 HRW,宽度为当前 XLEN,不是 VSXLEN。
  • - VS/VU 不能直接访问独立 vsiselect/vsireg* 地址;VS-mode 通过 siselect/sireg* 别名访问 VS 间接状态。
  • - 当 vsiselect 在 CTR 范围 0x200..0x2FF 时,vsireg6 为只读 0;若同时实现 Sscsrind,AIA 使用 0x30..0x3F 或 0x70..0xFF 时,vsireg2..6 访问按 AIA 规则触发异常。

写入前的风险检查

  • - 写 vsireg6 前必须确认当前 vsiselect 值对应的扩展定义;CTR 0x200..0x2FF 下写入该别名窗口不会修改 CTR entry state。

放回真实流程里理解

1

先写入/确认 vsiselect selector。

2

通过对应 vsireg* 数据窗口访问被官方扩展定义的间接状态;未实现的 HS-level selector 行为为 UNSPECIFIED。

3

CTR 0x200..0x2FF 只把 vsireg/vsireg2/vsireg3 映射到 ctrsource/ctrtarget/ctrdata;vsireg6 为只读 0。

常见问题

vsiselect 的选择值范围是什么?

Smcsrind/Sscsrind 规则要求 vsiselect 至少支持 0..0xFFF;AIA 早期窗口只要求 0..0x1FF,但通用 Sscsrind 规则扩大了标准最小范围。

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

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