C54x系列DSP的快速双精度平均算法实现
2012-08-01吴友宇
张 华,刘 伟,吴友宇
(1.武汉理工大学信息工程学院,湖北 武汉 430070;2.中船重工710所,湖北 宜昌 443003)
德州仪器(texas instruments,TI)公司生产的C54x系列数字信号处理器(digital signal processor,DSP)以低价高效的特点得到了电子工程师的喜爱。TI公司也为DSP配套了库函数[1],方便开发人员的调用和移植,但库函数作为通用代码,对其运行效率考虑较少。为了提高程序运算效率,满足实际中1/3OCT分析的实时要求,笔者设计和实现了一种采用C54x系列DSP快速双精度求平均算法。
1 DSP快速求平均的原理
1.1 DSP对快速求平均的硬件支持及相关指令
C54x系列DSP总线宽度为16位(单字),内部有两个40位的累加器,分别称为A和B。两个累加器都支持双精度指令。C54x系列DSP累加器A和B框图[2]如图1所示。

图1 DSP累加器A和B框图
16位DSP累加器装载的临时数据如果数值大于0xFFFFFFFF,就会产生溢出错误;而16位DSP存储器装载的数据如果数值大于0xFFFF,就会产生溢出错误[3]。
以往基于DSP处理器SUBC指令的多字除法算法大多采用若干单字除法组合的方法[4],操作比较繁杂,没有利用SUBC指令支持双精度除法的功能。笔者分两步来实现快速求平均运算:先用累加器保存源数据的累加结果,以作为被除数,再将累加次数作为除数,进行快速双精度除法。该方法在源数据数值不超过双字、累加次数不溢出超过单字且累加和不超过3个字时有效。如果不能同时满足以上3个条件,则要采用多个数据存储区暂存累加结果,或将源数据分别乘以被除数的倒数[5]再进行累加。
1.2 双精度累加运算原理
设有双字数据源 S1,S2,…,Sy(y < 65 536),每个数据分成高字和低字,即S1=S1H×0x10000+S1L,S2=S2H × 0x10000+S2L,…,Sy=SyH ×0x10000+SyL。……
