专题八之二-浮点数的格式以及定点DSP实现_第1页
专题八之二-浮点数的格式以及定点DSP实现_第2页
专题八之二-浮点数的格式以及定点DSP实现_第3页
专题八之二-浮点数的格式以及定点DSP实现_第4页
专题八之二-浮点数的格式以及定点DSP实现_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C5400C5400的浮点数的算术的浮点数的算术运算运算4.6.4小节以及小节以及5.1.5小节小节 浮点数的表示方法浮点数的表示方法u在定点运算中,小数点是在一个特定的在定点运算中,小数点是在一个特定的固定位置。在定点运算系统中,虽然在固定位置。在定点运算系统中,虽然在硬件上实现简单,但是表示的操作数的硬件上实现简单,但是表示的操作数的动态范围要受到限制。使用浮点数,可动态范围要受到限制。使用浮点数,可以避免这个困难。以避免这个困难。u一个浮点数由尾数一个浮点数由尾数m、基数、基数b和指数和指数e三三部分组成。即:部分组成。即:eb*mIEEE标准里的浮点数表示方法标准里的浮点数表示方法u这

2、个格式用带符号的表示方法来表示尾数,指这个格式用带符号的表示方法来表示尾数,指数含有数含有127的偏移。在一个的偏移。在一个32-bit表示的浮点数表示的浮点数中,第一位是符号位,记为中,第一位是符号位,记为S。接下来的。接下来的8-bit表示指数,采用表示指数,采用127的偏移格式(实际是的偏移格式(实际是e-127)。然后的)。然后的23-bit表示尾数的绝对值,考虑表示尾数的绝对值,考虑到最高一位是符号位,它也应归于尾数的范围,到最高一位是符号位,它也应归于尾数的范围,所以尾数一共有所以尾数一共有24-bit。IEEE标准里的浮点数表示方法标准里的浮点数表示方法u比如说:十进制数比如说:

