DSP

定点DSP和浮点DSP差别

2019-07-13 09:47发布

         定点DSP和浮点DSP有很大的差别,宏观的比较就不谈了,比如动态范围、速度、价格等方面,网上大都是介绍这方面的,我在此主要介绍下技术角度的区别,毕竟技术才是最重要的。         部分内容摘自网上,谢谢大家无私分享。
        单纯从技术的角度来看,定点与浮点的区别主要在两个方面,即硬件和软件。         硬件上的区别:定点DSP与浮点DSP在硬件结构上最大的不同之处在于数据存储结构方面。浮点DSP用户不必知道如何存储数据,而应用定点DSP时就需了解数据存储格式,必须对数据格式作一些转换。浮点dsp处理器具有浮点/整数乘法器,整数/浮点算术逻辑运算单元ALU,适合存放扩展精度的浮点结果的寄存器等。         软件上的区别:主要有浮点dsp编程的特点以及注意事项;定点dsp进行浮点运算时的定标,移位,检测溢出操作。比较两个浮点数时,永远不要使用操作符==来判断是否相等。即使比较两个相同的数,还是可能有微小的舍入差别。甚至定义精确的0,也不是很安全,尽管C语言中有0的表示,永远不要写这样的代码(x==0),而应该写成(fabs(x)        对浮点格式而言,实数运算可直接通过代码加入硬件运算中,而定点器件则必须通过软件才能间接执行实数运算,这就增加了算法指令并延长了开发时间。       三个因素影响着浮点格式的内在高精度:
      首先,浮点DSP的24位I/O字长在整数与实数值方面可实现比定点器件中常用的16 位字长更高的精确度。       第二,取幂大幅提高了应用可用的动态范围,较大的动态范围对处理极大数据集以及难以方便预计数据集范围的情况相当重要。       第三,浮点硬件内部的数据表示法比定点器件更为精确,这就保证了最终结果的精确度更高。
      最后一点应稍做解释。在DSP的内部架构中,三种数据字长相当重要,应当考虑。第一是I/O信号字长,正如我们已经说过的那样,其就浮点而言为24位,就定点DSP而言通常为16位。第二就是用于乘法的系数字长。定点系数为16位,与信号数据相同;但浮点系数则可能为24位或53位,这取决于所用的是单宽度精度还是双宽度精度。如果指数表示有意义的零,则精确度实际上会超过上述位数。最后,就是保存乘加器(MAC)运算中间结果的字长,通常称作寄存器文件。对单一16位乘以16位的乘法而言,将需要32位的乘积;而 就单一24位乘以24位的尾数乘法而言,则需48位的乘积(指数有不同的数据路径)。但是,MAC 需要额外的位用于溢出空间(overflow headroom)。在16位定点器件中,溢出空间通常为 8 位,这就使总的中间结果字长为 40 位(16 个信号+16 个系数+8 个溢出)。将相同大小的溢出空间集成到浮点DSP中将需要60个中间结果位(24个信号+24个系数+12个溢出),这将超过大多数应用对精度的要求。但就取幂而言,我们将结果标准化,这样所有24位或53位都有效,溢出位就不必要了。TI的TMS320C67x系列等浮点DSP允许开发人员在双精度内部运算与单精度I/O结合的模式下优化精确度与性能。其结果是得到的精确度比定点或单精度浮点运算提供的精确度高得多,但又不会产生完全双精度 I/O 带来的周期问题。