运行时间
我们的目的是为了在支持任意长度类型及避免用户碰到前述语义问题的前提下,得到使用内置类型(位宽不超过64位)手工C/C++编码优化过的运行时间。算法C类型是为快速执行及易于合成的语义而设计及实现的,所有操作的位宽由C++编译器静态确定,这就避免了动态内存分配,减少了运行时间,也使得语义更加易于合成。另外,实现也为速度进行了优化,因此可能会调用更多的专用及高效代码,充分利用了当今编译器的优化特性。

表1:规格化为ac_fixed的运行时间比较
表1是当定点算术用算法C定点类型ac_fixed来建模时,各种不同的运行时比较;float的实现在图2中,sc_fixed_fast为SystemC中精度受限的定点数据类型,sc_fixed为任意精度的定点类型。实际中对FIR滤波器进行10^8次调用,TRN/WRAP的运行时间为6.5秒,RND/SAT为29秒。其他类型的运行时间也能从这张表中依次推出,如sc_fixed TRN/WRAP将花费6.5s × 227 = 1476s(将近25分钟)。作为参考,图1中的算法(使用无定点建模的float)花费时间为3.5s(比起使用定点建模的ac_fixed,慢了近两倍)。
上述的运行时间数据,均由GCC 4.1.1测量得来,而在之前版本的GCC或Visual C++ 2005中得到的数据大致接近。
另外,运行时间也能通过整型数据类型或位操作进一步缩短。表2为一个DCT算法的相应结果,它由一个每次读写2位的移位操作得来,与此对比的运行时间为SystemC精度受限的sc_int与任意长度的sc_bigint。

表2:规格化为ac_int的运行时间比较
结论
基于通用标准ANSI C++,这种新的整数与定点算法C类型允许算法及系统设计者指定任意位宽,从而提供比传统数据类型高200倍的仿真效率。这些新数据类型可成为C-to-RTL设计链中非常有价值的一环,及在整个实现流程中保证了任意位宽的精度。 上一页 [1] [2] [3] |