CSR 位字段

RISC-V vsatp CSR 寄存器详解

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

vsatp 是 VS-stage 地址转换根 CSR,保存分页 MODE、ASID 和 VS 根页表 PPN;当 V=1 时它替代 satp。

字段映射

按 bit 字段理解 vsatp

3 个关键字段
63:60

MODE

WARL

VS 阶段地址转换模式编码。

这个字段控制什么

  • - VS 阶段地址转换模式编码。

常见取值

0Bare

无分页地址转换;选择 Bare 时其余字段必须写 0。

1-7保留

RV64 satp.MODE 的保留编码;可移植软件不应写入或依赖。

8Sv39

启用 Sv39 页式虚拟内存。

9Sv48

启用 Sv48 页式虚拟内存。

10Sv57

启用 Sv57 页式虚拟内存。

11保留/Sv64 future

当前版本中作为未来 Sv64 方案预留。

12-13保留

RV64 satp.MODE 的保留编码;vsatp 在 V=1 时替代 satp 并沿用该模式表,可移植软件不应写入或依赖。

14-15自定义使用

RV64 satp.MODE 的 custom-use 编码;vsatp 沿用 satp 模式表。这些编码没有通用可移植含义,普通可移植软件不应依赖。

打开官方手册
59:44

ASID

WARL

VS 地址空间标识符。

这个字段控制什么

  • - VS 地址空间标识符。

常见取值

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

打开官方手册
43:0

PPN

WARL

VS 根页表物理页号。

这个字段控制什么

  • - VS 根页表物理页号。

常见取值

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

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

vsatp 是 VS-stage 地址转换根 CSR。当 V=1 时,guest 对 satp 的访问替代到 vsatp;直接访问独立 vsatp 地址会触发 virtual-instruction exception。

vsatp 地址 0x280、HRW 访问类、VSXLEN 宽度来自官方 Hypervisor/VS CSR 表。
MODE、ASID 和 PPN 在 VSXLEN=32 与 VSXLEN=64 下均为 WARL 字段,并沿用 satp MODE 编码。
当 V=0 时,vsatp 通常不直接影响机器行为,除非虚拟机 load/store 或 MPRV 使访问表现得像 V=1。
不支持的 MODE 在 V=0 写 vsatp 时可按 satp 规则忽略或按 WARL 处理;V=1 写 satp 的不支持 MODE 会被忽略且不写入 vsatp。

读这个 CSR 时先看什么

  • - vsatp 的独立 CSR 地址按官方表属于 HRW(Hypervisor 读写)访问类;当 V=1 时,VS-mode 访问 satp 会替代到 vsatp。
  • - 读取前确认 H 扩展已实现,并区分 M/HS 对独立 vsatp 地址的直接访问与 VS-mode 的 satp 别名访问。

写入前的风险检查

  • - 写 vsatp 时使用受支持的 MODE;选择 Bare 时其余字段必须写 0,且不支持 MODE 的写入在 V=0 与 V=1 satp 别名路径下规则不同。

放回真实流程里理解

1

设置 MODE、ASID 和根页表 PPN。

2

guest 通过 satp alias 访问 VS-stage 状态。

3

结合 hgatp 管理两阶段转换。

常见问题

vsatp 与 hgatp 有什么区别?

vsatp 控制 guest virtual 到 guest physical 的 VS-stage;hgatp 控制 guest physical 到 supervisor physical 的 G-stage。

VS-mode 是否直接访问 vsatp 地址?

不直接访问独立 vsatp 地址;V=1 时访问 satp 会替代到 vsatp。