跳转至

浮点单元

本章介绍浮点单元(FPU)。

1. 关于 FPU

带有 FPU 的 Cortex-M7 处理器是带浮点扩展(FPv5)的 ARMv7-M 架构的单精度和双精度变体的实现。

FPv5 扩展的特性包括:

  • 在 FPv4-SP-D16-M 的现有数据处理指令中增加双精度操作数支持。
  • 为双精度和单精度操作数增加一些新指令。
  • 16 个双精度寄存器。这与 FPv4 相同,没有额外的寄存器。
  • 使用 CPACR 对单精度和双精度支持进行软件使能控制。
  • 在同时实现双精度和单精度支持时,两者不能独立使能。
  • 与已包含 64 位数据类型支持的 FPv4 扩展相同的加载/存储指令支持。

下表给出了 Cortex-M7 处理器不同配置所支持的 ISA。

配置 支持的 ISA
无浮点单元的处理器 v7E-M
单精度浮点处理器 v7E-M + FPv5-SP-D16-M
单精度和双精度浮点处理器 v7E-M + FPv5-DP-D16-M

FPU 提供的浮点计算功能符合 ANSI/IEEE Std 754-2008《IEEE 二进制浮点运算标准》,简称 IEEE 754 标准。

2. FPU 功能描述

本节介绍 FPU 支持的操作以及 FPU 产生的异常。

FPU 完全支持单精度和双精度的加、减、乘、除、乘加以及平方根运算。它还提供定点与浮点数据格式之间的转换,以及浮点常量指令。

FPU 提供一个扩展寄存器组,包含 32 个单精度寄存器。这些寄存器可以视为:

  • 十六个 64 位双字寄存器,D0-D15。
  • 三十二个 32 位单字寄存器,S0-S31。
  • 上述两种视图的寄存器组合。

有关 FPU 的更多信息,请参见 Arm®v7-M 架构参考手册。

本节包含以下内容:

  • 工作模式。
  • 与 IEEE 754 标准的一致性。
  • 异常。

工作模式由浮点状态与控制寄存器 FPSCR 控制。有关 FPSCR 的更多信息,请参见 ARMv7-M 架构参考手册。

2.1. 工作模式

FPU 提供三种工作模式以适应各种应用:

  • 完全一致(Full-compliance)模式。
  • 清零(Flush-to-zero)模式。
  • 默认 NaN(Default NaN)模式。

完全一致模式

在完全一致模式下,FPU 在硬件中按照 IEEE 754 标准处理所有操作。

清零模式

置位 FPSCR.FZ 位即使能清零模式。在该模式下,FPU 在运算中将算术操作的所有次正规(subnormal)输入操作数视为零。由零操作数导致的异常会以适当方式发出信号。VABS、VNEG 和 VMOV 不被视为算术操作,不受清零模式影响。如果结果的数值很小,即按 IEEE 754 标准描述、在舍入前目标精度的幅值小于最小正规值,则该结果被替换为零。FPSCR.IDC 位指示何时发生输入清零。FPSCR.UFC 位指示何时发生结果清零。

默认 NaN 模式

置位 FPSCR.DN 位即使能默认 NaN 模式。在该模式下,任何涉及输入 NaN 或产生 NaN 结果的算术数据处理操作都返回默认 NaN。只有 VABS、VNEG 和 VMOV 操作会保持尾数位(fraction bits)的传播。所有其他算术操作都忽略输入 NaN 尾数位中的任何信息。

2.2. 与 IEEE 754 标准的一致性

当默认 NaN(DN)和清零(FZ)模式被禁用时,FPv5 功能在硬件中与 IEEE 754 标准一致,无需支持代码即可实现这种一致性。

有关 FP 架构与 IEEE 754 标准一致性的信息,请参见 Arm®v7-M 架构参考手册。

2.3. 异常

FPU 按照 FPv5 架构的要求,为每条指令在 FPSCR 寄存器中设置累积异常状态标志。FPU 不支持异常陷阱。处理器还具有六个输出引脚 FPIXC、FPUFC、FPOFC、FPDZC、FPIDC 和 FPIOC,每个引脚反映一个累积异常标志的状态。

处理器可以使用惰性堆叠(lazy stacking)来降低异常延迟。这意味着处理器在堆栈上为 FP 状态预留空间,但在需要之前不将该状态信息保存到堆栈。更多信息请参见 Arm®v7-M 架构参考手册。

3. FPU 编程模型

下表给出了实现 FPU 时 Cortex-M7 处理器中的浮点系统寄存器。这些寄存器在 Arm®v7-M 架构参考手册中描述。

地址 名称 类型 复位值 描述
0xE000EF34 FPCCR RW 0xC0000000 上下文控制寄存器
0xE000EF38 FPCAR RW - 上下文地址寄存器
0xE000EF3C FPDSCR RW 0x00000000 默认状态控制寄存器
0xE000EF40 MVFR0 RO 0x10110021ᵃ 媒体与 VFP 特性寄存器 0
0x10110221ᵇ
0xE000EF44 MVFR1 RO 0x11000011ᵃ 媒体与 VFP 特性寄存器 1
0x12000011ᵇ
0xE000EF48 MVFR2 RO 0x00000040 媒体与 VFP 特性寄存器 2

a. 仅单精度 FPU。 b. 单精度和双精度 FPU。