CSR 位字段

RISC-V vsstatus CSR 寄存器详解

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

vsstatus 保存guest supervisor 状态位,是对应 supervisor CSR 的 VS 副本。

位作用速览
bit 3 = 只有第 3 位;bits 12..11 = 第 12 到第 11 位
高位 MSB低位 LSB
SD63只读保留0
字段映射

按 bit 字段理解 vsstatus

12 个关键字段
63

SD

只读

VS 可见的 FS、VS、XS 脏状态摘要。

这个字段控制什么

  • - VS 可见的 FS、VS、XS 脏状态摘要。

常见取值

00

FS、VS、XS 中没有字段处于 Dirty 状态。

11

FS、VS 或 XS 至少有一个字段处于 Dirty 状态。

打开官方手册
33:32

UXL

读写

RV64 上控制 VU-mode 的有效 XLEN;VSXLEN=32 时不存在。

这个字段控制什么

  • - RV64 上控制 VU-mode 的有效 XLEN;VSXLEN=32 时不存在。

常见取值

132 位

对应有效 XLEN=32。

264 位

对应有效 XLEN=64。

3保留

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

打开官方手册
31

SD

只读

RV32/低半中的 VS 可见 FS、VS、XS 脏状态摘要。

这个字段控制什么

  • - RV32/低半中的 VS 可见 FS、VS、XS 脏状态摘要。

常见取值

00

FS、VS、XS 中没有字段处于 Dirty 状态。

11

FS、VS 或 XS 至少有一个字段处于 Dirty 状态。

打开官方手册
19

MXR

读写

控制 VS-stage 分页下可执行页是否也可被 load 读取。

这个字段控制什么

  • - 控制 VS-stage 分页下可执行页是否也可被 load 读取。

常见取值

0关闭

Load 只能从可读页读取;MXR 对未启用分页地址转换时无影响。

1开启

Load 可从可读页或可执行页读取;MXR 对未启用分页地址转换时无影响。

打开官方手册
18

SUM

读写

控制 VS-mode 是否可访问 VU 页。

这个字段控制什么

  • - 控制 VS-mode 是否可访问 VU 页。

常见取值

0关闭

VS 模式访问 U=1 的页会 fault;SUM 对未启用分页地址转换时无影响。

1开启

VS 模式 load/store 可访问 U=1 的页;VS 模式仍不能从用户页取指。

打开官方手册
16:15

XS

读写

VS 可见的用户扩展状态摘要。

这个字段控制什么

  • - VS 可见的用户扩展状态摘要。

常见取值

0Off

扩展状态关闭;使用相关扩展状态会触发异常或不可用。

1Initial

扩展状态处于初始值。

2Clean

扩展状态与内存中保存的上下文一致。

3Dirty

扩展状态可能已被修改,通常需要在上下文切换时保存。

打开官方手册
14:13

FS

读写

VS 浮点状态。

这个字段控制什么

  • - VS 浮点状态。

常见取值

0Off

扩展状态关闭;使用相关扩展状态会触发异常或不可用。

1Initial

扩展状态处于初始值。

2Clean

扩展状态与内存中保存的上下文一致。

3Dirty

扩展状态可能已被修改,通常需要在上下文切换时保存。

打开官方手册
10:9

VS

读写

VS 向量状态。

这个字段控制什么

  • - VS 向量状态。

常见取值

0Off

扩展状态关闭;使用相关扩展状态会触发异常或不可用。

1Initial

扩展状态处于初始值。

2Clean

扩展状态与内存中保存的上下文一致。

3Dirty

扩展状态可能已被修改,通常需要在上下文切换时保存。

打开官方手册
8

SPP

读写

VS trap 前的名义特权级。

这个字段控制什么

  • - VS trap 前的名义特权级。

常见取值

0U

陷入 VS 模式前的特权级为 User;SRET 返回到 VU 模式。

1S

陷入 VS 模式前的特权级为 Supervisor;SRET 返回到 VS 模式。

打开官方手册
6

UBE

读写

控制 VU-mode 显式内存访问的 endian;可实现为 hstatus.VSBE 的只读副本。

这个字段控制什么

  • - 控制 VU-mode 显式内存访问的 endian;可实现为 hstatus.VSBE 的只读副本。

常见取值

0小端

VU 模式显式内存访问按小端解释;指令取指不受该位影响。

1大端

VU 模式显式内存访问按大端解释;指令取指不受该位影响。

打开官方手册
5

SPIE

读写

VS trap 前保存的 vsstatus.SIE。

这个字段控制什么

  • - VS trap 前保存的 vsstatus.SIE。

常见取值

00

进入 VS 模式陷阱前 SIE 为 0,或保存的返回后中断状态为关闭。

11

进入 VS 模式陷阱前 SIE 为 1,SRET 可按规则恢复。

打开官方手册
1

SIE

读写

VS-mode 的 Supervisor 全局中断使能。

这个字段控制什么

  • - VS-mode 的 Supervisor 全局中断使能。

常见取值

0关闭

当前在 VS 模式运行时,Supervisor 全局中断关闭。

1开启

当前在 VS 模式运行时,Supervisor 全局中断开启;具体递送还取决于 vsie/vsip。

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

vsstatus 是 VS supervisor 状态/Trap CSR。独立 CSR 地址用于 M/HS 侧管理;当 V=1 时,guest 对相应 supervisor CSR 的访问会替代到 VS 状态,除非官方扩展另有规定。

vsstatus 的地址、访问类和宽度按官方 CSR 表核对:0x200,HRW(Hypervisor 读写),VSXLEN。
H 扩展规定 V=1 时相应 supervisor CSR 访问替代到 VS CSR。
写入时只修改官方定义字段;WARL/WLRL/WPRI 和保留字段按官方规范与实现行为处理。

读这个 CSR 时先看什么

  • - vsstatus 的独立 CSR 地址按官方表属于 HRW(Hypervisor 读写) 访问类;VS/VU guest 通常通过对应 supervisor CSR 别名访问 VS 状态。
  • - 读取前确认 H/AIA/Sstc/Smstateen/Smcsrind 等定义该 CSR 的扩展已经实现。

写入前的风险检查

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

放回真实流程里理解

1

M/HS 软件可通过独立 CSR 地址访问 vsstatus 的 VS 副本。

2

当 V=1 时,guest 访问 sstatus 类 supervisor CSR 会替代到对应 VS 状态;直接访问独立 VS CSR 地址会触发 virtual-instruction exception。

3

按官方字段更新,不把 VS 状态混同为普通 HS supervisor 状态。

常见问题

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

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

vsstatus 主要保存什么?

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