DSP

定点DSP与浮点DSP的比较(定点DSP和浮点DSP的定义)

2019-07-13 09:33发布

首先要理解什么是定点运算,浮点运算

你要知道DSP芯片是如何处理小数的
这就涉及的是小数的定标问题
数值的精度与数值的范围就成了一对矛盾了

你要知道:
支持浮点运算的DSP就是浮点DSP芯片,在这种片子上可以自由进行小数运算。
而在定点DSP上是不能直接进行小数运算的,需要先给数值定标,且这个小数点不可移动

因此,定点DSP完成小数运算时,编程稍微复杂一点。速度肯定就不如浮点的片子了





声明:本文章系转载并稍加整理标注,可能对于入门级的dsp开发者有所帮助。本文关注定点dsp与浮点dsp的对比,感谢我所引用的资料的作者。 定点dsp与浮点dsp的比较(1) DSP数字信号处理器是一种特别适合于进行数字信号处理的微处理器,主要用于实时快速地实现各种数字信号处理算法定点运算DSP数字信号处理器在应用中已取得了极大的成功,而且仍然是DSP应用的主体。然而,随着对DSP处理速度与精度、存储器容量、编程的灵活性和方便性要求的不断提高、自80年代中后期以来,各DSP生产厂家陆续推出了各自的32bit浮点运算DSP。   定点DSP指令集 定点DSP指令集是按两个目标来设计的: ·使处理器能够在每个指令周期内完成多个操作,从而提高每个指令周期的计算效率。 ·将存贮DSP程序的存储器空间减到最小(由于存储器对整个系统的成本影响甚大,该问题在对成本敏感的DSP应用中尤为重要)。   和定点运算DSP相比,浮点运算DSP具有许多优越性:   浮点运算DSP比定点运算DSP的动态范围要大很多。定点DSP的字长每增加1bit,动态范围扩大6dB16bit字长的动态范围为96dB。程序员必须时刻关注溢出的发生。例如,在作图像处理时,图像作旋转、移动等,就很容易产生溢出。这时,要么不断地移位定标,要么作截尾。前者要耗费大量的程序空间和执行时间,后者则很快带来图像质量的劣化。总之,是使整个系统的性能下降。在处理低信噪比信号的场合,例如进行语音识别、雷达和声纳信号处理时,也会发生类似的问题。32bit浮点运算DSP的动态范围可以作到1536dB,这不仅大大扩大了动态范围,提高了运算精度,还大大节省了运算时间和存储空间,因为大大减少了定标,移位和溢出检查。   由于浮点DSP的浮点运算用硬件来实现,可以在单周期内完成,因而其处理速度大大高于定点DSP。这一优点在实现高精度复杂算法时尤为突出,为复杂算法的实时处理提供了保证。   32bit浮点DSP的总线宽度较定点DSP宽得多,因而寻址空间也要大得多。这一方面为大型复杂算法提供了可能、因为省的DSP目标子程序已使用到几十MB存储器或更多;另一方面也为高级语言编译器、DSP操作系统等高级工具软件的应用提供了条件。 DSP的进一步发展,必然是多处理器的应用。新型的浮点DSP已开始在通信口的设置和强化、资源共享等方面有所响应。 =============================================================================== 定点dsp与浮点dsp的比较(2)   一般来说,定点dsp处理器具有速度快,功耗低,价格便宜的特点;而浮点dsp处理器则计算精确,动态范围大,速度快,易于编程,功耗大,价格高。 1、宏观上的区别          从宏观上讲,浮点dsp比定点dsp的动态范围大得多。定点运算中,程序员必须时刻关注溢出的发生,为了防止溢出,要么不断进行移位定标,要么做截尾。前者耗费大量时间和空间,后者则带来精度的损失。相反,浮点运算dsp扩大了动态范围,提高了精度,节省了运算时间和存储空间,因为大大减少了定标,移位和溢出检查。 举个例子(来自http://blog.sina.com.cn/s/blog_518dfe5b0100e17w.html)       定点的计算不过是把一个数据当作整数来处理,通常AD采样来的都是整数,这个数相对于真实的模拟信号有一个刻度因子,大家都知道用一个16位的AD去采样一个0到5V的信号,那么AD输出的整数除以2^16再乘以5V就是对应的电压。在定点DSP中是直接对这个16位的采样进行处理,并不将它转换成以小数表示的电压,因为定点DSP无法以足够的精度表示一个小数,它只能对整数进行计算。
      而浮点DSP的优势在于它可以把这个采样得到的整数转换成小数表示的电压,并不损失精度(这个小数用科学记数法来表示),原因在于科学记数法可以表示很大的动态范围的一个信号,以IEEE754浮点数为例,单精度浮点格式: [31] 1位符号 [30-23]8位指数 [22-00]23位小数,这样的能表示的最小的数是+-2^-149,最大的数是+-2-2^23)*2^127.(这里不去研究这个最小最大范围是如何计算出来的)动态范围为20*log(最大的数/最小的数)=1667.6dB 这样大的动态范围使得我们在编程的时候几乎不必考虑乘法和累加的溢出,而如果使用定点处理器编程,对计算结果进行舍入和移位则是家常便饭,这在一定程度上会损失是精度。原因在于定点处理处理的信号的动态范围有限,比如16位定点DSP,可以表示整数范围为1-65536,其动态范围为20*log(65536/1)=96dB.对于32定点DSP,动态范围为20*log(2^32/1)=192dB,远小于32位ieee浮点数的1667.6dB,但是,实际上192dB对绝大多数应用所处理的信号已经足够了。
      由于AD转换器的位数限制,一般输入信号的动态范围都比较小,但在DSP的信号处理中,由于点积运算会使中间节点信号的动态范围增加,所以主要考虑信号处理流程中中间结果的动态范围,以及算法对中间结果的精度要求,来选择相应的DSP。 2、硬件上          暂时抛开这些宏观的特点对比,单纯从技术的角度来看,定点与浮点的区别主要在两个方面,即硬件和软件。硬件上的区别来自于:浮点dsp处理器具有浮点/整数乘法器,整数/浮点算术逻辑运算单元ALU,适合存放扩展精度的浮点结果的寄存器等。 3、软件上          再看看在软件开发上的不同之处,主要有浮点dsp编程的特点以及注意事项;定点dsp进行浮点运算时的定标,移位,检测溢出操作。比较两个浮点数时,永远不要使用操作符==来判断是否相等。即使比较两个相同的数,还是可能有微小的舍入差别。甚至定义精确的0,也不是很安全,尽管C语言中有0的表示,永远不要写这样的代码(x==0),而应该写成(fabsx),其中TINY定义为一个很小的值,也就是处理器的浮点格式舍入误差。(待续~~ 4、应用例子(来自http://www.embedcity.com/article.php?id=235    另外一个比较重要区别涉及应用场合对定点与浮点dsp处理器的选择。设计师关心的是最后的系统性能、成本以及上市时间。 (1)移动电视   这是另一个易于决定的选择。在移动电视中完全没有必要进行浮点处理。大部分的信号链处理是在标准解码器中进行的,如MPEG-2,MPEG-4, JPEG-2000和H.264。这些算法被设计由定点运算来执行。更高精度和更大动态范围的浮点运算不仅毫无帮助,而且根本无法使用,因为这些算法通常都只精确到比特。   例如,在视频编解码器中使用的频域的变换实际上是某种形式的DCT变换(离散余弦变换)。表面上,似乎浮点运算更适合于DCT计算,就像适合FFT计算一样。浮点运算确实会产生更加精确的DCT。不幸的是,视频编解码器中的DCT是被设计在定点处理器上完成的,并且只精确到比特,因此在这里追求更高的精度是完全错误的。   更何况,视频编解码器的大部分工作量都用于控制代码,那里同样也不需要浮点编码。比如,视频编解码器中使用的熵编码器占了整个工作量的很大一部分(在H.264算法中使用的CABAC编码器更是如此)。   这里所考虑的两种处理器,能根据下列事实较清楚地做出正确的选择,即Blackfin处理器拥有特别设计的加速视频算法性能的指令。相反,SHARC处理器没有特殊的视频指令。此外,功耗对于移动市场来说是至关重要的,这几乎就将浮点处理器排除在外了。这些使选择变得轻而易举。   而其余的应用实例将需要我们进行更加深入的分析,才能做出正确的处理器选择。 (2)军用雷达   我们最好从容易的选择开始。在军用雷达中你会经常用到浮点处理器。为什么?因为在这种应用中浮点性能是不可缺少的。雷达依靠的就是测定自模糊函数的最大绝对值。该函数表达的是发出的测试信号和接收的回波之间的互相关性。   这是一个指数函数的积分。这种积分能用FFT技术计算。在计算大型FFT时,浮点运算十分有用,而且在这里采用浮点处理器没有任何障碍。只要热量能排出(即处理器不发烫),功率不是大问题。该装置的成本也不是主要问题,因为这些处理器成本仅占整个系统成本的很小部分。事实上,一般不大会选择ADSP-21367SHARC来完成这样的任务,因为该应用的一个目标是在每平方毫米中尽可能提供更多的处理能力。因此,ADI公司的TigerSHARC系列产品中的高性能ADSP-TS201会更适合这个应用。       希望以上对于定点dsp和浮点dsp的对比能使初学者建立起一个全局的感性认识 =============================================================================== TI科学家谈浮点DSP未来发展 自十多年前浮点数字信号处理器(DSP)诞生以来,便为实时信号处理提供了算术上更为先进的备选方案。不过,定点器件至今仍是业界的主流--当然低成本是主要原因。定点DSP每器件产品的价格很低,这对大规模大众市场应用而言是相当重要的优势。相比较而言,浮点DSP能够实现更快速而简便的开发,因此对开发成本比单位制造成本重要的小规模应用而言,更是最佳的选择。 最近几年,高密度集成与支持改善使两种DSP在使用方便性与成本上都较为接近。目前,器件类型的选择越来越取决于应用数据集是否要求浮点格式的更多计算功能。因此,设计大规模量产信号处理应用的开发人员现在开始发现浮点格式更多的内在价值。他们将视 线投向传统定点DSP开发模式之外的领域,并探索浮点 DSP 所带来的设计机遇。 不同的数字格式定点与浮点DSP的基本差异在于它们各自对数据的数字表示法不同。定点硬件严格执行整数运算,而浮点 DSP 既支持整数运算又支持实数运算,后者以科学计数法进行了标准化。字长为 16 位的定点 DSP 实现 (rovide) 64K 的精度,带符号整数值范围为 -215 至215-1。与此相对比,浮点DSP将数据路径分为两部分:一是可用作整数值或实数基数的尾数,二是指数。在支持业界标准单一精确运算的32位浮点DSP中,尾数为24位,指数为8位。由于其较长的字长与取幂范围,该器件支持 16M 的精度范围,这样的动态范围大大高于定点格式可提供的精确度。实施业界标准双精度(64 位,包括一个 53 位的尾数与 11 位的指数)的器件还可实现更高的精确度。   成本与方便易用性: 浮点 DSP 提供的计算能力更高,这也是其区别于定点 DSP 功能的最大差异所在。但在浮点 DSP 刚刚出现的20世纪90年代初期,其它因素往往掩盖了基本的数学计算问题。浮点功能需要的内部电路多,而 32位数据路径比当时可用的定点器件要宽一倍。晶片面积越大,引脚数量就越多,封装也越大,这就大大提高了新款浮点器件的成本,因此数字化语音与电信集成卡(concentration card)等高产量应用仍更倾向于采用较低成本的定点器件。当时,方便易用性抵消了成本问题带来的不利影响。 浮点器件是最早支持 C 语言的 DSP 之一,而定点 DSP则仍须在汇编代码级上进 行编程。此外,对浮点格式而言,实数运算可直接通过代码加入硬件运算中,而定点器件则必须通过软件才能间接执行实数运算,这就增加了算法指令并延长了开发时间。由于浮点 DSP 易于编程,因此其最初主要用于开发工作强度较大的情况,如研究、原型开发、影像识别、工作站的三维图像加速器以及雷达等军用系统。   逐渐趋同: 目前,早先的成本与易用性间的差异已经不那么明显了。总体说来,定点DSP仍然在成本上有优势,而浮点 DSP 仍然在易用性上有优势,但差别已经缩小很多,因此上述因素已经不再起决定作用了。成本日益成为片上系统(SoC)集成与产量的问题,而不是DSP内核本身大小的问题。在十年前还只能放置单个晶体管的空间,目前可放置数十个晶体管。目前,占据晶片面积最多的是存储器,而不是逻辑,而且许多基于DSP的产品都充分利用再扩展(rescaling)的优势,针对具体市场的需求集成了不只一个内核。定点DSP的成本仍然较低,因为其针对大众市场应用的产量很高;但是,如果大规模量产的需求出现,那么浮点器件也将受益于规模效益带来的同样的成本降低。早期在易用性方面的差异也已经减小。高效的C编译程序与工具早已能支持定点DSP,为代码执行带来了可视性。直接采用浮点硬件实施实数运算仍有优势;但目前先进的建模工具、完整的数学函数库以及现成的算法降低了为定点器件开发复杂应用的难度。   浮点的精确度: 目前,选用定点DSP还是浮点DSP归根结底在于应用数据集是否需要浮点算术功能。总体说来,设计人员应解决两个问题:数据集要求多高的精确度?数据集的可预见度有多大?   三个因素影响着浮点格式的内在高精度: 首先,浮点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 带来的周期问题。   视频与音频数据集要求 将视频与音频应用的数据集要求加以对比,就很容易看出使用浮点格式的优势。视频的采样率很高,其像素数据采样率相当于每秒数十乃至数百个兆位 (Mbps),具体的值决于应用。像素数据通常以 8 至 12 位的短字表示,每一位代表影像的红、绿、蓝(RGB)位面。业界标准的MPEG视频压缩算法的关键数学运算包括离散余弦变换(DCT)与量化,且过滤有限。DCT与量化采用整数运算就能有效处理,它与短数据字相结合使得视频成为定点DSP很自然的应用,特别对那些设计有大量并行数据路径与片上视频接口的情况更是如此。 另一方面,音频的数据流更为有限,对 24 位采样且每秒 48 千个采样 (ksps) 的速度而言,约为1Mbps的速度。新兴的采样率为192ksps,为该数据速率的四倍,但其数据流仍然大大低于视频流。不过音频数据的处理必须比视频精确得多。眼睛很容易就被欺骗,特别当影像运动时更是如此;但耳朵就很难欺骗了。因此音频需要浮点硬件提供的更大的字长。 使用完全24位浮点I/O精度来进行声音采样,这就得到144dB的动态范围,大大超出了声音复制所需的全振幅范围。此外,音频还要求宽系数与中间结果提供的精确度,其原因有二。首先,音频应用通常使用串联无限脉冲响应滤波器(IIR)以实现最低时延与最高性能。但串联过滤每一级都会传播上一级的错误。信号与系数字长越长,精确度越高,上述传播错误的影响就越小。第二,在接近于零时必须保持信号精确度,以避免人耳可以分辨的谐波失真。浮点格式从本质上说与人耳的敏感度配合得很好,因为它在分数趋近于零时会变得更精确。相反,定点系统在分数极小的情况下会取近似值等于零,这就降低了精确度。所有上述浮点实数算法方面都对真实复制音频信号至关重要。尽管过去常用定点器件实现高保真音频,但目前则转向采用精确度更高的浮点格式。某些浮点DSP集成了多通道音频串行端口(McASP),从而简化了音频系统的设计,这就为上述发展趋势提供了支持。随着最新型音频创新在消费类电子产品中的日益普及,对浮点DSP的需求也将上升,这也有助于让其成本更接近于定点 DSP。   其他数据集 其它类型应用的数据集也可受益于浮点的精确度。在医疗影像识别中,更高的精确度能够支持许多层次的信号输入,包括光、X射线、超声波与其它来源的输入等,它们都必须进行定义与处理,以生成提供有用诊断信息的输出影像。动态范围较大对雷达至关重要,这种情况下,系统应能够在从零到无穷大的范围内进行跟踪,而只用整个范围的一个较小的子集进行目标捕获与识别。动态范围较大也有助于让机器人处理不可预见的情况,如在机器人正常有限的运动范围中遇到的障碍等。与上述应用形成对比的是,定点器件为巨大的通信市场提供更好的服务,因为大多数通信数据都是以八位字节串行传输,随后进行内部扩展以根据整数运算进行 16 位处理。 近年来,随着数字信号处理领域不断发展,DSP也由应用推动发展。SoC集成意味着更多的存储器和不同的内核与专用外设一起均能集成到同一器件上,这就使DSP产品能够按特定市场的需求进行定制。在此环境中,浮点功能已成为整体 DSP 产品组合中的另一要素。 定点DSP与浮点 DSP之间在成本与易用性方面仍有某些差异,但随着时间的推移,上述差异已经不大。对设计人员最具重要性的特性在于浮点格式具有更高的算术灵活性与精确度。对高保真音频以及需要实数运算、更高精确度与较大动态范围的其它数据集应用而言,浮点 DSP 是最佳的解决方案。