CSR 位字段

RISC-V minstretcfg CSR 寄存器详解

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

minstretcfg(地址 0x322)是 Smcntrpmf 定义的 Machine 计数器配置 CSR,用于按特权模式过滤 minstret 的计数。

字段映射

按 bit 字段理解 minstretcfg

7 个关键字段
63

ZERO

只读 0

Smcntrpmf 定义的保留 0 位。

这个字段控制什么

  • - Smcntrpmf 定义的保留 0 位。

常见取值

minstretcfg.ZERO
0只读零

该位对应 Sscofpmf OF 位置,但 Smcntrpmf 规定 cycle/instret 配置中的该位为只读 0;软件不应写 1 或依赖 1 的含义。

62

MINH

读写

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

这个字段控制什么

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

常见取值

MINH mode-filter bit
0计数允许

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

1计数禁止

M 模式 中的instret 计数被禁止。

61

SINH

读写

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

这个字段控制什么

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

常见取值

SINH mode-filter bit
0计数允许

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

1计数禁止

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

60

UINH

读写

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

这个字段控制什么

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

常见取值

UINH mode-filter bit
0计数允许

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

1计数禁止

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

59

VSINH

读写

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

这个字段控制什么

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

常见取值

VSINH mode-filter bit
0计数允许

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

1计数禁止

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

58

VUINH

读写

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

这个字段控制什么

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

常见取值

VUINH mode-filter bit
0计数允许

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

1计数禁止

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

57:0

WPRI

WPRI

保留写保留值字段;写其他字段时保留这些位原值,读取时不要依赖其值。

这个字段控制什么

  • - 保留写保留值字段;写其他字段时保留这些位原值,读取时不要依赖其值。

常见取值

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

官方依据与检索要点

minstretcfg 是 64 位 Machine 计数器配置 CSR。Smcntrpmf 用它控制指令退役计数器在不同特权模式下是否继续计数;在 RV32 上通过 minstretcfgh 访问高 32 位。

官方 Smcntrpmf 表定义 minstretcfg 为 64 位寄存器,位 62..58 是 MINH/SINH/UINH/VSINH/VUINH。
所有 xINH 位为 0 时在所有模式计数;相关特权模式未实现时,对应 xINH 位为只读 0。
该 CSR 过滤计数本身,不决定低特权级是否可以读取计数器。

读这个 CSR 时先看什么

  • - minstretcfg 属于 Smcntrpmf 扩展;使用前确认实现支持,未实现时访问可能触发非法指令异常。
  • - 读取 xINH 位可以判断 指令退役计数器在各特权模式下是否被过滤;未实现的关联特权模式位按官方规则为只读 0。
  • - 在 RV32 上,minstretcfgh 访问 minstretcfg 的位 63:32。

写入前的风险检查

  • - 只修改目标 xINH 位,并保留 WPRI 位原值。
  • - minstretcfg 控制计数过滤,不控制低特权级读取权限;不要用它替代 mcounteren/scounteren 或相关委托机制。
  • - 如果系统启用 Hypervisor,确认 VSINH/VUINH 与 guest profiling 策略一致。

放回真实流程里理解

1

确认 hart 实现 Smcntrpmf,并读取 minstretcfg 的当前过滤状态。

2

按 profiling 目标设置 MINH/SINH/UINH/VSINH/VUINH,只过滤不希望计入的特权模式。

3

结合 minstret 的读数和低特权级访问控制 CSR 验证计数行为。

常见问题

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

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

minstretcfg 和 mcountinhibit 有什么区别?

mcountinhibit 按计数器整体抑制递增;minstretcfg 按特权模式过滤指令退役计数器的计数。两者都不等同于低特权级访问授权。