<b>在C/C++算法计划中利用肆意位宽</b>[VC/C++编程]
本文“<b>在C/C++算法计划中利用肆意位宽</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
开辟定点(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),也证明了这种语言本质上有一个足以满意当前及将来程序需求的数据范例库.肆意长度范例的支持,也可以使数据范例的行为有一个统一的定义,而统一的语义则避免了人工实现上的一些限制.
算法C数据范例
算法C数据范例是一种基于类的C++库,其实现了肆意长度的整数及定点范例,而这些可安闲拜候的范例有一系列好处,包含统一及杰出定义的语义,还有媲美C/C++内置数据范例的运行时速度,比较SystemC中呼应的范例,其运行速度也超越10倍以上.这些数据范例能用于任何符合C++或SystemC标准尺度的程序中,并拥有高度可合成的语义.
语义
语义的统一性与一致性是避免在算法中,发生功效性错误的关键,以下的例子,也阐明了这点:
以上是“<b>在C/C++算法计划中利用肆意位宽</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |