原创 [读书]The High Level Synthesis Blue Book__1

2010-12-3 22:34 1854 12 12 分类: 工程师职场
从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<W,false> 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<W,I,false> x;   //W=Total width, I=Number of Integer bits, 0<=x<=(1-2^(-W))x2^I
    有符号定点数据
  ac_fixed<W,I,true> x;    //W=Total width, I=Number of Integer bits, -0.5x2^I<=x<=(0.5-2^-W)x2^I


量化和溢出
  AC提供了多种处理量化和溢出的办法。可通过在类型模板中以参数形式配置。
  ac_fixed<W,I,S,Q,O> 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; 


  需要注意的是,不要轻易使用这种配置,这会增加硬件逻辑的面积!使用饱和处理会给系统增加非线性性和噪声。应尽量避免使用这种方式。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
12
关闭 站长推荐上一条 /3 下一条