从bit accurate data types看起目前有两类业界标准的bit accurate data types:SystemC和Mentor的Algorithmic C数据类型。其中SystemC数据类型诞生时间早,但有很多问题,比如运行时间太慢等。因此Mentor开发了自己的 Algorithmic C数据类型。它具有运行速度快,综合效果更好而且能保证C仿真结果和RTL仿真结果一致,因此此书以介绍Algorithm C(AC)数据类型为主。本书作者也是Mentor的工程师,对自己的产 品更要夸一夸,详细的数据类型说明可参见: http://www.mentor.com/products/esl/high_level_synthesis/ac_datatypes 整数数据类型 和verilog2001或VHDL相似的有符号、无符号整数类型。 无符号整数: ac_int x; //W=Bit width, 0<=x<=2^W-1 超过表示范围的数据赋给x时,会发生wrap around,类似RTL计数器的行为。 有符号整数 ac_int(W,true> x; //W=Bit width, -2^(W-1)<=x<=2^(W-1)-1 超过表示范围的数据赋给x时,同样会发生wrap around 定点数据类型 与RTL不同,HLS中可直接表示定点数据,这是HLS的优势之一。同样有有符号和无符号定点数据类型。 无符号定点数据 ac_fixed x; //W=Total width, I=Number of Integer bits, 0<=x<=(1-2^(-W))x2^I 有符号定点数据 ac_fixed x; //W=Total width, I=Number of Integer bits, -0.5x2^I<=x<=(0.5-2^-W)x2^I 量化和溢出 AC提供了多种处理量化和溢出的办法。可通过在类型模板中以参数形式配置。 ac_fixed x; //Q和O分别为量化和溢出的处理模式 截断和舍入 缺省的量化处理模式为截断,即直接扔掉LSB后面的数字。也可以选择舍入(AC_RND),即四舍五入的方式。如 ac_fixed<7,7,true,AC_RND) x=0.5; 此时x被赋予了1 饱和和溢出 缺省的溢出的处理是wrap around。即超过最大最小值时,数值自动跳转到数据范围另一端。这种情况一般是我们不愿看到的。这意味着我们应尽量让变量的动态范围在数值所能表示的范围之内。一旦出现溢出,一种处理办法就是饱和操作。即超过数值表示范围时,数值固定在表示范围的最大或最小值。饱和的配置方式为:ac_fixed<7.1.true,AC_TRN,AC_SAT> x; 需要注意的是,不要轻易使用这种配置,这会增加硬件逻辑的面积!使用饱和处理会给系统增加非线性性和噪声。应尽量避免使用这种方式。
文章评论(0条评论)
登录后参与讨论