开发定点(fixed-point)算法时,通常需要在设计功能性、数字精度建模、及验证(仿真)速度之间取得一个平衡。现在,一种新的数据类可使此过程简单化,由此得到更简单精确的建模精度、更好的数字求精、及更快的验证周期,而ANSI C/C++正是开发这种数字求精算法的最佳语言。
某此算法天生就适用于操作整数,或那些理想中的实数(如数字滤波器的系数),它们也可能会使用浮点或定点类型。一般而言,在算法开发的早期阶段,会经常用到C语言的float或double浮点类型,因为它们可提供一个非常大的动态数据范围,且对大多数程序来说都是适用的。见图1:
使用C内置的float类型来建模一个FIR滤波器
算法可进行数字求精,以便使用定点算术来降低最终硬件或软件实现的复杂性。在硬件方面,将整数或定点算术限制为最小位宽,可在本质上满足性能、空间、能耗的需要;如果实现中用到了DSP处理器,那么把算法限制为整数或定点算术,就可为特定程序使用尽可能便宜的处理器。
定点算术的建模可通过C语言内置的浮点或整数类型来完成,这做的话,需要显式编码并受限于C中浮点数及整数可表示的最大数:64位整数或53位尾数;这些都会给操作数的位宽带来更多的限制,例如,2个33位的数相乘,会超过64位C整数可表示的范围。图2演示了一个FIR滤波器的例子,但temp变量限制为15位的定点精度,其中10位用于整数位。在这个实现中,LSB的右部位被舍弃(量化模型的截断),而MSB的左部位也被舍弃(包装的溢出模型),应该意识到,使用float(或double)的模型在精度上是受限的,且不能再次合成(synthesis)。同样,由于有取整模型的严格位精度定义有先,又由于内置浮点类型的取整将会先被应用,所以对除法这样的操作来说,就非常难实现了。
(编辑:aniston)
|