CSR 位字段

RISC-V hstatus CSR 寄存器详解

地址 0x600特权级 Hypervisor访问 HRW(Hypervisor 读写) / HSXLENHypervisor 与虚拟化 CSR

hstatus 是 HSXLEN Hypervisor 状态 CSR,控制 VS-mode 客户机的异常、虚拟化、端序、guest external interrupt 选择和可选指针掩码状态。

字段映射

按 bit 字段理解 hstatus

17 个关键字段
63:50

WPRI

WPRI

保留给未来标准使用;软件应保持写入值并忽略读取值。

这个字段控制什么

  • - 保留给未来标准使用;软件应保持写入值并忽略读取值。

常见取值

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

打开官方手册
49:48

HUPMM

WARL

Ssnpm 实现时,为 U-mode 中按 VU-mode 执行的 HLV.*、HLVX.* 或 HSV.* 显式访问启用或禁用 pointer masking;未实现 Ssnpm 或 RV32 时为只读零。

这个字段控制什么

  • - Ssnpm 实现时,为 U-mode 中按 VU-mode 执行的 HLV.*、HLVX.* 或 HSV.* 显式访问启用或禁用 pointer masking;未实现 Ssnpm 或 RV32 时为只读零。

常见取值

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

打开官方手册
47:34

WPRI

WPRI

保留给未来标准使用。

这个字段控制什么

  • - 保留给未来标准使用。

常见取值

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

打开官方手册
33:32

VSXL

WARL

RV64 上控制 VS-mode 的有效 XLEN。

这个字段控制什么

  • - RV64 上控制 VS-mode 的有效 XLEN。

常见取值

132 位

对应有效 XLEN=32。

264 位

对应有效 XLEN=64。

3保留

保留编码;可移植软件不应写入或依赖。

打开官方手册
31:23

WPRI

WPRI

保留给未来标准使用。

这个字段控制什么

  • - 保留给未来标准使用。

常见取值

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

打开官方手册
22

VTSR

读写

控制 VS-mode 执行 SRET 是否触发 virtual-instruction exception。

这个字段控制什么

  • - 控制 VS-mode 执行 SRET 是否触发 virtual-instruction exception。

常见取值

0关闭

VS-mode SRET 不因 VTSR 被拦截。

1开启

VS-mode 执行 SRET 会触发 virtual-instruction exception。

打开官方手册
21

VTW

读写

控制 VS-mode WFI 的 virtual-instruction exception 行为。

这个字段控制什么

  • - 控制 VS-mode WFI 的 virtual-instruction exception 行为。

常见取值

0关闭

VS-mode WFI 不因 VTW 被拦截。

1开启

VS-mode WFI 可按规范在限定时间未完成时触发 virtual-instruction exception。

打开官方手册
20

VTVM

读写

控制 VS-mode 访问 satp 或执行地址转换 fence 指令。

这个字段控制什么

  • - 控制 VS-mode 访问 satp 或执行地址转换 fence 指令。

常见取值

0关闭

VS-mode 可按其他规则访问 satp 并执行相关地址转换 fence。

1开启

VS-mode 访问 satp 或执行 SFENCE.VMA/SINVAL.VMA 会触发 virtual-instruction exception。

打开官方手册
19:18

WPRI

WPRI

保留给未来标准使用。

这个字段控制什么

  • - 保留给未来标准使用。

常见取值

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

打开官方手册
17:12

VGEIN

WLRL

选择 VS-level external interrupt 的 guest external interrupt source;GEILEN=0 或值大于 GEILEN 时不代表有效 guest source。

这个字段控制什么

  • - 选择 VS-level external interrupt 的 guest external interrupt source;GEILEN=0 或值大于 GEILEN 时不代表有效 guest source。

常见取值

0未选择

没有为 VS-level external interrupt 选择 guest external interrupt source;若 GEILEN=0,也没有可选择的有效 guest source。

1..GEILENguest source

选择对应编号的 guest external interrupt source;只有 1..GEILEN 表示有效实现 source,值大于 GEILEN 不代表有效 guest source。

打开官方手册
11:10

WPRI

WPRI

保留给未来标准使用。

这个字段控制什么

  • - 保留给未来标准使用。

常见取值

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

打开官方手册
9

HU

读写

控制 hypervisor load/store 指令是否可在 U-mode 使用。

