CSR 位字段

RISC-V mstateen0 CSR 寄存器详解

地址 0x30C特权级 Machine 模式访问 读写 / RV64 为 64 位;RV32 通过 mstateen0 和 mstateen0h 访问高/低半部Machine 委托、环境配置与状态使能 CSR

机器状态使能 0 寄存器;控制低于 M 模式对 stateen、envcfg、AIA/IMSIC、CSR indirection、上下文、FCSR、JVT、自定义状态等扩展状态的访问。

字段映射

按 bit 字段理解 mstateen0

13 个关键字段
63

SE0

WARL

控制对 hstateen0、hstateen0h 和 sstateen0 的访问。仅当未实现 H 且匹配 sstateen0 的所有位均为只读零时可为只读零。

这个字段控制什么

  • - 控制对 hstateen0、hstateen0h 和 sstateen0 的访问。仅当未实现 H 且匹配 sstateen0 的所有位均为只读零时可为只读零。

常见取值

0禁止

低于 M 的特权级不能访问该位控制的状态;按上下文触发非法指令或虚拟指令异常,或相关状态更新被阻止。

1允许

允许低于 M 的特权级访问该位控制的状态,但仍受匹配 hstateen/sstateen 或其他架构控制约束。

62

ENVCFG

WARL

控制对 henvcfg、henvcfgh 和 senvcfg 的访问。

这个字段控制什么

  • - 控制对 henvcfg、henvcfgh 和 senvcfg 的访问。

常见取值

0禁止

低于 M 的特权级不能访问该位控制的状态;按上下文触发非法指令或虚拟指令异常,或相关状态更新被阻止。

1允许

允许低于 M 的特权级访问该位控制的状态,但仍受匹配 hstateen/sstateen 或其他架构控制约束。

60

CSRIND

WARL/只读零

控制对 Sscsrind 扩展提供的 siselect、sireg*、vsiselect 和 vsireg* CSR 的访问。

这个字段控制什么

  • - 控制对 Sscsrind 扩展提供的 siselect、sireg*、vsiselect 和 vsireg* CSR 的访问。

常见取值

0禁止

低于 M 的特权级不能访问该位控制的状态;按上下文触发非法指令或虚拟指令异常,或相关状态更新被阻止。

1允许

允许低于 M 的特权级访问该位控制的状态,但仍受匹配 hstateen/sstateen 或其他架构控制约束。

59

AIA

WARL/只读零

控制不由 CSRIND 或 IMSIC 位控制的 Ssaia 状态。

这个字段控制什么

  • - 控制不由 CSRIND 或 IMSIC 位控制的 Ssaia 状态。

常见取值

0禁止

低于 M 的特权级不能访问该位控制的状态;按上下文触发非法指令或虚拟指令异常,或相关状态更新被阻止。

1允许

允许低于 M 的特权级访问该位控制的状态,但仍受匹配 hstateen/sstateen 或其他架构控制约束。

58

IMSIC

WARL/只读零

控制 Ssaia 提供的 IMSIC 状态,包括 stopei 和 vstopei。

这个字段控制什么

  • - 控制 Ssaia 提供的 IMSIC 状态,包括 stopei 和 vstopei。

常见取值

0禁止

低于 M 的特权级不能访问该位控制的状态;按上下文触发非法指令或虚拟指令异常,或相关状态更新被阻止。

1允许

允许低于 M 的特权级访问该位控制的状态,但仍受匹配 hstateen/sstateen 或其他架构控制约束。

57

CONTEXT

WARL/只读零

控制对 Sdtrig 提供的 scontext 和 hcontext CSR 的访问。

这个字段控制什么

  • - 控制对 Sdtrig 提供的 scontext 和 hcontext CSR 的访问。

常见取值

0禁止

低于 M 的特权级不能访问该位控制的状态;按上下文触发非法指令或虚拟指令异常,或相关状态更新被阻止。

1允许

允许低于 M 的特权级访问该位控制的状态,但仍受匹配 hstateen/sstateen 或其他架构控制约束。

56

P1P13

WARL/只读零

控制对 Privileged Specification Version 1.13 引入的 hedelegh 的访问。

这个字段控制什么

  • - 控制对 Privileged Specification Version 1.13 引入的 hedelegh 的访问。

常见取值

0禁止

低于 M 的特权级不能访问该位控制的状态;按上下文触发非法指令或虚拟指令异常,或相关状态更新被阻止。

1允许

允许低于 M 的特权级访问该位控制的状态,但仍受匹配 hstateen/sstateen 或其他架构控制约束。

55

SRMCFG

WARL/只读零

