CSR 位字段

RISC-V hpmcounter25 CSR 寄存器详解

地址 0xC19特权级 U模式访问 只读 / 64 位(RV32 通过 hpmcounter25h 访问高 32 位)用户级计数器与性能监控 CSR

hpmcounter25 是 Zihpm 提供的用户级只读硬件性能计数器;所计事件、实现数量和宽度由平台定义。

字段映射

按 bit 字段理解 hpmcounter25

1 个关键字段
63:0

VALUE

只读

hpmcounter25 在 RV64 上读取完整 64 位计数值;实现数量、宽度和所计事件由平台定义。

这个字段控制什么

  • - hpmcounter25 在 RV64 上读取完整 64 位计数值;实现数量、宽度和所计事件由平台定义。

常见取值

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

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

hpmcounter25 是地址 0xC19 的 Zihpm 用户级只读计数器。事件、实现数量和宽度由平台定义;RV32 的高 32 位由 hpmcounter25h 提供。

hpmcounter25 在官方 CSR 表中为 URO,地址 0xC19,是 mhpmcounter25 的只读影子。
Zihpm 依赖 Zicsr;其性能计数器最多 29 个,但平台决定此计数器是否实现、其宽度和所计事件。
在 S/U 模式,mcounteren.HPM25 为零时读取会触发非法指令异常;若实现 scounteren,其 HPM25 位控制 U 模式访问。

读这个 CSR 时先看什么

  • - 确认 Zihpm(依赖 Zicsr)和该计数器已实现。未实现的计数器访问可能触发非法指令异常,也可能返回常量值。
  • - 在 S/U 模式,mcounteren.HPM25 为零时读取会触发非法指令异常;若实现 scounteren,其 HPM25 位也控制 U 模式访问。
  • - 若事件选择配置错误,计数器可能返回常量值。
  • - 当实现 Hypervisor 扩展且 V=1 时,若 mcounteren.HPM25 为一而 hcounteren.HPM25 为零,读取会触发虚拟指令异常;VU 模式还要求 mcounteren、hcounteren 和 scounteren 的对应位均为一。

写入前的风险检查

  • - hpmcounter25 是 mhpmcounter25 的只读影子;不要写入该用户级 CSR。

放回真实流程里理解

1

通过执行环境接口确认实现数量、宽度和事件配置。

2

检查当前特权级所需的 mcounteren/scounteren 放行条件。

3

读取 hpmcounter25;RV32 需要同时读取 hpmcounter25h 才能取得完整 64 位值。

常见问题

hpmcounter25 一定可读吗?

不一定。未实现的计数器访问可能触发非法指令异常或返回常量值;在 S/U 模式还须满足 mcounteren.HPM25,且 U 模式在实现 scounteren 时还须满足 scounteren.HPM25。

RV32 如何读取完整 hpmcounter25?

此 CSR 读取低 32 位;hpmcounter25h 读取同一 64 位计数器的高 32 位。