CSR 位字段

RISC-V vsstatus CSR 寄存器详解

地址 0x200特权级 Hypervisor 直接访问 / VS 别名访问访问 HRW(Hypervisor 读写) / VSXLENHypervisor 与虚拟化 CSR

vsstatus 是 H 扩展中的 VSXLEN 位虚拟 supervisor 状态 CSR;V=1 时替代 sstatus,V=0 时通常不直接影响机器行为。

字段映射

按 bit 字段理解 vsstatus

21 个关键字段
63

SD

只读

VS-mode 可见的 FS、VS 或 XS Dirty 摘要;HS 级 sstatus.FS 不影响该位。

这个字段控制什么

  • - VS-mode 可见的 FS、VS 或 XS Dirty 摘要;HS 级 sstatus.FS 不影响该位。

常见取值

00

VS 可见的 FS、VS、XS 均非 Dirty。

11

VS 可见的 FS、VS 或 XS 至少一个为 Dirty。

打开官方手册
62:34

WPRI

WPRI

保留字段;软件写入时保留原值,读取值应忽略。

这个字段控制什么

  • - 保留字段;软件写入时保留原值,读取值应忽略。

常见取值

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

打开官方手册
33:32

UXL

WARL

控制 VU-mode 的有效 XLEN;可实现为 hstatus.VSXL 的只读副本。

这个字段控制什么

  • - 控制 VU-mode 的有效 XLEN;可实现为 hstatus.VSXL 的只读副本。

常见取值

132 位

VU-mode XLEN 为 32。

264 位

VU-mode XLEN 为 64。

3保留

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

打开官方手册
31:25

WPRI

WPRI

保留字段;软件写入时保留原值,读取值应忽略。

这个字段控制什么

  • - 保留字段;软件写入时保留原值,读取值应忽略。

常见取值

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

打开官方手册
24

SDT

WARL/RO0

Ssdbltrp 为 VS-mode 增加的 S-mode-disable-trap 字段;未实现相关扩展时为只读零。

这个字段控制什么

  • - Ssdbltrp 为 VS-mode 增加的 S-mode-disable-trap 字段;未实现相关扩展时为只读零。

常见取值

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

打开官方手册
23

SPELP

读写(Zicfilp)

Zicfilp 的 previous ELP 状态;0 表示无 landing pad 预期,1 表示预期 landing pad。

这个字段控制什么

  • - Zicfilp 的 previous ELP 状态;0 表示无 landing pad 预期,1 表示预期 landing pad。

常见取值

0NO_LP_EXPECTED

不预期 landing pad 指令。

1LP_EXPECTED

预期 landing pad 指令。

打开官方手册
22:20

WPRI

WPRI

保留字段;软件写入时保留原值,读取值应忽略。

这个字段控制什么

  • - 保留字段;软件写入时保留原值,读取值应忽略。

常见取值

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

打开官方手册
19

MXR

读写

使可执行页也可由显式 load 读取;vsstatus.MXR 只影响第一阶段(VS-stage)转换。

这个字段控制什么

  • - 使可执行页也可由显式 load 读取;vsstatus.MXR 只影响第一阶段(VS-stage)转换。

常见取值

0关闭

Load 只能从可读页读取;未启用分页虚拟内存时无影响。

1开启

Load 可从可读页或可执行页读取。

打开官方手册
18

SUM

读写/RO0

控制 VS-mode 是否可通过 load/store 访问 U=1 的 VU 页;不允许 VS-mode 从用户页取指。

这个字段控制什么

  • - 控制 VS-mode 是否可通过 load/store 访问 U=1 的 VU 页;不允许 VS-mode 从用户页取指。

常见取值

0关闭

VS-mode 访问 U=1 页会 fault;未启用分页虚拟内存时无影响。

1开启

VS-mode load/store 可访问 U=1 页,但仍不能从用户页取指。

打开官方手册
17

WPRI

WPRI

保留字段;软件写入时保留原值,读取值应忽略。

这个字段控制什么

  • - 保留字段;软件写入时保留原值,读取值应忽略。

常见取值

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

打开官方手册
16:15

XS

只读/派生

VS-mode 可见的额外用户扩展状态摘要;只读字段。

这个字段控制什么

  • - VS-mode 可见的额外用户扩展状态摘要;只读字段。

常见取值

0Off

相关扩展状态关闭或不存在。

1Initial

扩展状态处于初始值。

2Clean

扩展状态与已保存上下文一致。

3Dirty

扩展状态可能已被修改。

打开官方手册
14:13

FS

WARL/可选RO0

VS-mode 浮点上下文状态;V=1 时 vsstatus.FS 和 HS 级 sstatus.FS 同时生效。

这个字段控制什么

  • - VS-mode 浮点上下文状态;V=1 时 vsstatus.FS 和 HS 级 sstatus.FS 同时生效。

常见取值

0Off

任一生效 FS 为 Off 时执行浮点指令会触发 illegal-instruction exception。

1Initial

浮点状态处于初始值。

2Clean

浮点状态与已保存上下文一致。

3Dirty

V=1 时修改浮点状态会把 vsstatus.FS 和 HS 级 sstatus.FS 都置为 Dirty。

打开官方手册
12:11

WPRI

WPRI

