CSR 位字段

RISC-V mtinst CSR 寄存器详解

地址 0x34A特权级 M模式访问 读写 / MXLENMachine 状态、trap 与中断 CSR

机器陷阱指令 CSR,由 Hypervisor 扩展加入;陷阱进入 M 模式时写入 0、转换后的陷阱指令、仅用于非标准陷阱指令的自定义值或特殊伪指令。

字段映射

按 bit 字段理解 mtinst

1 个关键字段
MXLEN-1:0

VALUE

读写

完整 mtinst 值。该 CSR 是 WARL,只需能保存实现可能在陷阱时自动写入的值;非零值必须是规范允许的转换指令、仅用于非标准陷阱指令的自定义值或特殊伪指令之一。

这个字段控制什么

  • - 完整 mtinst 值。该 CSR 是 WARL,只需能保存实现可能在陷阱时自动写入的值;非零值必须是规范允许的转换指令、仅用于非标准陷阱指令的自定义值或特殊伪指令之一。

常见取值

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

官方依据与检索要点

mtinst 是 Hypervisor 扩展加入的 MXLEN 位 M 模式读写 CSR,地址 0x34A。陷阱进入 M 模式时,它保存 0 或官方定义的陷阱指令辅助值;该 CSR 是 WARL。

官方 CSR 表列出 mtinst 为 0x34A、MRW,描述为 Machine trap instruction (transformed)。
Hypervisor 扩展加入 mtval2 和 mtinst。
mtinst 是 WARL,只需能保存实现可能自动写入的陷阱值;软件解释非零值前必须验证合法类别。

读这个 CSR 时先看什么

  • - mtinst 由 Hypervisor 扩展加入。
  • - 中断写入 mtinst 的值始终为 0;同步异常的非零值必须属于官方允许的几类值。
  • - 软件遇到无法识别的 mtinst 值时,可以按 0 处理;解释非零值前必须完整验证其编码。

写入前的风险检查

  • - mtinst 是 WARL;软件写入不受支持的值可能被实现规范化为其他合法值。
  • - 不要依赖 mtinst 保存任意指令编码;它只需能保存实现会在陷阱时自动写入的值。

放回真实流程里理解

1

陷阱进入 M 模式后,软件先根据 mcause 判断中断或同步异常类型。

2

若 mtinst 非零,按官方合法值类别验证其编码,而不是直接当作原始指令字。

3

对 guest-page fault,结合 mtval、mtval2 和 mtinst 判断出错虚拟地址、guest physical address 以及是否为 VS 阶段隐式访存。

常见问题

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

不能。官方 CSR 表列出 mtinst 为地址 0x34A 的 MRW CSR,最低访问级为 M 模式。权限不足或访问未实现 CSR 时会触发非法指令异常。

写 mtinst 时最容易忽略什么?

最容易把 mtinst 误当成原始指令副本。官方规则允许 0、转换指令、仅用于非标准陷阱指令的自定义值或特殊伪指令;无法识别的值可按 0 处理。