CSR 位字段

RISC-V pmpcfg1 CSR 寄存器详解

地址 0x3A1特权级 Machine 模式访问 RV32 Machine 读写;RV64 访问非法 / 仅 RV32:32 位;RV64 访问非法Machine 物理内存保护 CSR

pmpcfg1(0x3A1)是 RV32 的 32 位 Machine PMP 配置 CSR,打包 pmp4cfg-pmp7cfg;RV64 对该奇数编号 CSR 的访问非法。

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

按 bit 字段理解 pmpcfg1

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

RV32 pmpcfg1 把 pmp4cfg-pmp7cfg 打包为四个 8 位 WARL 配置;RV64 的奇数 pmpcfg CSR 非法。

Machine ISA 的 Physical Memory Protection CSRs 小节定义地址、MXLEN packing、M-mode-only 访问与 WARL/RO0 行为。
A 编码为 OFF、TOR、NA4、NAPOT;平台 grain 可使 NA4 不可选。
基础 PMP 与 Smepmp MML=1 对 L/R/W/X 的解释不同,页面字段值必须结合 mseccfg 判断。

读这个 CSR 时先看什么

  • - pmpcfg1 仅存在于 RV32;RV64 使用 pmpcfg2 保存 entries 8-15,访问 pmpcfg1 非法。
  • - PMP 是可选机制;实现可提供 0、16 或 64 个 entries,所有 PMP CSR 字段都是 WARL 并可为只读零。
  • - PMP CSR 仅能由 M 模式访问。

写入前的风险检查

  • - R/W/X 是一个整体 WARL 字段;在基础 PMP(mseccfg.MML=0)中 R=0、W=1 的组合保留,而 Smepmp 在 MML=1 时会整体重新解释 L/R/W/X。
  • - L=1 会锁定 pmpNcfg 和 pmpaddrN 直到 hart reset;若 A=TOR,还会锁定前一 pmpaddr。Smepmp 的 mseccfg.RLB 可绕过锁定规则。
  • - 写 WARL 字段后应读回实际采用的值;不要假定未实现的权限或匹配模式会被接受。

放回真实流程里理解

1

根据 OFF、TOR、NA4 或 NAPOT 选择 A,并在对应 pmpaddrN(TOR 时还包括前一地址寄存器)中编码范围。

2

根据当前 mseccfg.MML 状态解释并写入 L/R/W/X 的整体 WARL 编码。

3

读回 pmpcfg 与 pmpaddr,确认实现采用的 WARL 值;仅在配置最终确定后设置 L。

常见问题

RV64 可以访问 pmpcfg1 吗?

不可以。奇数编号的 pmpcfg CSR 在 RV64 上非法;pmpcfg1 仅在 RV32 上打包 pmp4cfg-pmp7cfg。