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

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

[复制链接]
STMCU小助手 发布时间:2022-7-12 22:11
前言; Q1 h) \; O6 t& J
本应用笔记介绍了如何使用STM32 Cortex®-M4和STM32 Cortex®-M7微控制器中可用的浮点单元(FPU),并对浮点运算作了简要介绍。
" V# |* J2 @8 F# @$ @* u" CX-CUBE-FPUDEMO固件是为改进双精度FPU而开发,并能演示使用此硬件实现所带来的改进。; k6 ^% \7 o0 Y5 u. I# \
第 4节:应用程序示例中给出了两个示例
7 v, L' c4 h% J* \0 A8 Y" Z1 W: U/ }5 A* j
7 I5 {( ~. C, h$ n7 q5 y% B
1 浮点算法3 ^/ T" B' ^0 E' S
浮点数用来表示非整数。它们包含三个字段:
$ d" {7 U! Z/ C% n• 符号- b* d( {5 F/ V5 J; m( V
• 指数2 A# P9 d+ M9 P4 G# Z3 w
• 小数: ~8 w5 h4 B8 }& T: W
这样的表示可实现非常宽的数字编码范围,使得浮点数成为处理实数的最佳方式。可以使用集成在处理器中的浮点单元(FPU)来加速浮点计算。
( J/ y6 O5 p5 |- m: w" [; ~5 y( R( O! h  P' [+ F, N9 `+ a! p! i
1.1 定点或浮点) `9 O+ h* h$ R9 q5 c6 Y  Q3 A
可替代浮点的一种方式是定点,其中指数字段是固定的。但是如果要在无FPU的处理器上获得更好的定点计算速度,那么数字范围及其动态范围就会较低。因此,使用定点技术的开发人员必须要仔细检查算法中的缩放/饱和问题。- W! `7 K7 i6 p$ b7 b) B
6 _2 Q9 I1 |$ F. C

" _( x) z$ f5 w2 p1 P% g* C X0RS1GJ6A}U2AU9HV6_E.png % V5 a- ]0 C  h) p

. z4 f) Y, W3 F  Q! O" f% ^C语言为浮点运算提供了float和double类型。更高层次上,模块化工具,如MATLAB或Scilab,主要使用float或double来生成C代码。不支持浮点意味着会修改所生成的代码,将其改编为定点。所有定点运算都必须由程序员手动编码。8 T, v, R9 N8 ^' x6 y& G: e) N

, Z1 n7 A+ e# T, p6 p# X& j VMRW`]LF@}0IGWV5(97SP9T.png 0 _$ e' X. u) L0 P& ?  Y# V% H

