你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

基于STM32微控制器上的浮点单元的性能演示

[复制链接]
STMCU小助手 发布时间:2022-7-12 22:11
前言
本应用笔记介绍了如何使用STM32 Cortex®-M4和STM32 Cortex®-M7微控制器中可用的浮点单元(FPU),并对浮点运算作了简要介绍。
X-CUBE-FPUDEMO固件是为改进双精度FPU而开发,并能演示使用此硬件实现所带来的改进。
4节:应用程序示例中给出了两个示例


1 浮点算法
浮点数用来表示非整数。它们包含三个字段:
符号
指数
小数
这样的表示可实现非常宽的数字编码范围,使得浮点数成为处理实数的最佳方式。可以使用集成在处理器中的浮点单元(FPU)来加速浮点计算。

1.1 定点或浮点
可替代浮点的一种方式是定点,其中指数字段是固定的。但是如果要在无FPU的处理器上获得更好的定点计算速度,那么数字范围及其动态范围就会较低。因此,使用定点技术的开发人员必须要仔细检查算法中的缩放/饱和问题。


X0RS1GJ6A}U2AU9HV6_E.png

C语言为浮点运算提供了floatdouble类型。更高层次上,模块化工具,如MATLAB或Scilab,主要使用float或double来生成C代码。不支持浮点意味着会修改所生成的代码,将其改编为定点。所有定点运算都必须由程序员手动编码。

VMRW`]LF@}0IGWV5(97SP9T.png

浮点运算直接用于代码中时, 可以减少项目的开发时间。它是实现任何数学算法的最有效方法。


1.2 浮点单元(FPU
对于两个数字之间的任意操作,浮点计算需要大量资源。例如,我们需要:
对齐这两个数字(使它们具有相同的指数)
执行运算
对结果进行舍入
对结果进行编码
在无FPU的处理器上,所有这些操作都由软件通过C编译器库来完成,程序员不可见;但是其性能非常低。
在有FPU的处理器上,对于大多数指令,所有操作由硬件在一个周期内全部完成。C编译器不使用其自己的浮点库,而是直接生成FPU本机指令。
在有FPU的微处理器上执行数学算法时,程序员不必为芯片性能和开发时间上纠结。FPU带来了可靠性,允许直接使用高级工具(例如MATLAB或Scilab)所生成的代码,并具有最高的性能水平。

2 浮点运算的IEEE标准(IEEE 754
浮点运算的使用自早期以来就一直是计算机科学的需要。30年代末,当Konrad Zuse在德国开发Z系列时,浮点技术就已经存在。但是支持浮点运算的硬件实现复杂,导致其被放弃使用了数十年。
50年代中期,IBM,利用其704,在大型机中引入了FPU;而到了70年代,多种平台都可支持浮点运算,但是要使用它们自己的编码技术。
其统一发生在1985年,当时IEEE发布了标准754来定义支持浮点运算的通用方法。


2.1 概述
多年来各种类型的浮点实现促使IEEE将以下元素进行标准化:
数字格式
算术运算
数字转换
特殊值编码
四种舍入模式
五种异常及其处理

2.2 数字格式
所有值均包含三个字段:
符号:s
偏置指数:
指数和 = e
常量值 = bias
分数(或小数):f

这些值可以以各种长度进行编码:
16位:半精度格式
32位:单精度格式
64位:双精度格式


RA[$%0I}A)R8PK22{75@XDT.png

IEEE定义了五种不同的数据类型:
归一化数字
非归一化数字

无穷数
NaN(非数字)
不同类别的数字通过这些字段的特定值来识别。

2.2.1 归一化数字
归一化数字是一个“标准的”浮点数字。其值由上式给出:

~XH}Z3XQSM~OXX05D0[S)2G.png


2.2.2 非归一化数字
非归一化数字是用来表示太小而不能进行归一化表示的数据(此时指数等于0)。其值由下
式给出:

FA~MZ1TZ_W(`B1ZGPG~9D]5.png

2.2.3
零值是带符号的,通过正负提示饱和度。


2.2.4 无穷数
带符号的无穷值用来表示 +∞ 或 -∞。无穷值是因为溢出或者0做为除数的结果。指数设置
为其最大值,而小数部分为空。

2.2.5 NaN(非数字)
NaN用来表示运算的未定义结果,例如0/0或负数的平方根。指数置为其最大值,而小数不为空。小数的MSB表示它是否为Quiet NaN(会通过下次操作进行传播)或Signaling Na(会产生一个错误)。


2.2.6 总结

E97]AF47V$HR~%`VX}X8.png


2.3 舍入模式
定义了四种主要的舍入模式:
就近舍入
直接向 +∞ 舍入
直接向 -∞ 舍入
直接向0舍入
就近舍入是默认的舍入模式(最常用)。如果最近的两个值同样接近,则选择LSB等于0的那个。
舍入模式非常重要,因为它可以改变算术运算的结果。可通过FPU配置寄存器来改变它。


2.4 算术运算
IEEE.754标准定义了6种算术运算:




求余
开平方根

2.5 数字转换
IEEE标准还定义了一些格式转换操作和比较:
浮点和整数转换
将浮点值舍入为整数值
二进制到十进制转换
比较

2.6 异常和异常处理
可支持5种异常:
无效运算:运算结果为NaN
除以0
上溢出:运算结果为 ±∞ 或 ±Max,取决于舍入模式
下溢出:运算结果为非归一化数字
不精确结果:由舍入导致
可以通过两种方法来处理异常:
产生一个捕获。捕获处理程序会返回一个代表异常结果的值。
产生一个中断。中断处理程序并不返回代表异常结果的数值。

2.7 总结
IEEE.754标准定义了如何编码和处理浮点数。
硬件中的FPU实现可加速IEEE 754浮点计算。因此,它可实现整个IEEE标准或子集。关联软件库管理非加速功能。
对于“基本的”使用,浮点处理对用户来说是透明的,就好像在C代码中使用float一样。对于更高级的应用,可以通过捕获或中断来处理异常。

完整版请查看:附件

DM00047230_ZHV2.pdf

下载

779.25 KB, 下载次数: 7

收藏 评论0 发布时间:2022-7-12 22:11

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版