CSR 位字段

RISC-V spmpenh CSR 寄存器详解

地址 0x193特权级 Supervisor 模式访问 Supervisor 读写(WARL,RV32 only) / 仅 RV32:高半/32 位;RV64 不适用Supervisor SPMP CSR

spmpenh(0x193)是 Sspmpen 在 RV32 上定义的 32 位 WARL 高半 CSR,别名访问 spmpen[63:32]。

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

按 bit 字段理解 spmpenh

0 个关键字段
官方依据与检索要点

spmpenh 是 RV32 对 spmpen[63:32] 的别名;它与 spmpen 低半共同构成 64 位 SPMP enable 位图。

Sspmpen v0.9.2 定义 spmpenh 地址 0x193,仅用于 RV32。
每位控制对应高编号 entry 是否参与匹配,但 entry 的 A 字段仍必须非零。
官方 Recommended Programming Guidelines 要求静态配置模型在 RV32 上把上下半更新放入不可中断序列;写后还需要规范指定的 fence 排序。

读这个 CSR 时先看什么

  • - spmpenh 仅在 RV32 且可选 Sspmpen 扩展存在时提供。
  • - 位 i 对应 SPMP entry 32+i;其激活还要求 spmpcfg[32+i].A 非零。
  • - 锁定 entry 的对应位为只读。

写入前的风险检查

  • - 在官方静态配置上下文切换模型中,RV32 使用超过 32 个 SPMP entries 时,spmpen 与 spmpenh 必须在不可中断序列中更新,以保证完整保护。
  • - 写入不与后续内存访问排序;依赖新配置前执行规范要求的 SFENCE.VMA。

放回真实流程里理解

1

先配置 entries 32-63 中目标 entry 的地址、权限与非零 A 字段。

2

静态配置模型切换使用超过 32 个 entries 的任务时,在非抢占临界区内更新 spmpen 与 spmpenh。

3

在后续 S/U 访问前执行所需的 SFENCE.VMA。

常见问题

spmpenh 在 RV64 上存在吗?

不存在。spmpenh 是 RV32-only 的 32 位高半 CSR,别名访问 spmpen[63:32];RV64 直接使用 64 位 spmpen。