CSR 位字段

RISC-V hedeleg CSR 寄存器详解

地址 0x602特权级 Hypervisor访问 HRW(Hypervisor 读写) / 64 位;RV32 通过 hedelegh 访问 bits 63:32Hypervisor 与虚拟化 CSR

hedeleg 是 64 位 Hypervisor 同步异常委托 CSR;已由 medeleg 委托到 HS 的同步 trap,在 V=1 且对应 hedeleg 位为 1 时可进一步委托到 VS-mode。

字段映射

按 bit 字段理解 hedeleg

1 个关键字段
63:0

Synchronous Exceptions

WARL

每个位对应相同编号的同步 exception cause;每位必须可写或只读零,Table 45 指定若干位必须可写或必须只读零。

这个字段控制什么

  • - 每个位对应相同编号的同步 exception cause;每位必须可写或只读零,Table 45 指定若干位必须可写或必须只读零。

常见取值

0不进一步委托

对可写且可委托位,0 表示 trap 保持在 HS-mode 处理。只读零或不可委托位不具有可设置委托语义。

1进一步委托到 VS-mode

对可写且可委托位,1 表示当 trap 已由 medeleg 委托到 HS 且 trap 前 V=1 时,进一步委托到 VS-mode。

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

hedeleg 控制从 HS 到 VS 的同步异常再委托。它只作用于已由 M-mode 的 medeleg 委托到 HS 的同步 trap,并且要求 trap 前 V=1。

hedeleg 地址 0x602、HRW 访问类来自 Hypervisor CSR 表;寄存器本身是 64 位。
XLEN=32 时,hedelegh 是 32 位 RW CSR,别名 hedeleg bits 63:32;XLEN=64 时 hedelegh 不存在。
每个 hedeleg 位必须可写或只读零;Table 45 列出必须可写或必须只读零的 exception cause 位。
只有已由 medeleg 委托到 HS 的同步 trap,且 trap 前 V=1,对应 hedeleg 位为 1 时,才进一步委托到 VS-mode。

读这个 CSR 时先看什么

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

写入前的风险检查

  • - 写 hedeleg 时只依赖可写且可委托的 exception-cause 位;只读零位不能设置为委托。

放回真实流程里理解

1

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

2

确认 H 扩展已实现,并先确认对应同步 trap 已由 medeleg 委托到 HS。

3

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

常见问题

hedeleg 能通过 supervisor CSR alias 访问吗?

不能。hedeleg 是 H-level CSR,不是 VS CSR 副本;VS/VU 直接访问实现的 hypervisor CSR 会按 H 扩展规则触发 virtual-instruction exception。