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

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

[复制链接]
STMCU小助手 发布时间:2022-7-12 22:11
前言7 ~/ c0 t8 U. L, [
本应用笔记介绍了如何使用STM32 Cortex®-M4和STM32 Cortex®-M7微控制器中可用的浮点单元(FPU),并对浮点运算作了简要介绍。
% n7 l$ j# S, Z) j! P$ gX-CUBE-FPUDEMO固件是为改进双精度FPU而开发,并能演示使用此硬件实现所带来的改进。) N4 |3 _, k; b2 B
4节:应用程序示例中给出了两个示例
4 O5 J! s! O; ]5 f7 Z' r6 c$ j) v4 U0 B! N5 V8 V% k( a: C

! d- j) C" B! h$ \$ J8 d1 浮点算法
' q( K, `- _+ T. s7 \/ y3 w浮点数用来表示非整数。它们包含三个字段:5 S7 n! E* _0 s/ g$ ^
符号
% S$ ]4 @# l5 m指数
( d3 t4 n: \& S+ C* n3 c( U小数
; y8 G5 `$ g2 ~/ ~2 a这样的表示可实现非常宽的数字编码范围,使得浮点数成为处理实数的最佳方式。可以使用集成在处理器中的浮点单元(FPU)来加速浮点计算。0 M/ ]. h. J& m: E

% [" c8 U, I# b; q
1.1 定点或浮点
) ]1 W% C0 \( s8 I7 B. F; L8 @可替代浮点的一种方式是定点,其中指数字段是固定的。但是如果要在无FPU的处理器上获得更好的定点计算速度,那么数字范围及其动态范围就会较低。因此,使用定点技术的开发人员必须要仔细检查算法中的缩放/饱和问题。  R: V8 ~; N$ o5 D$ a
) _4 l( ^6 A' _( Z
: N  n; z  H# R  X2 t
X0RS1GJ6A}U2AU9HV6_E.png 2 c# `6 a& K' V
" a' b' ^, G6 ~; _
C语言为浮点运算提供了floatdouble类型。更高层次上,模块化工具,如MATLAB或Scilab,主要使用float或double来生成C代码。不支持浮点意味着会修改所生成的代码,将其改编为定点。所有定点运算都必须由程序员手动编码。
- C( \% y0 q7 ?0 C& u# K! J
1 d1 C  D, B$ s$ o9 T VMRW`]LF@}0IGWV5(97SP9T.png $ O; r  o9 l- G  E6 }

0 x$ {0 K0 W6 y1 U浮点运算直接用于代码中时, 可以减少项目的开发时间。它是实现任何数学算法的最有效方法。
: R9 k. l$ d# Z0 w2 P3 Y2 Y: P8 \3 J# s  ]' j) G# a3 V

3 \( o( g! H# D; D0 y1.2 浮点单元(FPU
. H! G& w( Z5 u) ^: j' h对于两个数字之间的任意操作,浮点计算需要大量资源。例如,我们需要:) {2 `8 J' I4 m' ?, R
对齐这两个数字(使它们具有相同的指数)
- i/ M. k+ }$ K0 s& B- {3 @执行运算
1 g- @5 `5 X3 {$ A+ s( V9 ]; G对结果进行舍入
9 v1 _) T4 p8 K' p$ x  g9 K4 f" q对结果进行编码
! [5 M  C7 j) M/ u. [: D在无FPU的处理器上,所有这些操作都由软件通过C编译器库来完成,程序员不可见;但是其性能非常低。4 D2 a7 S$ g& S. y8 N$ \  [- S5 ]
在有FPU的处理器上,对于大多数指令,所有操作由硬件在一个周期内全部完成。C编译器不使用其自己的浮点库,而是直接生成FPU本机指令。
& ?, l. H6 N) L% z在有FPU的微处理器上执行数学算法时,程序员不必为芯片性能和开发时间上纠结。FPU带来了可靠性,允许直接使用高级工具(例如MATLAB或Scilab)所生成的代码,并具有最高的性能水平。  j: x5 V+ r, [# t. l
' R1 z$ s! p* f) I4 b) A% o& D" o  a
2 浮点运算的IEEE标准(IEEE 754
1 O: [6 P& ~! R: n9 o/ y- a浮点运算的使用自早期以来就一直是计算机科学的需要。30年代末,当Konrad Zuse在德国开发Z系列时,浮点技术就已经存在。但是支持浮点运算的硬件实现复杂,导致其被放弃使用了数十年。
- \$ D/ m+ m) w* Q9 s50年代中期,IBM,利用其704,在大型机中引入了FPU;而到了70年代,多种平台都可支持浮点运算,但是要使用它们自己的编码技术。5 X2 N3 y7 i1 r. X. `
其统一发生在1985年,当时IEEE发布了标准754来定义支持浮点运算的通用方法。  R& P' l# M2 ^) Y

9 i- `& F" o( d: u2 p5 w) j
  y+ D2 a' z$ V4 t& `+ m  z+ P
2.1 概述
* p7 a* M  \$ x多年来各种类型的浮点实现促使IEEE将以下元素进行标准化:6 y) |8 Y! v/ U! Y& e: K: F
数字格式9 `( ~# v* D6 N' F* k8 o  B
算术运算
+ |) z2 E/ m* X3 }3 b数字转换0 T, T/ N9 K+ u( [. g& w& \  A% s
特殊值编码3 N9 i& ^9 E' C- Q& r' A6 x" l3 i
四种舍入模式3 j; A7 l. b/ o
五种异常及其处理
% N6 S5 I8 f& ^2 K* }- j% U* ~. H5 [1 p* {5 O! G" K. T2 N3 k5 @; _
2.2 数字格式
' i$ a) A# F4 @( @. g( H1 |所有值均包含三个字段:
* A6 P4 Y( k! C$ F符号:s 1 k) Y  F' H6 Y$ \7 G. j/ y+ r
偏置指数:* A2 [* d. P4 [
指数和 = e
, _2 I" d% X% y  |$ z常量值 = bias
5 V3 ^% ~/ @0 v分数(或小数):f2 a2 p. @2 x4 X5 a7 N
( A! D  P! L$ i$ u
这些值可以以各种长度进行编码:% z1 e% q, x  M5 v
16位:半精度格式
  I  U! g, L0 g32位:单精度格式0 z' ]1 M% }7 G
64位:双精度格式/ l! }- p, O. e9 Q" F
) O: n, p/ d# v' ^& z9 L
- N) D9 y9 J* g3 J
RA[$%0I}A)R8PK22{75@XDT.png 8 ?' |* E' B8 L( m* M! U. K8 p
" u( x" d! v, V- h: m
IEEE定义了五种不同的数据类型:
' F' x* A, x# K! e8 v归一化数字4 I- v5 \2 g& `+ s0 \4 _, j
非归一化数字. J  m3 r' V5 `3 Z
& Y$ N' |1 ]9 R& Q8 X1 q% F
无穷数, b9 }/ Y" k8 j5 b# X) U6 ~
NaN(非数字)
( ?3 j7 k: E1 g! `不同类别的数字通过这些字段的特定值来识别。
& B* R- d+ O( S# }, a5 m, o$ n3 A1 c7 o$ g" A" |- V
2.2.1 归一化数字
$ h9 D! m# }3 f; a$ ]归一化数字是一个“标准的”浮点数字。其值由上式给出:/ o6 o3 f, P- h+ h

/ ~8 ?: b2 S$ N, K$ N ~XH}Z3XQSM~OXX05D0[S)2G.png ! B6 o/ ]) o0 W- Q8 K2 ]$ u
& U& u, Q% B# B, `2 C' L2 n4 W

" M1 X4 C! `" w* i3 [2.2.2 非归一化数字
  N5 w" ]2 G0 d0 Q) l7 Z: r非归一化数字是用来表示太小而不能进行归一化表示的数据(此时指数等于0)。其值由下% l+ b4 n: V6 n$ _7 J) U: H
式给出:6 H1 }! g: c$ }; Y  d5 |

' W9 g7 p6 {# A9 j' u0 \; L( \ FA~MZ1TZ_W(`B1ZGPG~9D]5.png + O3 t. J( Q# w" Y
* o, z/ M) Q* p' V" A  E+ ~6 E1 {
2.2.3
/ l/ d. S& x) E5 E3 j零值是带符号的,通过正负提示饱和度。
* h+ L! w" D* R, n7 Q1 n5 i+ p
& I- B9 l/ X: F, W. M( _
: Y2 S# u* c( r2 t) b
2.2.4 无穷数" u0 V6 F" }+ L! M
带符号的无穷值用来表示 +∞ 或 -∞。无穷值是因为溢出或者0做为除数的结果。指数设置; ~6 k/ x: T2 Y; B
为其最大值,而小数部分为空。8 A9 h5 l7 `: u  ?1 Q9 J

$ j  n4 Z( c1 c0 |( ?! e. T2.2.5 NaN(非数字)- @; }3 x4 {5 l5 {! u& ~$ x2 e
NaN用来表示运算的未定义结果,例如0/0或负数的平方根。指数置为其最大值,而小数不为空。小数的MSB表示它是否为Quiet NaN(会通过下次操作进行传播)或Signaling Na(会产生一个错误)。  Q0 Z7 Y; _4 G6 Q; B
! n& D* Y; U; I) A& n. Q

8 g. U! X. G% S1 E/ x* ]2.2.6 总结  q3 y" Z: U; N: F( {1 l7 e7 ?& F3 ?

, ?/ p) k) f* k E97]AF47V$HR~%`VX}X8.png
9 y, e6 L2 N9 _/ W# b( @  n7 Y$ L2 I- F. e9 M6 p1 M

( E1 \- _! z* K, w* I, s6 X2.3 舍入模式
2 F' u. f& S9 c+ k: W/ w7 G定义了四种主要的舍入模式:
0 D) D# W- n$ P4 O4 h7 v; O就近舍入5 M4 v$ c. D  t2 }& s
直接向 +∞ 舍入
3 R! ?; B* h9 y& ~3 Y5 I. q3 V直接向 -∞ 舍入
2 ^. K9 G! ^. B: M  X# n直接向0舍入
4 J* ?3 O. T1 F) T就近舍入是默认的舍入模式(最常用)。如果最近的两个值同样接近,则选择LSB等于0的那个。% o; U  r3 {5 S: q% k  q
舍入模式非常重要,因为它可以改变算术运算的结果。可通过FPU配置寄存器来改变它。- l( A# x+ _* S
, ~" T3 P1 t. C( |) G/ K( n

3 o3 |5 i/ t7 A: _, |: K; r! o% W/ C2.4 算术运算, }' I) u. ?- u4 X' a7 y
IEEE.754标准定义了6种算术运算:# F& p& z# V( X" ^( s  d

! Q. |- K5 M) E1 \8 h9 u8 P( `- R; a" ~  q+ _! q, W

) p/ h; o% k) O. y  D+ b7 H: q- C* |/ h. T4 e  u) \
求余, M0 @* T3 e, P4 S& ~
开平方根( ]& L; L9 E6 Z. u7 f- H: `1 O* Z

  _& k! `7 p0 I( l# e. ]; D
2.5 数字转换
1 C  T: ]* g1 P5 `3 z* ?- I, }IEEE标准还定义了一些格式转换操作和比较:
- y" w- O1 Q9 k, w8 P" w浮点和整数转换. n$ u, T" _, S/ P
将浮点值舍入为整数值% v6 S# g( L) J6 W- G: q
二进制到十进制转换' f! y* j  S$ a+ h% ~. }
比较
" H3 X# o2 j3 N2 N% ~8 m
' ]- V4 M* g; T
2.6 异常和异常处理& ^! K3 W' b% x2 l+ V2 Y; L% R
可支持5种异常:) R8 C4 H- ^5 y2 o2 X( {  R, n3 t
无效运算:运算结果为NaN
) |1 K; c: G( F1 I; D$ ~; @) ?除以0
+ i$ q& p0 _' X: j! u/ R0 w上溢出:运算结果为 ±∞ 或 ±Max,取决于舍入模式
+ j" C- G( f, ]8 e1 E/ `下溢出:运算结果为非归一化数字" {1 L5 j0 ]  V3 D" e% w
不精确结果:由舍入导致
/ I# i1 J4 `$ C& l3 k可以通过两种方法来处理异常:5 z, Q  @9 H: e: F8 x! ^
产生一个捕获。捕获处理程序会返回一个代表异常结果的值。
% ?& ^; R6 m" X! d. R: I产生一个中断。中断处理程序并不返回代表异常结果的数值。
7 C1 a& W) S) J' E5 v& C
/ N5 Q2 H! Y3 y; q  W  J6 h% r: L) `
2.7 总结
% k1 I# y% t3 Q6 E  [IEEE.754标准定义了如何编码和处理浮点数。
8 H. T0 u: P* W/ |硬件中的FPU实现可加速IEEE 754浮点计算。因此,它可实现整个IEEE标准或子集。关联软件库管理非加速功能。% j5 `% ~1 X: M; Z0 A/ {- s! O
对于“基本的”使用,浮点处理对用户来说是透明的,就好像在C代码中使用float一样。对于更高级的应用,可以通过捕获或中断来处理异常。
, y' }  x" m( V; Q1 r9 ~* x- s6 ~6 U$ G; {* `' P- j4 A" p
完整版请查看:附件
6 Z- E/ O6 O. d% y. Q" ?

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 手机版