CSR 位字段

RISC-V fcsr CSR 寄存器详解

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

浮点控制与状态寄存器,组合了frm(舍入模式)和fflags(异常标志)。

字段映射

按 bit 字段理解 fcsr

8 个关键字段
XLEN-1:8

Reserved

保留

为其他标准扩展保留。若未实现这些扩展,写入必须忽略、读取为零;标准软件应保留这些位。

这个字段控制什么

  • - 为其他标准扩展保留。若未实现这些扩展,写入必须忽略、读取为零;标准软件应保留这些位。

常见取值

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

7:5

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.

4:0

FFLAGS

读写

fflags 的别名:NV、DZ、OF、UF、NX 的累积异常标志。

这个字段控制什么

  • - fflags 的别名:NV、DZ、OF、UF、NX 的累积异常标志。

常见取值

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

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 不会因置位而产生陷阱。

官方依据与检索要点

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

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

读这个 CSR 时先看什么

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

写入前的风险检查

  • - 位 31:8 可由其他标准扩展使用;标准软件应保留它们。未实现该扩展时写入必须忽略、读取为零。
  • - FSRM 和 FSFLAGS 可分别更新 fcsr 的 frm 与 fflags 部分。

放回真实流程里理解

1

FRCSR 将完整 fcsr 复制到 rd;FSCSR 交换 fcsr,并将原值写入 rd。

2

若其他标准扩展未实现,位 31:8 的写入会被忽略、读取为零;标准软件应保留这些位。

常见问题

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

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

写 fcsr 时最容易忽略什么?

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