CSR 位字段

RISC-V vstimecmp CSR 寄存器详解

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

vstimecmp 是 Sstc 的 64 位 VS timer compare CSR;当无符号 (time + htimedelta) mod 2^64 大于等于它时,VSTIP 最终置为 pending。

字段映射

按 bit 字段理解 vstimecmp

1 个关键字段
63:0

TIMECMP

读写

所有 RV32/RV64 系统上均为 64 位精度的无符号 VS timer compare 值。RV32 中地址 0x24D 访问低 32 位,vstimecmph 访问高 32 位。

这个字段控制什么

  • - 所有 RV32/RV64 系统上均为 64 位精度的无符号 VS timer compare 值。RV32 中地址 0x24D 访问低 32 位,vstimecmph 访问高 32 位。

常见取值

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

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

vstimecmp 保存 guest 的 64 位 timer deadline。无符号 (time + htimedelta) mod 2^64 达到它时,hip.VSTIP 最终置位。

vstimecmp 的地址、访问类和宽度按官方 CSR 表核对:0x24D,HRW(Hypervisor 读写),64 位。
Sstc 与 H 添加 VS-level vstimecmp;mcounteren.TM 控制 HS 直接访问,VS 通过 stimecmp 的别名访问还必须通过 menvcfg.STCE、henvcfg.STCE 和 hcounteren.TM 门控。
该状态在 RV32/RV64 上均为 64 位精度;RV32 由 vstimecmp 与 vstimecmph 访问低/高半。
比较结果最终但不一定立即反映到 VSTIP;中断递送遵循标准 enable 与 delegation 规则。AIA 的 hvictl.VTI=1 时会截获 VS-mode 的 stimecmp/stimecmph 写入。

读这个 CSR 时先看什么

  • - vstimecmp 的独立 CSR 地址按官方表属于 HRW(Hypervisor 读写) 访问类;VS/VU guest 通常通过对应 supervisor CSR 别名访问 VS 状态。
  • - vstimecmp 仅由 Sstc 与 H 扩展定义。VS-mode 通过 stimecmp 别名访问时,menvcfg.STCE、mcounteren.TM、henvcfg.STCE 和 hcounteren.TM 的门控必须全部允许。

写入前的风险检查

  • - 写入 vstimecmp 后 VSTIP 的变化最终可见但不一定立即可见;软件必须容忍推进 deadline 后的短暂伪 timer interrupt。
  • - 实现 AIA 且 hvictl.VTI=1 时,VS-mode 写 stimecmp(RV32 也包括 stimecmph)会触发 virtual-instruction exception,因为该写入可能清除 vsip.STIP。

放回真实流程里理解

1

确认 Sstc/H。HS 直接访问 vstimecmp 受 mcounteren.TM 控制;VS guest 通过 stimecmp 别名访问还要求 menvcfg.STCE、henvcfg.STCE 和 hcounteren.TM 全部允许。

2

按无符号 64 位状态写 deadline;RV32 分别通过 vstimecmp/vstimecmph 更新低/高半。

3

比较对象是截断为 64 位的 time + htimedelta;中断递送仍遵循标准 enable 与 delegation 规则。

常见问题

vstimecmp 是 64 位状态的一部分吗?

vstimecmp 表示 64 位VS timer compare 值;RV32 需要配合高半 CSR。

vstimecmp 与 time 有什么关系?

硬件把 vstimecmp 与无符号 (time + htimedelta) mod 2^64 比较;后者大于等于前者时 VSTIP 最终置位。