学海荡舟手机网
导航

主页 > 电子设备技术 > 电器电路基础 > > 详细内容

SystemC-sc_bit和sc_logic

 

  数字系统中最常见的四个逻辑为:

      ‘0’——逻辑低;
      ‘1’——逻辑高电平;
      ‘Z’——高阻态;
      ‘X’——不定值。

      在Syst中,这四个值用‘0’ 、‘1’ 、‘Z’、 ‘X’或者SC_LOG_0、SC_LOGIC_1、SC_LOGIC_Z和SC_LOGIC_X表示,其中虽然是在sc_logic.h中定义的,也可以用于对sc_bit类型进行赋值。

      sc_bit只有’1’(true)和’0’(false)两种值,这对于仿真那些只有’1’ 和’0’两种逻辑的场合足够用了。sc_logic比sc_bit多’X’和’Z’,实现起来必然更复杂一些,仿真速度也要慢一些。虽然多数情况下可以使用sc_logic代替sc_bit,但是推荐的做法是在能够使用sc_bit的时候尽量不要使用sc_logic。在进行布尔代数操作时sc_bit可与C++的bool类型混合使用。

      sc_bit支持的运算符如下表所示

      表2-5 sc_bit支持的运算符

位操作

& 或 | 异或 ^ 取反 ~
赋值操作 与赋值&=      或赋值|= 异或赋值^= 直接赋值=
逻辑操作 等于== 不等于!=

  下面的操作是合法的:

  1. sc_bit a;  
  2. sc_bit b;  
  3. ……  
  4. a=true;  
  5. b='1' 
  6. a^='1'//等效于a=a^’1’;  
  7. a=~b;  
  8. a^=b;//等效于a=a^b;  
  9. a=a|b;  
  10. bool equal=a==b;//等效于bool equal=(a==b); 


      而下面的操作是非法的:

  1. a~=b;//operator not defined  
  2. sc_logic数据类型比sc_bit多两个值’X’和’Z’,它所支持的运算与sc_bit一样。下面的例子是合法的:  
  3. sc_logic a,b;  
  4. bool c;  
  5. ……  
  6. c=true;  
  7. a=true;  
  8. a='X' 
  9. a=SC_LOGIC_1;  
  10. b='1' 
  11. b=c;  
  12. b^=c;  
  13. b='Z' 
  14. a^='1' 
  15. a=~b;  
  16. a^=b;  
  17. a=a|b;  
  18. bool equal=a==b;  


      同样a~=b也是非法的。


相关文章