控制对 Ssqosid 引入的 srmcfg 的访问。

这个字段控制什么

  • - 控制对 Ssqosid 引入的 srmcfg 的访问。

常见取值

0禁止

低于 M 的特权级不能访问该位控制的状态;按上下文触发非法指令或虚拟指令异常,或相关状态更新被阻止。

1允许

允许低于 M 的特权级访问该位控制的状态,但仍受匹配 hstateen/sstateen 或其他架构控制约束。

54

CTR

WARL/只读零

当存在 Smctr/Ssctr CTR 状态时,控制低于 M 模式的特权级对 CTR 寄存器状态的访问。

这个字段控制什么

  • - 当存在 Smctr/Ssctr CTR 状态时,控制低于 M 模式的特权级对 CTR 寄存器状态的访问。

常见取值

0禁止

低于 M 的特权级不能访问该位控制的状态;按上下文触发非法指令或虚拟指令异常,或相关状态更新被阻止。

1允许

允许低于 M 的特权级访问该位控制的状态,但仍受匹配 hstateen/sstateen 或其他架构控制约束。

2

JVT

WARL/只读零

控制对 Zcmt 提供的 jvt CSR 的访问。

这个字段控制什么

  • - 控制对 Zcmt 提供的 jvt CSR 的访问。

常见取值

0禁止

低于 M 的特权级不能访问该位控制的状态;按上下文触发非法指令或虚拟指令异常,或相关状态更新被阻止。

1允许

允许低于 M 的特权级访问该位控制的状态,但仍受匹配 hstateen/sstateen 或其他架构控制约束。

1

FCSR

WARL/只读零

在 Zfinx 相关扩展使浮点指令使用 x 寄存器时,控制对 fcsr 的访问;misa.F=1 时只读零。

这个字段控制什么

  • - 在 Zfinx 相关扩展使浮点指令使用 x 寄存器时,控制对 fcsr 的访问;misa.F=1 时只读零。

常见取值

0禁止

低于 M 的特权级不能访问该位控制的状态;按上下文触发非法指令或虚拟指令异常,或相关状态更新被阻止。

1允许

允许低于 M 的特权级访问该位控制的状态,但仍受匹配 hstateen/sstateen 或其他架构控制约束。

0

C

WARL

控制对所有自定义状态的访问;C 位本身仍是标准 CSR 字段。

这个字段控制什么

  • - 控制对所有自定义状态的访问;C 位本身仍是标准 CSR 字段。

常见取值

0禁止

低于 M 的特权级不能访问该位控制的状态;按上下文触发非法指令或虚拟指令异常,或相关状态更新被阻止。

1允许

允许低于 M 的特权级访问该位控制的状态,但仍受匹配 hstateen/sstateen 或其他架构控制约束。

61, 53:48, 47:3

WPRI

读写

mstateen0 布局中的保留/WPRI 字段。

这个字段控制什么

  • - mstateen0 布局中的保留/WPRI 字段。

常见取值

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

官方依据与检索要点

mstateen0 是 M 模式的扩展状态访问门控。它让机器级软件决定较低特权级是否能访问 stateen/envcfg、AIA/IMSIC、CSR indirection、调试上下文、JVT、FCSR 和自定义状态等资源。

标准定义的 stateen 位是 WARL,未实现的受控状态对应位读零。
可写 mstateen 位复位为零;M 模式软件显式打开后,还需初始化匹配的 hstateen/sstateen。
位 63(SE0)控制对匹配 sstateen0/hstateen0 CSR 的访问。

读这个 CSR 时先看什么

  • - Smstateen 在 RV64 上增加 64 位机器级状态使能 CSR mstateen0;RV32 使用 mstateen0h 访问位 63:32。
  • - 每个标准定义的 stateen 位都是 WARL,并且可以是只读零或只读一。
  • - 若受控状态未实现,对应 stateen 位为只读零。可写 mstateen 位复位为零。

写入前的风险检查

  • - 清零 stateen 位会阻止较低特权级访问受控状态,并可能使显式访问陷入或隐式状态更新失败。
  • - 将任何可写 mstateen 位设为 1 后,机器级软件必须初始化存在的匹配 hstateen CSR,以及对应位存在的匹配 sstateen CSR。
  • - 保留 WPRI 字段,并读回 WARL 位以了解实现支持的访问控制子集。

放回真实流程里理解

1

从可写 mstateen 位复位为零的状态开始。

2

只启用较低特权级软件已准备好保存、恢复或模拟的扩展状态。

3

向低特权级软件暴露受控状态前,初始化匹配的 hstateen 和 sstateen CSR。