$ R% w+ A5 z. L5 ~$ n浮点运算直接用于代码中时, 可以减少项目的开发时间。它是实现任何数学算法的最有效方法。4 ]3 {$ c" W) R9 E5 g/ U) \& o! j$ f

! D5 Q. U  H+ p! f% ?/ ~
/ f( V. c: ]: |+ m9 G2 u% e) G1.2 浮点单元(FPU)
, u( r, y! G' `4 K对于两个数字之间的任意操作,浮点计算需要大量资源。例如,我们需要:8 i) g; |7 ?' _: m
• 对齐这两个数字(使它们具有相同的指数)
7 Z# ~$ \) t& F7 D+ U$ a. ?5 P  a8 o• 执行运算( B2 E0 p4 ]1 R/ B
• 对结果进行舍入# B# Y: k' w4 y) J  O* R2 e
• 对结果进行编码
' a5 Z4 e1 g- r5 d2 K. S在无FPU的处理器上,所有这些操作都由软件通过C编译器库来完成,程序员不可见;但是其性能非常低。
" M- F  o4 U1 l/ k, v在有FPU的处理器上,对于大多数指令,所有操作由硬件在一个周期内全部完成。C编译器不使用其自己的浮点库,而是直接生成FPU本机指令。* |1 l& ~* [6 H' h
在有FPU的微处理器上执行数学算法时,程序员不必为芯片性能和开发时间上纠结。FPU带来了可靠性,允许直接使用高级工具(例如MATLAB或Scilab)所生成的代码,并具有最高的性能水平。3 L/ j1 T$ ^9 r0 T
8 J  G" G; |+ W+ V
2 浮点运算的IEEE标准(IEEE 754)
- b0 K' A% Q' f& ~浮点运算的使用自早期以来就一直是计算机科学的需要。30年代末,当Konrad Zuse在德国开发Z系列时,浮点技术就已经存在。但是支持浮点运算的硬件实现复杂,导致其被放弃使用了数十年。
% Y; v6 U* r" _9 n+ [50年代中期,IBM,利用其704,在大型机中引入了FPU;而到了70年代,多种平台都可支持浮点运算,但是要使用它们自己的编码技术。
5 d1 ]( t  Y, K0 a3 k0 t9 H9 e& v其统一发生在1985年,当时IEEE发布了标准754来定义支持浮点运算的通用方法。$ }. p+ p: M+ L/ j+ N  b9 @! r" H7 o
* w( t, b5 m/ ~. E# q* t& Q1 Z; \2 M
! @0 x  ~: p2 |3 d
2.1 概述
' l4 r$ U7 L6 C多年来各种类型的浮点实现促使IEEE将以下元素进行标准化:' t; s) B! d5 B' q
• 数字格式6 V' x% a9 `8 {/ V
• 算术运算: c% `! `5 v" W2 d
• 数字转换
! [$ A, t' \. B9 D; \! G• 特殊值编码
0 V* h( p7 J# J3 Q* S• 四种舍入模式' V% C/ Q$ B6 m# t( T6 A, }4 E; Q
• 五种异常及其处理6 y/ W9 A1 C' v& ~  R  k/ _) k1 @

! m, d! M7 z6 O, f8 S3 F% ]! h
2.2 数字格式- V2 R! Z7 C% ~
所有值均包含三个字段:$ e: i) N7 t0 M
• 符号:s
* f$ ?; p- l7 c6 E8 ~• 偏置指数:
5 Q+ Z+ A/ H/ c8 q4 l' b& x. a, O– 指数和 = e( }1 K( [' N- S/ m4 C5 L0 c9 C+ O
– 常量值 = bias
! e# F$ D( D6 ~& m/ b- B5 m: V• 分数(或小数):f
: y( K9 p( a0 C, o' ?6 }. L$ m; b% D: n2 _, ?
这些值可以以各种长度进行编码:
  i4 G3 S. z4 w& y* e: P9 p8 V5 I• 16位:半精度格式4 A3 `7 B" i4 ]% ?
• 32位:单精度格式% E( J% s) ~3 [* w' m0 _
• 64位:双精度格式
% ?" B: B; i0 M- R, C. O4 o3 U' L% y* J7 Y8 g; W; Q$ i% z& k( q
, Y4 N) g7 x- t' q  Z% _" b
RA[$%0I}A)R8PK22{75@XDT.png 6 O% w. k- h, U# `  Y, W

( B+ X5 C; X6 j5 P6 Z- \+ d
IEEE定义了五种不同的数据类型:/ D1 E( l5 r) f; p
• 归一化数字
- \, }1 j  g5 p5 H8 ]+ {• 非归一化数字0 S# e1 U, L. n7 S+ w0 t8 F3 R
• 零 5 r' ~& v, `; m+ o6 u1 @3 W6 I
• 无穷数' x* {6 \$ |; Z0 o
• NaN(非数字)
( W2 k9 S1 ]$ q6 I: r) `  R- Y$ O不同类别的数字通过这些字段的特定值来识别。4 b; }- x- G5 @/ I4 r6 y( s0 E

" p) R+ o, \; b
2.2.1 归一化数字
4 C% _) |" B  Q/ L7 x# n  z归一化数字是一个“标准的”浮点数字。其值由上式给出:( N" p+ D, e; \9 t5 b9 t* M+ U

& v0 ^6 m5 H! z# u* R* s7 o' U ~XH}Z3XQSM~OXX05D0[S)2G.png / `) ~6 [3 W3 S2 X5 T

. l2 }% f( J- j% X7 `. K& Y& z8 X/ Z) v$ y# I3 u2 U
2.2.2 非归一化数字9 j0 d( f( ^$ X- H2 T1 j5 u& M
非归一化数字是用来表示太小而不能进行归一化表示的数据(此时指数等于0)。其值由下8 L& E% m# l" f; A/ o2 F& b/ a
式给出:: C; d1 j) @, Y/ L) W; i, c

  h/ w/ M/ q$ E6 a FA~MZ1TZ_W(`B1ZGPG~9D]5.png ! t( l+ R9 d" s

$ z) @) R* ]( M( ^% F2.2.3 零1 |1 V8 X* l5 R' Q+ h& h
零值是带符号的,通过正负提示饱和度。
. b! h. S' p5 P# O& l3 f; S, g& i1 T  F

8 q& n# c7 v  k! N, }8 E" ]5 U; b2.2.4 无穷数  `* ]* A4 ]9 d6 F7 A( K5 `; G  W; @
带符号的无穷值用来表示 +∞ 或 -∞。无穷值是因为溢出或者0做为除数的结果。指数设置1 q! O& F. a4 B# V- ]
为其最大值,而小数部分为空。' D8 E$ [. o6 a: u
- S- b* I1 ]5 m7 E
2.2.5 NaN(非数字)( d+ [. n  S2 s/ w' \
NaN用来表示运算的未定义结果,例如0/0或负数的平方根。指数置为其最大值,而小数不为空。小数的MSB表示它是否为Quiet NaN(会通过下次操作进行传播)或Signaling Na(会产生一个错误)。
% W  M% {& J9 L9 s1 _6 \, o; N- N- R$ e2 _

3 e$ `4 j; L# o  J2.2.6 总结
- B6 b, W: u. _  V' w
4 ^  I- m1 V9 v E97]AF47V$HR~%`VX}X8.png
6 w' \' p: O1 X% o' n( p- c
: e* u' c3 u& g# N( Y9 [. D3 [
8 j6 U6 M: D* @* Z0 R+ e6 R5 Y: p7 w2.3 舍入模式" u! \0 e) i& Q7 {7 p
定义了四种主要的舍入模式:
, V# n, c! C$ S8 h+ l6 N• 就近舍入5 P. B0 |/ m: v( [. _4 `% ]
• 直接向 +∞ 舍入
4 r: I6 P7 e+ E4 E% C• 直接向 -∞ 舍入' X& B. b* }( r3 f) v, M2 G2 {
• 直接向0舍入1 j  z) M9 r' ]5 ?0 [
就近舍入是默认的舍入模式(最常用)。如果最近的两个值同样接近,则选择LSB等于0的那个。, n  z: A4 `- g! U( l* ^
舍入模式非常重要,因为它可以改变算术运算的结果。可通过FPU配置寄存器来改变它。8 k+ F) ~! m9 z: L
6 m/ w' C9 d( V, ^4 n5 z7 }

; w# Z6 y- p' V. p2.4 算术运算0 y" E; G( D; O9 U, b" ?
IEEE.754标准定义了6种算术运算:4 K! O9 m+ x) F0 a  @
• 加
+ x" c2 x& P% d5 b4 R6 F, O• 减 . n7 q$ `% L7 x) b2 X$ w
• 乘
# {& E/ L' A( F+ V/ ^• 除 9 Y* l4 G- O- s% y
• 求余1 U* |" c( F, t1 ^: |& f3 M
• 开平方根( f0 c  @( u# _" w' l( t2 C2 ~

( i" M/ G! G0 N: p% t7 f6 a
2.5 数字转换) Q6 u; W0 S! L6 e
IEEE标准还定义了一些格式转换操作和比较:
8 |2 g2 [# N( l3 V$ }3 U7 a•浮点和整数转换" E- u/ M$ w. O
• 将浮点值舍入为整数值' L$ L4 ]% ?$ G+ Z
• 二进制到十进制转换! X6 i/ S( {8 N$ R' a
• 比较: B. t! f6 t3 o2 ]% M6 w* Y
& q: x+ t- P$ E9 {0 t# P5 U
2.6 异常和异常处理
- {% K9 T/ Q1 s5 w/ z7 k1 c3 v可支持5种异常:
& s, }3 }1 F0 ?" v• 无效运算:运算结果为NaN
! w/ W2 _5 H  X; U4 s* C+ _+ M  B• 除以0
5 P; v1 D+ H7 ]. Q: Y- J( O; a• 上溢出:运算结果为 ±∞ 或 ±Max,取决于舍入模式, i: z7 @- p  a3 C
• 下溢出:运算结果为非归一化数字
, N/ T: \% h3 T; }& T• 不精确结果:由舍入导致+ B: |7 K' J6 L; C( r
可以通过两种方法来处理异常:) |/ u" Z8 c( v- e
• 产生一个捕获。捕获处理程序会返回一个代表异常结果的值。6 I% A4 j1 I4 z- `
• 产生一个中断。中断处理程序并不返回代表异常结果的数值。
6 ?/ O- Y! \, o3 i( }- A# q; I, {2 q9 ]) H
2.7 总结
, Y- y9 ~/ W" k8 O  D. y) U9 B0 qIEEE.754标准定义了如何编码和处理浮点数。, |  S7 F8 n# R/ Z4 h6 S! V
硬件中的FPU实现可加速IEEE 754浮点计算。因此,它可实现整个IEEE标准或子集。关联软件库管理非加速功能。
/ ~% _2 u+ J. F1 c2 D& G对于“基本的”使用,浮点处理对用户来说是透明的,就好像在C代码中使用float一样。对于更高级的应用,可以通过捕获或中断来处理异常。+ e+ e2 R! f: q" I& `
5 A: o1 `  J4 D; z7 l
完整版请查看:附件( Z% }" H9 Q6 l

DM00047230_ZHV2.pdf

下载

779.25 KB, 下载次数: 10

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

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版