CSR 位字段

RISC-V hgatp CSR 寄存器详解

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

hgatp 是 G-stage 地址转换根 CSR,保存模式、VMID 和 guest-physical 根页表 PPN。

字段映射

按 bit 字段理解 hgatp

4 个关键字段
63:60

MODE

WARL

G 阶段地址转换模式编码(WARL);Bare 时软件必须将其余字段写为零。若以非零其余字段选择 Bare,字段值及转换/保护行为均为 UNSPECIFIED。

这个字段控制什么

  • - G 阶段地址转换模式编码(WARL);Bare 时软件必须将其余字段写为零。若以非零其余字段选择 Bare,字段值及转换/保护行为均为 UNSPECIFIED。

常见取值

RV64 hgatp.MODE
0Bare

无转换或保护;软件选择 Bare 时必须将其余字段写为 0。

1-7保留

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

8Sv39x4

启用基于 Sv39x4 的 G-stage 页式地址转换。

9Sv48x4

启用基于 Sv48x4 的 G-stage 页式地址转换。

10Sv57x4

启用基于 Sv57x4 的 G-stage 页式地址转换。

11-15保留

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

打开官方手册
57:44

VMID

WARL

虚拟机标识符(WARL),用于按虚拟机区分地址转换缓存;实现的低位数 VMIDLEN 可为零。

这个字段控制什么

  • - 虚拟机标识符(WARL),用于按虚拟机区分地址转换缓存;实现的低位数 VMIDLEN 可为零。

常见取值

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

打开官方手册
43:0

PPN

WARL

guest-physical 根页表的物理页号(WARL);在定义的分页模式下根表为 16 KiB 且须按 16 KiB 对齐,因此 PPN[1:0] 读为零。

这个字段控制什么

  • - guest-physical 根页表的物理页号(WARL);在定义的分页模式下根表为 16 KiB 且须按 16 KiB 对齐,因此 PPN[1:0] 读为零。

常见取值

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

打开官方手册
59:58

RESERVED_ZERO

WARL

保留的 WARL 位;图 65 将其格式化为 0。软件不应依赖非零写入后的读回值。

这个字段控制什么

  • - 保留的 WARL 位;图 65 将其格式化为 0。软件不应依赖非零写入后的读回值。

常见取值

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

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

hgatp 是 G-stage 地址转换 CSR。它是 HS/M 侧的 Hypervisor 状态,不是 VS supervisor CSR 副本。

hgatp 的地址、访问类和宽度按官方 CSR 表核对:0x680,HRW(Hypervisor 读写),HSXLEN。
MODE 选择 G-stage 地址转换模式;Bare 时其余字段必须为零。
VMID 用于按虚拟机标记地址转换缓存;PPN 保存 guest-physical 根页表物理页号。
写入时只修改官方定义字段;WARL/WLRL/WPRI 和保留字段按官方规范与实现行为处理。

读这个 CSR 时先看什么

  • - hgatp 是 Hypervisor 级 CSR;独立地址按官方表属于 HRW(Hypervisor 读写) 访问类。
  • - 当 mstatus.TVM=1 时,HS-mode 对 hgatp 的读写会触发非法指令异常。

写入前的风险检查

  • - 写 hgatp 后不会自动建立页表更新与后续 G 阶段转换之间的排序;VMID 复用或页表变更时可能需要执行 HFENCE.GVMA。

放回真实流程里理解

1

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

2

确认 H 扩展和当前 HS-mode 的 TVM 约束。

3

按 MODE、VMID、PPN 的 WARL 规则写入;需要时执行 HFENCE.GVMA。

常见问题

hgatp 能通过 supervisor CSR alias 访问吗?

不能把 hgatp 当作 VS CSR 副本。它是 H-level CSR。

hgatp.Bare 时要注意什么?

官方规则要求 Bare 模式下其余字段为零。