CSR 位字段

RISC-V fflags CSR 寄存器详解

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

浮点异常标志寄存器,记录FP运算中累积的IEEE-754异常。

字段映射

按 bit 字段理解 fflags

6 个关键字段
XLEN-1:5

Reserved

保留

独立 fflags 访问只提供 fcsr[4:0];其余位为零。

这个字段控制什么

  • - 独立 fflags 访问只提供 fcsr[4:0];其余位为零。

常见取值

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

4

NV

读写

无效操作异常标志。

这个字段控制什么

  • - 无效操作异常标志。

常见取值

00

NV 标志未置位。

11

NV 标志自软件上次复位以来已累积置位;基础 RISC-V ISA 不会因置位而产生陷阱。

3

DZ

读写

除零异常标志。

这个字段控制什么

  • - 除零异常标志。

常见取值

00

DZ 标志未置位。

11

DZ 标志自软件上次复位以来已累积置位;基础 RISC-V ISA 不会因置位而产生陷阱。

2

OF

读写

上溢异常标志。

这个字段控制什么

  • - 上溢异常标志。

常见取值

00

OF 标志未置位。

11

OF 标志自软件上次复位以来已累积置位;基础 RISC-V ISA 不会因置位而产生陷阱。

1

UF

读写

下溢异常标志。

这个字段控制什么

  • - 下溢异常标志。

常见取值

00

UF 标志未置位。

11

UF 标志自软件上次复位以来已累积置位;基础 RISC-V ISA 不会因置位而产生陷阱。

0

NX

读写

不精确异常标志。

这个字段控制什么

  • - 不精确异常标志。

常见取值

00

NX 标志未置位。

11

NX 标志自软件上次复位以来已累积置位;基础 RISC-V ISA 不会因置位而产生陷阱。

官方依据与检索要点

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

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

读这个 CSR 时先看什么

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

写入前的风险检查

  • - FSFLAGS 仅写入 rs1 的低 5 位;用软件写入可复位或设置累积标志。
  • - 浮点指令会累积这些标志;不要把它们解释为自动陷阱控制。

放回真实流程里理解

1

浮点运算后,读取 fflags 以检查自软件上次复位该字段以来累积的异常条件。

2

FRFLAGS 将 fflags 复制到 rd 的低 5 位;FSFLAGS 交换该字段并从 rs1 的低 5 位写入新值。

常见问题

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

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

写 fflags 时最容易忽略什么?

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