这个字段控制什么

  • - 控制 hypervisor load/store 指令是否可在 U-mode 使用。

常见取值

0关闭

U-mode 执行 hypervisor load/store 指令会触发 illegal-instruction exception。

1开启

U-mode 可像 HS-mode 一样执行 hypervisor load/store 指令。

打开官方手册
8

SPVP

读写

记录/控制虚拟机 load/store 的有效特权。

这个字段控制什么

  • - 记录/控制虚拟机 load/store 的有效特权。

常见取值

0VU

虚拟机 load/store 使用 VU 级有效特权。

1VS

虚拟机 load/store 使用 VS 级有效特权。

打开官方手册
7

SPV

读写

记录 trap 进入 HS 时的 virtualization mode。

这个字段控制什么

  • - 记录 trap 进入 HS 时的 virtualization mode。

常见取值

00

trap 进入 HS 前 V=0。

11

trap 进入 HS 前 V=1;SRET 可按规则恢复虚拟化模式。

打开官方手册
6

GVA

读写

指示 stval 是否保存 guest virtual address。

这个字段控制什么

  • - 指示 stval 是否保存 guest virtual address。

常见取值

00

stval 中的地址不是 guest virtual address。

11

stval 中的地址是 guest virtual address。

打开官方手册
5

VSBE

WARL

控制 VS-mode 显式访问和 VS-stage 页表等隐式访问的 endian。

这个字段控制什么

  • - 控制 VS-mode 显式访问和 VS-stage 页表等隐式访问的 endian。

常见取值

0小端

VS-mode 显式内存访问和 VS-stage 内存管理隐式访问按小端解释。

1大端

VS-mode 显式内存访问和 VS-stage 内存管理隐式访问按大端解释。

打开官方手册
4:0

WPRI

WPRI

保留给未来标准使用。

这个字段控制什么

  • - 保留给未来标准使用。

常见取值

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

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

hstatus 是 HS/M 侧的 Hypervisor 状态 CSR,用于跟踪和控制 VS-mode guest 的异常行为。它不是 VS supervisor CSR 副本;VS CSR 替代、trap 入口/返回和 hypervisor load/store 规则共同决定其效果。

hstatus 地址 0x600、HRW 访问类、HSXLEN 宽度来自官方 Hypervisor CSR 表;Figure 47/48 给出 RV32/RV64 布局。
VSXL 只在 HSXLEN=64 存在并控制 VSXLEN;HSXLEN=32 时 VSXL 不存在且 VSXLEN=32。
VTSR、VTW、VTVM 只影响 VS-mode,并产生 virtual-instruction exception;VTW 还受 mstatus.TW=0 与 bounded-time WFI 规则限制。
VGEIN 是 WLRL 字段,选择 0..GEILEN 的 guest external interrupt source;GEILEN=0 时可为只读零。
HUPMM 只在 RV64 且实现 Ssnpm 时有意义;未实现 Ssnpm 或 RV32 时为只读零。

读这个 CSR 时先看什么

  • - hstatus 是 Hypervisor 级 CSR;独立地址按官方表属于 HRW(Hypervisor 读写) 访问类。
  • - guest/VS 软件不能通过 supervisor CSR alias 访问该 H-level CSR;相关访问由 H 扩展和可选扩展规则控制。

写入前的风险检查

  • - 写 hstatus 时只修改官方定义的目标字段,并保留 WPRI、保留位和未修改字段。

放回真实流程里理解

1

确认当前软件运行在可访问 Hypervisor CSR 的 M/HS 上下文。

2

确认 H 扩展已实现;HUPMM 仅在 RV64 且实现 Ssnpm 时有意义。

3

按官方字段读写;guest 相关访问是否通过或 trap 由对应扩展规则和 state-enable 控制。

常见问题

hstatus 能通过 supervisor CSR alias 访问吗?

不能把 hstatus 当作 VS CSR 副本。它是 H-level CSR;guest/VS 访问相关功能时是否 trap 由 H 扩展和对应可选扩展规则决定。

hstatus.VTVM 控制什么?

VTVM=1 时,VS-mode 执行 SFENCE.VMA/SINVAL.VMA 或访问 satp 会触发 virtual-instruction exception;它不使 HFENCE.VVMA/HINVAL.VVMA 或直接 vsatp 访问 trap。