CSR 位字段

RISC-V mhpmcounter16 CSR 寄存器详解

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

mhpmcounter16(地址 0xB10)是 Machine 硬件性能监控计数器 16,对 mhpmevent16 选择的事件进行 64 位计数。

字段映射

按 bit 字段理解 mhpmcounter16

1 个关键字段
63:0

COUNT

读写

mhpmevent16 所选事件的 64 位 Machine HPM 计数值;未实现计数器可固定读 0。

这个字段控制什么

  • - mhpmevent16 所选事件的 64 位 Machine HPM 计数值;未实现计数器可固定读 0。

常见取值

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

官方依据与检索要点

mhpmcounter16 是第 16 个 Machine HPM 计数器。它不自行定义事件含义,而是统计 mhpmevent16 当前选择的平台定义事件。

官方 Machine HPM 机制提供 mhpmcounter16 作为可写 Machine 计数器。
mhpmevent16 选择事件;事件编号是平台定义的。
RV32 上 mhpmcounter16h 提供高 32 位访问。

读这个 CSR 时先看什么

  • - mhpmcounter16 的事件来源由 mhpmevent16 决定;先核对事件选择配置。
  • - 低特权级影子 hpmcounter16 的可访问性受 mcounteren/scounteren 或相关委托机制控制。
  • - 在 RV32 上,mhpmcounter16h 访问 mhpmcounter16 的位 63:32。

写入前的风险检查

  • - 写 mhpmcounter16 会改变性能计数器当前值,通常只应在初始化、采样重置或溢出处理时进行。
  • - 停止计数应使用 mcountinhibit.HPM16 或事件/模式过滤机制,而不是误写未知事件编码。
  • - 多 hart 或平台共享实现细节需以目标实现文档为准。

放回真实流程里理解

1

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

2

必要时用 mcountinhibit.HPM16 或 xINH 位控制计数窗口。

3

读取 mhpmcounter16(RV32 同时读取 mhpmcounter16h)获得 64 位事件计数。

常见问题

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

不能。官方 CSR 表把 mhpmcounter16 列为 Machine 模式 CSR;低特权级软件只有在相关标准扩展提供明确的委托或权限机制时才可访问对应状态;权限不足或未实现时直接 CSR 访问会触发非法指令异常。

mhpmcounter16 和 hpmcounter16 是什么关系?

mhpmcounter16 是 Machine 可读写视图;hpmcounter16 是低特权级可见的对应计数器视图,是否可读由 counteren 或委托机制控制。