CSR 位字段

RISC-V frm CSR 寄存器详解

地址 0x002特权级 U模式访问 读写 / 32用户级浮点状态 CSR

浮点动态舍入模式寄存器,指定FP运算使用的舍入模式。

字段映射

按 bit 字段理解 frm

2 个关键字段
XLEN-1:3

Reserved

保留

独立 frm 访问只提供 fcsr[7:5];其余位为零。

这个字段控制什么

  • - 独立 frm 访问只提供 fcsr[7:5];其余位为零。

常见取值

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

2:0

FRM

读写

动态舍入模式。101、110 和 111 是 frm/fcsr 中的保留编码;111(DYN)仅在指令 rm 字段中选择 frm。

这个字段控制什么

  • - 动态舍入模式。101、110 和 111 是 frm/fcsr 中的保留编码;111(DYN)仅在指令 rm 字段中选择 frm。

常见取值

000RNE

Round to Nearest, ties to Even.

001RTZ

Round towards Zero.

010RDN

Round Down (towards negative infinity).

011RUP

Round Up (towards positive infinity).

100RMM

Round to Nearest, ties to Max Magnitude.

101Reserved

Reserved for future use.

110Reserved

Reserved for future use.

111Reserved

Reserved in frm/fcsr; DYN applies only to an instruction rm field.

官方依据与检索要点

frm 是 用户级浮点状态 CSR 中的 读写 CSR,地址为 0x002。先确认当前特权级和扩展实现情况,再根据位字段判断该 CSR 影响的架构状态。

frm 的地址、最低访问特权级和读写属性按官方 CSR 表核对:0x002,U模式,读写。
先按 用户级浮点状态 CSR 理解它影响的架构状态,再看页面中的位字段说明。
写入前只修改目标字段并保留未修改位;WPRI/保留字段应按官方规范和实现返回值解释。

读这个 CSR 时先看什么

  • - 表 73 将该 CSR 列为用户级读写浮点控制与状态 CSR;CSR 地址编码中的 U 表示最低访问特权级。
  • - fflags、frm 和 fcsr 的最低访问特权级均为 U,特权更高的软件也可按 CSR 访问规则使用。

写入前的风险检查

  • - 保留动态编码 101、110、111 不应作为 frm 值使用;依赖它们的浮点指令行为保留。
  • - 修改 frm 可能导致实现对流水线进行串行化。

放回真实流程里理解

1

指令的 rm=111 时,指令选择 frm 中的动态舍入模式;其他静态 rm 编码由指令指定。

2

FRRM 将 frm 复制到 rd 的低 3 位;FSRM 交换该字段并从 rs1 的低 3 位写入新值。

常见问题

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

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

写 frm 时最容易忽略什么?

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