用定点DSP处理器实现浮点DSP仿真
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用定点DSP处理器实现浮点DSP仿真
设计师在设计DSP时,如果对于设计的应用仅仅要求它具备很少的浮点功能时,则往往陷入了分尴尬的困境,通常的解决办法是勉强采用价格高的浮点DSP设计。然而现在,由于定点处理器可以运行在相当高的时钟速度,因此可以仿真浮点的运算。这时设计师可以牺牲浮点的计算效率来换取较低的成本和较小的功耗。这样的设计,虽然并不能适应真正的浮点应用;但是却给设计师提供了一个难得的机会,使他们能够从尴尬的困境中解脱出来。
在表达固定小数点数字时,小数点位置的确定决定于究竟是准备采用分数运算,还是整数运算。如何选择小数点的位置,将直接影响数值运算是否简单,存储器需求的多寡;也表现为是在数值的动态范围与数值精度之间的一种折衷选择。如果所表达的数值既要求动态范围宽广,又要求数值的精度分精确,最好选择小数点的位置可以根据数值的大小进行移动的表达方式。
浮点数由指数部分和尾数部分组成,既可以表达很大的数值,也可以表达数值很小的数。而浮点数的指数与尾数部分,则可以分别用定点数格式来表示。规格化了的浮点数不包含额外的符号位,也就是说所有的字符位都是有效位。规格化后的数字,对于一定的位数,可以实现最充分的利用。规格化以后还可以简化两个数值的比较运算。对于指数不同的数值,指数大的数,数
值大;对于指数相同的数,才需要比较尾数的大小。绝大多数的
运算程序都假定输入和输出都是规格化的数。
在应用定点DSP进行仿真浮点计算时,究竟是采用完整的IEEE-754格式,还是采用非IEEE兼容的格式,需要根据在计算时首先考虑数值的动态范围,还是首先考虑数值的精度来决定。有
时还需要采用双精度浮点模式才能满足要求。I EEE单精度浮点格式愫?库。可以通过C/C++语言或者汇编语言来调用。这些程序库应用定点逻辑进行浮点的仿真运算。为了简化计算,有时使用修
改后的IEEE-754更方便。这样可能降低运算周期达10倍之多。
应用定点DSP进行浮点计算的算法 Blackfin DSP的寄存器堆包(file)含有16个16-bit寄存器,也可以把它当作8个32-bit 寄存器来使用。有两个计算单元,数据寄存器堆可以存放32-bit 数据。整套的算术计算和逻辑运算指令集都支持仿真浮点计算,
非IEEE格式;也支持可以显著简化计算要求的多重精度的定点表示方法。为了能够充分利用DSP的寄存器堆包资源,仿真浮点计
算程序可以使用双字格式,即用一个16-bit字表示指数,另一个16-bit字表示尾数。两个字都使用带符号位的2的补码表示法。D SP的体系结构,除了可以将16-bit与32-bit寄存器结合使用以外,还包括有可以简化浮点运算算法的特殊指令:SIGNBITS指令,是将数的符号位返还给该数值。实际是直接传给ASHIFT,而ASHIFT则可以移动小数点的位置,将尾数格式化。
可以将一个定点数变化为一个浮点数。变化的方法是:首先通过确定符号位数,再将小数点按照符号位数移动,然后再将尾数格式化。反之,一个浮点数也可以通过移动尾数的小数点位置,来变换成为定点数。小数点移动的位数就是符号位的位数。
可以采用下述方法,实现浮点数的加法:
以两个数中具有较大指数的指数作为和数的指数;向右移动比较小的数的尾数,移动的位数等于两个数的指数的差;将尾数相加,得到和数的分数部分;将和数格式化。
两个用浮点格式表示的数,进行乘法运算时,比进行加法运算更简单。因为不需要将两个数的小数点位对齐。乘法的运算算法如下所述:将两个数的指数相加;将两个数的尾数相乘,即为乘积数的分数部分;将乘积数格式化。
浮点的乘/累加过程则是先依次求两个操作数的积,累计求N 次,再计算其总和。可以首先重复调用浮点乘法程序,再调用加法程序。但是如果使用乘/累加程序函数,则由于省去了内务开销而更有效率。乘/累加算法可以按以下的方式实现:先求第一组两个操作数的乘积,并对此积进行规格化;取第二组操作数,求乘积,再对其进行规格化;将求得的积,和累加的和进行比较,对其中的积,或累加的和进行移位,使小数点对齐;将这个乘积,和累加的和相加,并对求得的结果进行规格化;重复进行第2到第4过程,一直到将全部操作数都进行完毕为止。
双倍精度,定点表示方法对于许多应用场合,16-bit定点数据的精度显得有些不够;而因此就采用浮点仿真运算则又感觉到计算量太大。在这种情况下,如果采用扩展精度的定点仿真运算则能满足系统的要求。使用高速定点DSP可以保证显著地节省所需要进行的处理过程。扩展精度的数值,可以使用31-bit或者32-bit定点格式表示。
对于16-bit的定点DSP处理器,可以很容易地使用软件来进行扩展,以便进行32-bit的算术计算。如果处理器的32-bit寄存器组可以当作两个16-bit的半字来进行访问时,结合起来使用,就可以表示一个32-bit的定点数值。Blackfin处理器的硬件组成可以在单周期内实现32-bit的加法;32-bit的乘法则可以通过执行一个指令来实现,但是需要经过5个时钟周期。当进行多次32-bit乘,再累加求和时;如果使用16-bit数相乘,要求结果的精度达到32-bit,则只需要3个时钟周期。而仅要求达到
31-bit精度时,则只需要2个时钟周期。这个技术对于高档的音响系统特别具有吸引力。因为这些音响系统至少需要24-bit精度。如果使用每一位6db的规则,16bit的记录可以具有96db的动态范围,而24-bit的定点运算则可以将动态范围提高到144 db。
最低有效位半字的乘积对于最后结果的影响不大。事实上,如果将结果截取到1、31,这样,其结果只影响到最低有效位。对于许多应用场合,精度的损失不大,所换来的计算速度的提高却
是很高的。与32-bit乘法相比,可以省去一次16-bit的乘,一次移位,和一次加法运算。
现在的定点DSP处理器由于性能的提高,已经可以在某些应用场合进行仿真的浮点运算,从而达到系统的要求,而不必采用浮点DSP处理器了。设计师可以根据实际的要求,在动态范围与计算精度之间取得合理的平衡,以便决定究竟是选择浮点DSP处理器,还是选择扩展精度的定点处理器。这样设计师可以有更广的空间,来控制掌握DSP处理器的实现方案。■