CSR 位字段

RISC-V mhpmevent21 CSR 寄存器详解

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

mhpmevent21(地址 0x335)是 mhpmcounter21 的 Machine HPM 事件选择 CSR;Sscofpmf 还在高位定义溢出和特权模式过滤字段。

字段映射

按 bit 字段理解 mhpmevent21

8 个关键字段
63

OF

读写

Sscofpmf 溢出状态和中断禁用位;mhpmcounter21 溢出时置位。

这个字段控制什么

  • - Sscofpmf 溢出状态和中断禁用位;mhpmcounter21 溢出时置位。

常见取值

Sscofpmf OF bit
0未记录溢出

mhpmcounter21 的 OF 位未置位;该位本身不禁止后续 count-overflow interrupt request 的产生。

1已记录溢出

mhpmcounter21 已发生溢出并置位 sticky OF;该位保持为 1 直到软件写入清除,同时禁止该计数器产生新的 count-overflow interrupt request。

62

MINH

读写

置 1 时抑制 M 模式下的事件计数。

这个字段控制什么

  • - 置 1 时抑制 M 模式下的事件计数。

常见取值

MINH mode-filter bit
0计数允许

M 模式 中的mhpmcounter21 事件计数不由该位禁止;仍受其他计数器配置、事件选择和实现支持情况约束。

1计数禁止

M 模式 中的mhpmcounter21 事件计数被禁止。

61

SINH

读写

置 1 时抑制 S/HS 模式下的事件计数;若相关特权模式未实现,该位为只读 0。

这个字段控制什么

  • - 置 1 时抑制 S/HS 模式下的事件计数;若相关特权模式未实现,该位为只读 0。

常见取值

SINH mode-filter bit
0计数允许

S/HS 模式 中的mhpmcounter21 事件计数不由该位禁止;仍受其他计数器配置、事件选择和实现支持情况约束。

1计数禁止

S/HS 模式 中的mhpmcounter21 事件计数被禁止;若相关特权模式未实现,该位为只读零。

60

UINH

读写

置 1 时抑制 U 模式下的事件计数;若 U 模式未实现,该位为只读 0。

这个字段控制什么

  • - 置 1 时抑制 U 模式下的事件计数;若 U 模式未实现,该位为只读 0。

常见取值

UINH mode-filter bit
0计数允许

U 模式 中的mhpmcounter21 事件计数不由该位禁止;仍受其他计数器配置、事件选择和实现支持情况约束。

1计数禁止

U 模式 中的mhpmcounter21 事件计数被禁止;若相关特权模式未实现,该位为只读零。

59

VSINH

读写

置 1 时抑制 VS 模式下的事件计数;若 Hypervisor/VS 模式未实现,该位为只读 0。

这个字段控制什么

  • - 置 1 时抑制 VS 模式下的事件计数;若 Hypervisor/VS 模式未实现,该位为只读 0。

常见取值

VSINH mode-filter bit
0计数允许

VS 模式 中的mhpmcounter21 事件计数不由该位禁止;仍受其他计数器配置、事件选择和实现支持情况约束。

1计数禁止

VS 模式 中的mhpmcounter21 事件计数被禁止;若相关特权模式未实现,该位为只读零。

58

VUINH

读写

置 1 时抑制 VU 模式下的事件计数;若 VU 模式未实现,该位为只读 0。

这个字段控制什么

  • - 置 1 时抑制 VU 模式下的事件计数;若 VU 模式未实现,该位为只读 0。

常见取值

VUINH mode-filter bit
0计数允许

VU 模式 中的mhpmcounter21 事件计数不由该位禁止;仍受其他计数器配置、事件选择和实现支持情况约束。

1计数禁止

VU 模式 中的mhpmcounter21 事件计数被禁止;若相关特权模式未实现,该位为只读零。

57:56

WPRI

WPRI

Sscofpmf 保留写保留值字段。

这个字段控制什么

  • - Sscofpmf 保留写保留值字段。

常见取值

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

55:0

EVENT

WARL

平台定义的 mhpmcounter21 事件选择值;事件 0 表示不计数事件。

这个字段控制什么

  • - 平台定义的 mhpmcounter21 事件选择值;事件 0 表示不计数事件。

常见取值

mhpmevent EVENT selector
0无事件

官方定义 EVENT=0 表示 mhpmcounter21 不计数任何事件;其他 EVENT 编码由平台定义,不能在通用页面枚举。

官方依据与检索要点

mhpmevent21 决定 mhpmcounter21 统计哪个平台定义的性能事件。若实现 Sscofpmf,高位还包含 OF 溢出状态/中断禁用位和 MINH/SINH/UINH/VSINH/VUINH 模式过滤位。

官方 Machine HPM 机制把 mhpmevent21 作为 mhpmcounter21 的事件选择 CSR。
事件选择编码由平台定义;通用页面不能臆造具体平台事件编号。
Sscofpmf 标准化 OF 与 xINH 高位,并通过 scountovf 暴露 OF 影子。

读这个 CSR 时先看什么

  • - 确认当前 hart 实现 mhpmevent21 及相关 HPM 计数器;未实现计数器可能固定读 0。
  • - 事件编码是平台定义的,不能只从 mhpmevent21 名称推断事件含义。
  • - 实现 Sscofpmf 时,OF 位也会在 scountovf 的对应位中以只读影子形式呈现。

写入前的风险检查

  • - 写事件选择值前查目标平台事件编码,并保留 WPRI 位。
  • - 修改 OF/xINH 位会影响溢出中断行为或特权模式过滤;不要把 mhpmevent21 当作普通整数覆盖。
  • - 低特权级读取 mhpmcounter21 或 hpmcounter21 仍受 counteren/委托机制控制。

放回真实流程里理解

1

确认目标平台为 mhpmevent21 定义了要使用的事件编码。

2

配置 EVENT 字段,并按需要设置 OF 或 xINH 位。

3

读取 mhpmcounter21 或相应低特权级影子计数器,验证事件计数和溢出行为。

常见问题

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

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

mhpmevent21 能直接告诉我事件编号含义吗?

不能。RISC-V 定义了 HPM 事件选择 CSR 的机制,但具体事件编码是平台定义的;页面只说明标准 OF/xINH 字段和与 mhpmcounter21 的关系。