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

下载本文档

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

文档简介

C5400的浮点数的算术运算 4 6 4小节以及5 1 5小节 浮点数的表示方法 在定点运算中 小数点是在一个特定的固定位置 在定点运算系统中 虽然在硬件上实现简单 但是表示的操作数的动态范围要受到限制 使用浮点数 可以避免这个困难 一个浮点数由尾数m 基数b和指数e三部分组成 即 IEEE标准里的浮点数表示方法 这个格式用带符号的表示方法来表示尾数 指数含有127的偏移 在一个32 bit表示的浮点数中 第一位是符号位 记为S 接下来的8 bit表示指数 采用127的偏移格式 实际是e 127 然后的23 bit表示尾数的绝对值 考虑到最高一位是符号位 它也应归于尾数的范围 所以尾数一共有24 bit IEEE标准里的浮点数表示方法 比如说 十进制数 29 625可以用二进制表示为 11101 101B 用科学计数法表示为 1 1101101 24 其指数为127 4 131 化为二进制表示为10000011B 故此数的浮点格式表示为11000001111011010000000000000000 转换成16进制表示为0 xC1ED0000 浮点数运算的基本步骤 分离符号 指数 尾数 根据需要对齐指数 按运算法则进行定点数运算 归一化指数按浮点数格式重新组合 下面以浮点数加为例 详细介绍 一 浮点数加法运算的步骤 要在C54X上实现浮点运算 操作数必须变换成定点数 实际上就是一个数据格式的转换问题 执行完下面代码后 操作数1就从原来在op1 hsw和op1 lsw 共32bit 中的浮点数格式转换为三部分 指数和符号位 存储于op1se中 尾数低位 存储于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 将浮点数格式中的符号和指数去掉 得到尾数的高位 add 080h 16 a 给尾数加上小数点前的 1 stha op1hm 存储尾数的高位 浮点数加法运算 由于实行的是带符号位的运算 所以要把尾数变成带符号的形式 即如果是正数就不改变其存储格式 而如果是负数 就要用补码来表示尾数 这部分的代码如下 bitfop1se 100h 取出op1符号位的值于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 将尾数存入op1hm和op1lm中 浮点数加法运算 通过上述过程 把浮点数分解为尾数和指数两个部分 对于浮点数的加法而言 计算过程是左移指数较小的操作数的尾数 使得两个操作数的指数一致 相差几位移几位 再把尾数相加 归一化后输出 先比较两个操作数指数的大小 以决定到底是尾数直接相加还是移位以后再相加 该段过程可以用以下的代码来实现 compexp ldop1se a 将操作数1的符号和指数位装入accA中and 00ffh a 去掉符号位的影响ldop2se b 将操作数2的符号和指数位装入accB中and 00ffh a 去掉符号位的影响suba b op2的指数 op1的指数结果赋给accBbcop1 gt op2 BLT 跳到进行op1 op2的操作处bcop2 gt op1 BGT 跳到进行op2 op1的操作处a eq b 执行A B的操作dldop1hm a 将操作数1的尾数 32bit 放到accA中daddop2hm a 将操作数2的尾数与操作数1的尾数进行 32bit的双精度加法 op1 gt op2 absb 去掉符号位的影响sub 24 b 判断op1 se是否比op2 se大24bcreturn op1 BGEQ 如果op1 se远远大于op2 se则 转入相应的返回op1的操作add 23 b 恢复指数的差值stlb rltsign 存储指数差值以准备作为RPC使用dldop2hm a 将OP2的尾数 32bit 装入accA中rptrltsign 规范OP2以适应OP1sftaa 1bdnormalize 延迟方式执行跳转到normalize处ldop1se b 将指数值装入accB以准备规一化处理daddop1hm a 将OP1和OP2的尾数相加 浮点数加法运算 完成对操作数之间的计算后就需要对结果数进行归一化操作 所谓归一化操作就是把数据格式转换为第一位为符号位 紧接着的一位是非零的数的格式 即是 S1xxxxxxxxxxxxxx的形式 可以用如下的代码来实现 normalize stha rltsign 将带符号的尾数高位存入rltsign单元中absa 去掉符号位的影响sftla 6 进行归一化的预处理 将acc中的值 左移6位expa 对accA中的值进行规一化操作normastt rltexp 存储规一化时左移的数值到rltexp中add 1 b 考虑到进位位所以要给指数加上 1 subrltexp b 完成指数的归一化工作 浮点数加法运算 在这段代码中accA中的值是由两个24bit的操作数定点相加而得到的 其MSB可能在bit24 bit0中的任何一位 所以首先左移6位让bit24移至bit30 接下来通过exp和norm指令联合使用之后accA中的数据变成归一化形式 比如 这两条指令执行之前accA中的值为0 x01800000 执行以后A中的值为0 x60000000 浮点数加法运算 操作数左移的位数被存于寄存器T中 如上述操作后寄存器T中的值为0 x0006 所以最后的指数的计算还要减去寄存器T中的值才是最后结果的指数值 归一化完后要再把归一化后的定点数转变为浮点数 这是前面的转变浮点数为定点数的逆过程 参照前述步骤可以用如下程序实现 normalized stlb rltexp 将结果指数存在rltexp中bcunderflow BLEQ 如果B 0进行下溢处理sub 0ffh b 进行上溢处理判断bcoverflow BGEQ 如果B 0进行上溢处理sftla 7 将尾数右移7位以方便以后合成为32bit 的浮点数格式stla rltlm 存储低位的尾数and 07f00h 8 a 将最开始中小数点前的 1 省略stha rlthm 存储高位的尾数 ConversionofFloatingPointFormattoPack ldrltsign 9 a 将rltsign左移9位后accA中and 100h 16 a 取出rltsign中的符号位 使accA中 的格式为 0000000S000000000000000000000000addrltexp 16 a 将结果的指数存入accA中满足浮点 数格式的相应位置 A中格式为 0000000SEEEEEEEE0000000000000000sftla 7 A中格式为 SEEEEEEEE00000000000000000000000daddrlthm a 最终在accA中得到32位的浮点数格 式如下 SEEEEEEEEMMMMMMMMMMMMMMMMMMMMMMM 二 减法的运算 减法运算的实现与加法运算几乎完全一样 只是在具体进行运算时使用的是减法指令而不是加法指令 三 浮点乘法的运算步骤 当两个数相乘时 同样要经过分离指数和尾数 进行算术运算 以及最后的归一化存储这几个过程运算时要遵循乘法运算的规则把指数相加 尾数相乘 需要注意的是 由于C54X的乘法器在一个指令周期内只能完成17bit 17bit的二进制补码运算 故相乘运算需要分步实现 乘法运算 乘法运算 进行的这种32bit 32bit的运算是有精度损失的 如上图所示 32位数0QRS乘以32位数0XYZ所得的结果应该是一个64bit的值 由于0Q 0X的高16bit始终为0 所以结果可以用一个48位的值准确表示 但是用于存储结果的存储单元长度只有32bit 于是只有将最低的16bit省略掉 即把RS YZ的低16bit略去 因此最后得到的是一个有精度损失的32bit结果 乘法运算 由于进行的是带符号的运算 所以在进行相乘运算时首先要确定最后结果的符号位 根据 同号为正 异号为负 的原则 可以写出以下代码 Ldop5se a 装入op5的指数和符号位xorop6se a 与op6的指数和符号位相异或and 00100h a 屏蔽指数得到符号位stla rltsign 得到结果的符号位 exponentsummation ldop5se aand 00FFh a 去掉符号位的影响ldop6se band 00FFh b 去掉符号位的影响sub 07fh b op6的指数减去127 避免结果加 上两个127偏移 addb a 加上op5的指数stla rltexp 将指数结果存于rltexp中bcunderflow ALT 如果exp255则跳转到下溢 处理overflow处 ldop5lm t 将OP5的低位尾数装入T寄存器

温馨提示

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

评论

0/150

提交评论