CSR 位字段

RISC-V sctrctl CSR 寄存器详解

地址 0x14E特权级 Supervisor 模式访问 读写 / 64(RV32 只能显式访问低 32 位)Supervisor AIA、定时器与间接中断 CSR

sctrctl(0x14E)是 Supervisor Control Transfer Records control CSR,提供对 64 位 mctrctl 子集的 S 模式访问;RV32 不能访问 xctrctl[63:32]。

字段映射

按 bit 字段理解 sctrctl

3 个关键字段
9

MTE

只读 0

mctrctl.MTE 不能通过 sctrctl 访问,sctrctl bit 9 读为 0。

这个字段控制什么

  • - mctrctl.MTE 不能通过 sctrctl 访问,sctrctl bit 9 读为 0。

常见取值

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

打开官方手册
2

M

只读 0

mctrctl.M 不能通过 sctrctl 访问,sctrctl bit 2 读为 0。

这个字段控制什么

  • - mctrctl.M 不能通过 sctrctl 访问,sctrctl bit 2 读为 0。

常见取值

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

打开官方手册
63:0

SCTRCTL_FIELDS

读写/按字段定义

除 M 和 MTE 之外,其他 mctrctl 字段可通过 sctrctl 访问;RV32 不能显式访问 xctrctl[63:32],未来扩展才可能提供 high-half CSR。

这个字段控制什么

  • - 除 M 和 MTE 之外,其他 mctrctl 字段可通过 sctrctl 访问;RV32 不能显式访问 xctrctl[63:32],未来扩展才可能提供 high-half CSR。

常见取值

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

打开官方手册
官方依据与检索要点

sctrctl 控制 Supervisor 侧 CTR 记录策略,但不是完整 mctrctl 镜像:M 和 MTE 字段不可通过 sctrctl 访问,且 RV32 不能显式访问 xctrctl[63:32]。

官方 Smctr 文本定义 mctrctl 为 64 位寄存器,sctrctl 提供对 mctrctl 子集的 S 模式访问。
bits 2 和 9 为只读 0,因此 M 和 MTE 不可通过 sctrctl 访问。
Smctr 明确 RV32 不能访问 xctrctl[63:32];未来扩展才可能添加 sctrctlh。

读这个 CSR 时先看什么

  • - 先确认当前 hart 实现 Smctr/Ssctr;未实现或权限不足的 CSR 访问会触发非法指令异常。
  • - sctrctl 提供对 64 位 mctrctl 子集的 S 模式访问;RV32 只能显式访问低 32 位。
  • - 读取保留、WPRI、WARL 或未实现字段时不要假设固定值,应按官方规范和实现返回值解释。

写入前的风险检查

  • - sctrctl 的 M 和 MTE 位只读 0;不要通过它配置 Machine-mode CTR enable 或 M-mode trap recording。
  • - RV32 不能显式访问 xctrctl[63:32];不要把这些高位配置写成可移植依赖。
  • - 只修改官方定义的目标字段,保留未修改位和 WPRI/保留字段。

放回真实流程里理解

1

确认实现 Smctr/Ssctr,并确定需要记录的控制转移类型。

2

通过 sctrctl 配置 S/U 相关记录、过滤和冻结策略;不要试图通过它访问 M、MTE 或 RV32 不可访问的 xctrctl[63:32]。

3

结合 sctrstatus 和 sctrdepth 读取或维护 CTR buffer。

常见问题

sctrctl 是 AIA 中断 CSR 吗?

不是。它属于 Control Transfer Records(Smctr/Ssctr),用于控制控制转移记录。

RV32 能通过 sctrctl 访问全部 64 位控制字段吗?

不能。Smctr 明确 RV32 不能访问 xctrctl[63:32];当前没有 sctrctlh。