在C/C 算法设计中使用任意位宽[1]

2008-02-23 05:39:50来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

  研发定点(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)。同样,由于有取整模型的严格位精度定义有先,又由于内置浮点类型的取整将会先被应用,所以对除法这样的操作来说,就很难实现了。

  使用float建模定点行为

  当许多算法都能依赖本地C数据类型的精度来编写时,对支持任意长度的整数及定点算法,大家就会抱有极大的期望,而硬件描述语言(HDL)如VHDL,走的也是同一条路。随着C/C 越来越多地被用于高级合成和验证工具(High-Level Synthesis and Verification tools),也证实了这种语言本质上有一个足以满足当前及未来程式需要的数据类型库。任意长度类型的支持,也可使数据类型的行为有一个统一的定义,而统一的语义则避免了人工实现上的一些限制。

[1] [2]




标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: 在C/C 算法设计中使用任意位宽[2]

下一篇: c研发策略-之-错误处理

热门词条
热门标签