您当前的位置:五五电子网电子知识电子学习基础知识电脑-单片机-自动控制SystemC-sc_bigint和sc_biguint 正文
SystemC-sc_bigint和sc_biguint

SystemC-sc_bigint和sc_biguint

点击数:7126 次   录入时间:03-04 11:56:05   整理:http://www.55dianzi.com   电脑-单片机-自动控制

      在实际设计中,有时候需要宽度大于64的整型数据类型,SystEMC引入了sc_bigint和sc_biguint。sc_bigint和sc_biguint的宽度可以从1到任意值,与sc_int和sc_unit相比其仿真速度要慢的多,因此如果不是必要,就不应该使用sc_bigint和sc_biguint而是尽量使用sc_int和sc_unit。

      由于要考虑任意精度,sc_bigint和sc_biguint仿真速度大大下降。在sc_constants.h中,用户可以根据自己的需要定义SC_MAX_NBITS,以约束sc_bigint和sc_biguint的最大宽度,这样可以提供2~3倍的仿真速度增加,这个常量在默认的情况下是没有定义的,用户可以根据自己的需要进行修改。SystEMC推荐的SC_MAX_NBITS值应该为BITS_PER_DIGIT 的整数倍。BITS_PER_DIGIT在sc_nbdefs.h定义,它的值为30。

      下面的代码将SC_MAX_NBITS定义为17倍的BITS_PER_DIGIT。
 
      #define SC_MAX_NBITS    510    // 17 * BITS_PER_DIGIT
   
      下表列出了sc_bigint和sc_biguint支持的操作类型。

      表2-6 sc_bigint和sc_biguint支持的操作类型

操作类型

操作符 说明 位操作 ~ 按位取反。b=~a是将a的各个位取反后赋给b & 按位与。c=a&b是将a与b按位与的结果赋给c | 按位或。c=a|b是将a与b按位或的结果赋给c ^ 按位异或。c=a^b是将a与b按位异或的结果赋给c >> 右移位 << 左移位 算术操作 + 加 - 减 * 乘 / 整数除 % 取余 关系运算 = = 逻辑等于 != 逻辑不等于 < 小于 <= 小于等于 > 大于 >= 大于等于 赋值操作 = a=b 将b的值赋给a += a+=b等效于a=a+b -= a-=b等效于a=a-b *= a*=b等效于a=a*b /= a/=b等效于a=a/b %= a%=b等效于a=a%b &= a&=b等效于a=a&b |= a|=b等效于a=a|b ^= a^=b等效于a=a^b 串连 (,) (a,b)将a和b串连起来构成更大的数 范围选择 range(left,right) a.range(x,y)选择了a的右数第y+1到第x+1位。Y可以是0 位选择 [x] a[x]选择了a的右数第x+1位 自动增加 ++ a++等效于a=a+1 自动减少 -- a--等效于a=a-1

      下面给出sc_bigint和sc_biguint使用的例子:

      sc_biguint<128> b1;
      sc_biguint<64> b2;
      sc_biguint<152> b3;
      b3 = b1*b2;

      b1*b2运算的结果有192位,只有低152位被赋值给b3。
      sc_bigint和sc_biguint、sc_int和sc_unit、C++固有整型数据可以混合使用。




本文关键字:暂无联系方式电脑-单片机-自动控制电子学习 - 基础知识 - 电脑-单片机-自动控制