保留字段;软件写入时保留原值,读取值应忽略。

这个字段控制什么

  • - 保留字段;软件写入时保留原值,读取值应忽略。

常见取值

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

打开官方手册
10:9

VS

WARL/可选RO0

VS-mode 向量上下文状态;V=1 时 vsstatus.VS 和 mstatus/sstatus 的 VS 状态同时生效。

这个字段控制什么

  • - VS-mode 向量上下文状态;V=1 时 vsstatus.VS 和 mstatus/sstatus 的 VS 状态同时生效。

常见取值

0Off

任一生效 VS 为 Off 时执行向量指令或访问向量 CSR 会触发 illegal-instruction exception。

1Initial

向量状态处于初始值。

2Clean

向量状态与已保存上下文一致。

3Dirty

V=1 时修改向量状态会把相关 VS 字段置为 Dirty;实现也可自发从 Initial/Clean 置为 Dirty。

打开官方手册
8

SPP

WARL

进入 VS-mode trap 前的名义特权级;trap 进入 VS-mode 时按规范写入。

这个字段控制什么

  • - 进入 VS-mode trap 前的名义特权级;trap 进入 VS-mode 时按规范写入。

常见取值

0U

trap 前名义特权级为 U/VU;SRET 返回到 VU。

1S

trap 前名义特权级为 S/VS;SRET 返回到 VS。

打开官方手册
7

WPRI

WPRI

保留字段;软件写入时保留原值,读取值应忽略。

这个字段控制什么

  • - 保留字段;软件写入时保留原值,读取值应忽略。

常见取值

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

打开官方手册
6

UBE

WARL/只读副本

控制 VU-mode 显式访存端序;实现可使其成为 hstatus.VSBE 的只读副本。

这个字段控制什么

  • - 控制 VU-mode 显式访存端序;实现可使其成为 hstatus.VSBE 的只读副本。

常见取值

0小端

VU-mode 显式 load/store 为小端。

1大端

VU-mode 显式 load/store 为大端。

打开官方手册
5

SPIE

读写

进入 VS-mode trap 前保存的 SIE 值。

这个字段控制什么

  • - 进入 VS-mode trap 前保存的 SIE 值。

常见取值

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

打开官方手册
4:2

WPRI

WPRI

保留字段;软件写入时保留原值,读取值应忽略。

这个字段控制什么

  • - 保留字段;软件写入时保留原值,读取值应忽略。

常见取值

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

打开官方手册
1

SIE

读写

VS-mode supervisor 级全局中断使能;中断递送还取决于 vsie/vsip 和委托状态。

这个字段控制什么

  • - VS-mode supervisor 级全局中断使能;中断递送还取决于 vsie/vsip 和委托状态。

常见取值

0关闭

当前在 VS-mode 执行时,supervisor 级中断全局关闭。

1开启

当前在 VS-mode 执行时,supervisor 级中断全局开启。

打开官方手册
0

WPRI

WPRI

保留字段;软件写入时保留原值,读取值应忽略。

这个字段控制什么

  • - 保留字段;软件写入时保留原值,读取值应忽略。

常见取值

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

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

vsstatus 是 H 扩展的 VSXLEN 位 sstatus 副本。V=1 时 guest 对 sstatus 的访问替代到 vsstatus;V=0 时除特定虚拟机访存路径外通常不直接影响机器行为。

vsstatus 的地址、访问类和宽度按本地特权手册核对:0x200,HRW,VSXLEN。
UXL 只存在于 VSXLEN=64;FS/VS 与 HS 级状态同时生效;SD 和 XS 只汇总 VS-mode 可见状态。
SDT、SPELP 只在相应扩展存在时有定义;WPRI 位写入时必须保留。

读这个 CSR 时先看什么

  • - vsstatus 是 H 扩展定义的 VSXLEN 位 HRW CSR,独立 CSR 地址只能由 M-mode 或 HS-mode 直接访问。
  • - V=1 时,guest 对 sstatus 的访问替代到 vsstatus;V=0 时,除 HLV/HLVX/HSV 或 mstatus.MPRV 以 V=1 语义执行访存外,vsstatus 通常不直接影响机器行为。

写入前的风险检查

  • - UXL 是 WARL;当 VSXLEN=32 时 UXL 不存在,VU-mode XLEN 为 32。
  • - UBE 可以是 hstatus.VSBE 的只读副本;SD 和 XS 为只读摘要位,WPRI 位必须按规范保留。

放回真实流程里理解

1

HS/M 软件配置 guest 时可直接读写 vsstatus。

2

guest 在 V=1 下访问 sstatus 时硬件使用 vsstatus 副本。

3

trap 进入 VS-mode 时,硬件更新 vsstatus.SPP、SPIE、SIE 以及相关 VS trap CSR;SRET 按 vsstatus 状态返回。

常见问题

vsstatus 的独立地址能由 VS-mode 直接访问吗?

不能。H 扩展规定 V=1 时 guest 通过对应 supervisor CSR 别名访问 VS 状态;直接读写独立 VS CSR 地址会触发 virtual-instruction exception。

vsstatus 主要保存什么?

vsstatus 保存 guest supervisor 状态位,供 hypervisor 管理 guest supervisor 的 trap、状态或执行上下文。