3、十进制数-29.625可以用二进制可以用二进制表示为表示为-11101.101B,用科学计数法表示,用科学计数法表示为为 -1.1101101*24,其指数为,其指数为127+4=131,化为二进制表示为化为二进制表示为10000011B,故此数的,故此数的浮点格式表示为浮点格式表示为11000001111011010000000000000000,转,转换成换成16进制表示为进制表示为0 xC1ED0000。). 1 (*2*) 1(2550127fees为时当浮点数运算的基本步骤浮点数运算的基本步骤u分离符号、指数、尾数。分离符号、指数、尾数。u根据需要对齐指数,按运算法则进行定根据需要对

4、齐指数,按运算法则进行定点数运算。点数运算。u归一化指数归一化指数u按浮点数格式重新组合。按浮点数格式重新组合。u下面以浮点数加为例,详细介绍 一一. 浮点数加法运算的步骤浮点数加法运算的步骤u要在要在C54X上实现浮点运算,操作数必须上实现浮点运算,操作数必须变换成定点数,实际上就是一个数据格式变换成定点数,实际上就是一个数据格式的转换问题。的转换问题。u执行完下面代码后,操作数执行完下面代码后,操作数1就从原来在就从原来在op1_hsw和和op1_lsw(共(共32bit)中的浮点数)中的浮点数格式转换为三部分:指数和符号位(存储格式转换为三部分:指数和符号位(存储于于op1se中)、尾数

5、低位(存储于中)、尾数低位(存储于op1lm中)中)以及尾数高位(存储于以及尾数高位(存储于op1hm中),这时中),这时所有的数值就都转换为定点数的格式了。所有的数值就都转换为定点数的格式了。dldop1_hsw,a ;将将OP1装入累加器装入累加器A中。中。sftaa,8sftaa,-8 ;通过先左移后右移使通过先左移后右移使 AG = 0。bcop1_zero,AEQ;如果如果OP1是零,转入特殊处理。是零,转入特殊处理。stha,-7,op1se;将符号和指数存储到将符号和指数存储到OP1SE中。中。stla,op1lm;存储尾数的低位。存储尾数的低位。and#07Fh,16,a;将浮

6、点数格式中的符号和指数去掉将浮点数格式中的符号和指数去掉 ;得到尾数的高位。得到尾数的高位。add#080h,16,a;给尾数加上小数点前的给尾数加上小数点前的“1”。stha,op1hm;存储尾数的高位。存储尾数的高位。浮点数加法运算浮点数加法运算u由于实行的是带符号位的运算,所以要由于实行的是带符号位的运算,所以要把尾数变成带符号的形式,即如果是正把尾数变成带符号的形式,即如果是正数就不改变其存储格式,而如果是负数,数就不改变其存储格式,而如果是负数,就要用补码来表示尾数,这部分的代码就要用补码来表示尾数,这部分的代码如下:如下:bitfop1se,#100h;取出;取出op1符号位的值于

7、符号位的值于TC位中位中bctestop2,NTC ;如果;如果TC = 0则跳转到则跳转到testop2处处ld#0,a;dsubop1hm,a;0 op1的尾数,得到尾数的补码表示的尾数,得到尾数的补码表示dsta,op1hm;将尾数存入;将尾数存入op1hm和和op1lm中中testop2:bitfop2se,#100h;取出;取出op1符号位的值于符号位的值于TC位中位中bccompexp,NTC;如果;如果TC = 0则跳转到则跳转到compexp处处ld#0,a;dsubop2hm,a;0 op1的尾数,得到尾数的补码表示的尾数,得到尾数的补码表示dsta,op2hm;将尾数存入;

8、将尾数存入op1hm和和op1lm中中浮点数加法运算浮点数加法运算u通过上述过程,把浮点数分解为尾数和通过上述过程,把浮点数分解为尾数和指数两个部分,对于浮点数的加法而言,指数两个部分,对于浮点数的加法而言,计算过程是左移指数较小的操作数的尾计算过程是左移指数较小的操作数的尾数,使得数,使得两个操作数的指数一致两个操作数的指数一致,相差,相差几位移几位,再把尾数相加,几位移几位,再把尾数相加,归一化后归一化后输出输出。u先比较两个操作数指数的大小,以决定先比较两个操作数指数的大小,以决定到底是尾数直接相加还是移位以后再相到底是尾数直接相加还是移位以后再相加,该段过程可以用以下的代码来实现:加,

9、该段过程可以用以下的代码来实现:compexp: ld op1se,a ;将操作数;将操作数1的符号和指数位装入的符号和指数位装入acc A中中 and #00ffh,a;去掉符号位的影响;去掉符号位的影响 ldop2se,b;将操作数;将操作数2的符号和指数位装入的符号和指数位装入acc B中中 and #00ffh,a;去掉符号位的影响;去掉符号位的影响 sub a,b;op2的指数的指数 - op1的指数结果赋给的指数结果赋给acc B bc op1_gt_op2,BLT;跳到进行;跳到进行 op1 op2的操作处的操作处 bc op2_gt_op1,BGT;跳到进行;跳到进行 op2

10、op1的操作处的操作处a_eq_b:;执行;执行A = B的操作的操作 dld op1hm,a;将操作数;将操作数1的尾数(的尾数(32bit)放到)放到acc A中中 dadd op2hm,a;将操作数;将操作数2的尾数与操作数的尾数与操作数1的尾数进行的尾数进行 ;32bit的双精度加法的双精度加法op1_gt_op2: abs b;去掉符号位的影响;去掉符号位的影响 sub #24,b;判断;判断op1_se是否比是否比op2_se大大24 bc return_op1,BGEQ ;如果;如果op1_se远远大于远远大于op2_se则则 ;转入相应的返回;转入相应的返回op1的操作的操作

11、add #23,b;恢复指数的差值;恢复指数的差值 stl b,rltsign;存储指数差值以准备作为;存储指数差值以准备作为RPC使用使用 dld op2hm,a;将;将OP2的尾数(的尾数(32bit)装入)装入acc A中中 rpt rltsign;规范;规范OP2以适应以适应OP1 sfta a,-1 bd normalize;延迟方式执行跳转到;延迟方式执行跳转到normalize 处处 ld op1se,b;将指数值装入;将指数值装入acc B以准备规一化处理以准备规一化处理 dadd op1hm,a;将;将 OP1和和OP2的尾数相加的尾数相加浮点数加法运算浮点数加法运算u完成对

12、操作数之间的计算后就需要对结完成对操作数之间的计算后就需要对结果数进行归一化操作。所谓归一化操作果数进行归一化操作。所谓归一化操作就是把数据格式转换为第一位为符号位,就是把数据格式转换为第一位为符号位,紧接着的一位是非零的数的格式,即是:紧接着的一位是非零的数的格式,即是:S1xxxxxxxxxxxxxx的形式。可以用如下的形式。可以用如下的代码来实现:的代码来实现:normalize: sth a,rltsign;将带符号的尾数高位存入;将带符号的尾数高位存入rltsign单元中单元中 abs a;去掉符号位的影响;去掉符号位的影响 sftl a,6;进行归一化的预处理,将;进行归一化的预处

13、理,将acc中的值中的值 ;左移;左移6位位 exp a;对;对acc A中的值进行规一化操作中的值进行规一化操作 norm a st t,rltexp;存储规一化时左移的数值到;存储规一化时左移的数值到rltexp中中 add #1,b;考虑到进位位所以要给指数加上;考虑到进位位所以要给指数加上“1” sub rltexp,b;完成指数的归一化工作;完成指数的归一化工作浮点数加法运算浮点数加法运算u在这段代码中在这段代码中acc A中的值是由两个中的值是由两个24bit的操作数定点相加而得到的,其的操作数定点相加而得到的,其MSB可可能在能在bit24-bit0中的任何一位,所以首先中的任何

14、一位,所以首先左移左移6位让位让bit24移至移至bit30,接下来通过,接下来通过exp和和norm指令联合使用之后指令联合使用之后acc A中的中的数据变成归一化形式。比如:这两条指数据变成归一化形式。比如:这两条指令执行之前令执行之前acc A中的值为中的值为0 x01800000,执行以后执行以后A中的值为中的值为0 x60000000。浮点数加法运算浮点数加法运算u操作数左移的位数被存于寄存器操作数左移的位数被存于寄存器T中,如中,如上述操作后寄存器上述操作后寄存器T中的值为中的值为0 x0006,所,所以最后的指数的计算还要减去寄存器以最后的指数的计算还要减去寄存器T中中的值才是最

15、后结果的指数值。的值才是最后结果的指数值。u归一化完后要再把归一化后的定点数转归一化完后要再把归一化后的定点数转变为浮点数,这是前面的转变浮点数为变为浮点数,这是前面的转变浮点数为定点数的逆过程,参照前述步骤可以用定点数的逆过程,参照前述步骤可以用如下程序实现:如下程序实现:normalized: stl b,rltexp;将结果指数存在;将结果指数存在rltexp中中 bc underflow,BLEQ;如果;如果B 0 进行下溢处理进行下溢处理 sub #0ffh,b;进行上溢处理判断;进行上溢处理判断 bc overflow,BGEQ;如果;如果B 0 进行上溢处理进行上溢处理 sftl

16、 a,-7;将尾数右移;将尾数右移7位以方便以后合成为位以方便以后合成为32bit ;的浮点数格式;的浮点数格式 stl a,rltlm;存储低位的尾数;存储低位的尾数 and#07f00h,8,a;将最开始中小数点前的;将最开始中小数点前的“1”省略省略 sth a,rlthm;存储高位的尾数;存储高位的尾数;- Conversion of Floating Point Format to Pack - ldrltsign,9,a;将;将rltsign左移左移9位后位后acc A中中 and #100h,16,a;取出;取出rltsign中的符号位,使中的符号位,使acc A中中 ;的格式为

17、;的格式为 ;0000 000S 0000 0000 0000 0000 0000 0000 add rltexp,16,a;将结果的指数存入;将结果的指数存入acc A中满足浮点中满足浮点 ;数格式的相应位置。;数格式的相应位置。A中格式为:中格式为: ;0000 000S EEEE EEEE 0000 0000 0000 0000 sftla,7;A中格式为:中格式为: ;SEEE EEEE E000 0000 0000 0000 0000 0000 dadd rlthm,a;最终在;最终在acc A中得到中得到32位的浮点数格位的浮点数格 ;式如下:;式如下: ;SEEE EEEE EM

18、MM MMMM MMMM MMMM MMMM MMMM二二. 减法的运算减法的运算u减法运算的实现与加法运算几乎完全一减法运算的实现与加法运算几乎完全一样,只是在具体进行运算时使用的是减样,只是在具体进行运算时使用的是减法指令而不是加法指令。法指令而不是加法指令。三三. 浮点乘法的运算步骤浮点乘法的运算步骤u当两个数相乘时,同样要经过分离指数当两个数相乘时,同样要经过分离指数和尾数,进行算术运算,以及最后的归和尾数,进行算术运算,以及最后的归一化存储这几个过程一化存储这几个过程u运算时要遵循乘法运算的规则把指数相运算时要遵循乘法运算的规则把指数相加,尾数相乘。加,尾数相乘。u需要注意的是,由于

19、需要注意的是,由于C54X的乘法器在一的乘法器在一个指令周期内只能完成个指令周期内只能完成17bit*17bit的二的二进制补码运算,故相乘运算需要分步实进制补码运算,故相乘运算需要分步实现。现。乘法运算乘法运算乘法运算乘法运算u进行的这种进行的这种32bit*32bit的运算是有精度的运算是有精度损失的。如上图所示,损失的。如上图所示,32位数位数0QRS乘以乘以32位数位数0XYZ所得的结果应该是一个所得的结果应该是一个64bit的值。由于的值。由于0Q*0X的高的高16bit始终为始终为0,所以结果可以用一个,所以结果可以用一个48位的值准确表位的值准确表示。但是用于存储结果的存储单元长度示。但是用于存储结果的存储单元长度只有只有32bit,于是只有将最低的,于是只有将最低的16bit省略省略掉,即把掉,即把RS*YZ的低的低16bit略去,因此最略去,因此最后得到的是一个有精度损失的后得到的是一个有精度损失的32bit结果。结果。乘法运算乘法运算u由于进行的是带符号的运算,所以在进由于进行的是带符号的运算,所以在进行相乘运算时首先要确定最后结果的符行相乘运算时首先要确定最后结果的符号位。根据号位。根据“同号为正,异号为负同号为正,异号为负”的的原则,可以写出以下代码:原则,可以写出以下代码:Ld op5se,a;装入;装入op5的指数和符号位的指数和符

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论