CSR 位字段

RISC-V vsepc CSR 寄存器详解

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

vsepc 是 VSXLEN 位 WARL 的 guest trap 返回 PC;V=1 时替代 sepc,进入 VS-mode trap 时由硬件写入。

字段映射

按 bit 字段理解 vsepc

1 个关键字段
VSXLEN-1:0

EPC

读写

WARL 的 guest trap 返回 PC,必须能保存 sepc 可保存的同一组值。bit 0 恒为 0;仅支持 IALIGN=32 时 bits 1:0 恒为 0;若 IALIGN 可变,则 IALIGN=32 时读取会把 bit 1 掩为 0,但该位仍可写。

这个字段控制什么

  • - WARL 的 guest trap 返回 PC,必须能保存 sepc 可保存的同一组值。bit 0 恒为 0;仅支持 IALIGN=32 时 bits 1:0 恒为 0;若 IALIGN 可变,则 IALIGN=32 时读取会把 bit 1 掩为 0,但该位仍可写。

常见取值

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

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

vsepc 保存进入 VS-mode trap 时的 guest 虚拟 PC。V=1 时 sepc 访问替代到 vsepc,VS-mode SRET 从 vsepc 返回。

vsepc 的地址、访问类和宽度按官方 CSR 表核对:0x241,HRW(Hypervisor 读写),VSXLEN。
H 扩展规定 V=1 时 sepc 访问替代到 vsepc;V=0 时 vsepc 不直接影响机器行为。
vsepc 是 WARL,保存值集合与 sepc 相同,并继承 sepc 的 IALIGN 低位规则。

读这个 CSR 时先看什么

  • - vsepc 的独立 CSR 地址按官方表属于 HRW(Hypervisor 读写) 访问类;VS/VU guest 通常通过对应 supervisor CSR 别名访问 VS 状态。
  • - H 扩展定义 vsepc;当 V=1 时,访问 sepc 实际访问 vsepc,而直接从 VS-mode 访问地址 0x241 会触发 virtual-instruction exception。

写入前的风险检查

  • - vsepc 是 WARL;实现必须保存所有有效虚拟地址,但可把不可表示的无效地址转换为另一可表示的无效地址。

放回真实流程里理解

1

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

2

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

3

进入 VS-mode trap 会写 vsepc、vscause 和 vstval;VS-mode SRET 最后设置 pc=vsepc。

常见问题

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

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

vsepc 主要保存什么?

进入 VS-mode trap 时,它保存被中断或发生异常的指令虚拟地址;VS-mode SRET 使用它恢复 PC。