CSR 位字段

RISC-V medelegh CSR 寄存器详解

地址 0x312特权级 Machine 模式访问 读写 / RV32 高半/32 位Machine 委托、环境配置与状态使能 CSR

medelegh(地址 0x312)是 RV32 only 的 medeleg 高半 CSR,别名访问 medeleg[63:32] 的同步异常委托位。

位作用速览
bit 3 = 只有第 3 位;bits 12..11 = 第 12 到第 11 位
高位 MSB低位 LSB
字段映射

按 bit 字段理解 medelegh

1 个关键字段
31:0 (aliases medeleg[63:32])

ED[63:32]

WARL

medeleg 的高 32 个异常委托位。全 64 位 medeleg 为读写寄存器;实现可只支持部分可委托异常,支持位通过写 1 后读回发现。

这个字段控制什么

  • - medeleg 的高 32 个异常委托位。全 64 位 medeleg 为读写寄存器;实现可只支持部分可委托异常,支持位通过写 1 后读回发现。

常见取值

0禁止

对应原因不由该委托位转给 S 模式;若在低于 M 的特权级发生且没有其他委托路径,则进入 M 模式陷阱处理。

1允许

对应原因在 S 模式或 U 模式发生时委托给 S 模式陷阱处理程序;M 模式发生的陷阱不会向下委托。

官方依据与检索要点

medelegh 是 RV32 对 64 位 medeleg 高半的访问窗口。它不改变委托规则本身:只有 S/U 模式发生的可委托同步异常会被送到 S 模式,M 模式陷阱不会向下委托。

medelegh 在 XLEN=32 时别名 medeleg[63:32];XLEN=64 时不存在。
实现可只支持部分可委托异常位,写 1 后读回用于发现。
委托到 S 模式的陷阱写入 S 模式陷阱 CSR;未委托路径进入 M 模式。

读这个 CSR 时先看什么

  • - medelegh 仅在 XLEN=32 时存在;XLEN=64 时不存在。
  • - medeleg/medelegh 在实现 S 模式的 hart 上存在;无 S 模式的 hart 通常不实现这些 CSR。
  • - 可委托异常位由实现子集决定,通过写 1 后读回发现。

写入前的风险检查

  • - 不要假设所有高半异常原因位都可委托;未支持或不可委托位读回为 0。
  • - 委托只作用于 S/U 模式发生的陷阱;M 模式陷阱不会因 medeleg/medelegh 向下委托。

放回真实流程里理解

1

RV32 M 模式软件读取 medelegh,确定 medeleg[63:32] 当前支持的委托位。

2

只设置需要委托且读回支持的异常原因位。

3

用 S/U 模式触发路径验证委托行为;不要用 M 模式陷阱验证向下委托。

常见问题

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

不能只看 CSR 名称判断。官方 CSR 地址编码和表格给出最低访问特权级;medelegh 当前记录为 Machine 模式,权限不足或未实现时访问会触发非法指令异常。

写 medelegh 时最容易忽略什么?

不要把整个 CSR 当普通整数覆盖。应只修改目标字段,保留未修改位,并按规范处理 WARL、WLRL、WPRI 或保留字段。