CSR 位字段

RISC-V mhpmcounter12 CSR 寄存器详解

地址 0xB0C特权级 Machine 模式访问 读写 / 最高 64 位精度Machine 计数器与性能监控 CSR

mhpmcounter12(地址 0xB0C)是 Machine 硬件性能监控计数器 12,以最高 64 位精度计数由 mhpmevent12 选择的事件。

字段映射

按 bit 字段理解 mhpmcounter12

1 个关键字段
63:0

COUNT

读写

mhpmevent12 所选事件的 Machine HPM 计数值,是最高 64 位精度的 WARL 寄存器;合法实现可将它及对应 mhpmevent12 都实现为只读 0。

这个字段控制什么

  • - mhpmevent12 所选事件的 Machine HPM 计数值,是最高 64 位精度的 WARL 寄存器;合法实现可将它及对应 mhpmevent12 都实现为只读 0。

常见取值

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

官方依据与检索要点

mhpmcounter12 是第 3 个 Machine HPM 计数器。它不自行定义事件含义,而是以最高 64 位精度统计 mhpmevent12 当前选择的平台定义事件。

官方 Machine HPM 机制将 mhpmcounter12 定义为最高 64 位精度的 WARL 计数器。
mhpmevent12 选择事件;事件含义由平台定义,事件 0 表示“不计事件”。
RV32 上 mhpmcounter12h 访问位 63:32;合法实现可将 mhpmcounter12 和 mhpmevent12 都实现为只读 0。

读这个 CSR 时先看什么

  • - mhpmcounter12 的事件来源由 mhpmevent12 决定;事件含义由平台定义。
  • - S/U 模式读取只读 hpmcounter12 视图受 mcounteren.HPM12 控制;U 模式还受 scounteren.HPM12 控制。
  • - 在 RV32 上,mhpmcounter12h 访问 mhpmcounter12 的位 63:32。

写入前的风险检查

  • - 写 mhpmcounter12 会改变当前计数值;写入在写 CSR 的指令完成后才生效。
  • - mcountinhibit.HPM12 只控制该计数器是否递增,不影响其可访问性。
  • - 该计数器与 mhpmevent12 是 WARL;事件编码由平台定义,事件 0 表示“不计事件”。

放回真实流程里理解

1

配置 mhpmevent12 选择要统计的平台定义事件。

2

必要时设置 mcountinhibit.HPM12 暂停 mhpmcounter12 递增。

3

读取 mhpmcounter12;在 RV32 上配合读取 mhpmcounter12h 获得最高 64 位精度的值。

常见问题

mhpmcounter12 可以在任意特权级访问吗?

不能直接从任意特权级访问 mhpmcounter12。CSR 表将它列为 Machine 读写 CSR。较低特权级访问对应的只读 hpmcounter12 视图时,S/U 模式受 mcounteren.HPM12 控制,U 模式还受 scounteren.HPM12 控制;未获许可的读取会触发非法指令异常。

mhpmcounter12 和 hpmcounter12 是什么关系?

mhpmcounter12 是 Machine 读写计数器;hpmcounter12 是对应的低特权级只读影子。S/U 模式读取受 mcounteren.HPM12 控制,U 模式还受 scounteren.HPM12 控制。