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支持的运算符
位操作 |
与& | 或 | | 异或 ^ | 取反 ~ |
赋值操作 | 与赋值&= | 或赋值|= | 异或赋值^= | 直接赋值= |
逻辑操作 | 等于== | 不等于!= |
下面的操作是合法的:
- sc_bit a;
- sc_bit b;
- ……
- a=true;
- b='1'
- a^='1'//等效于a=a^’1’;
- a=~b;
- a^=b;//等效于a=a^b;
- a=a|b;
- bool equal=a==b;//等效于bool equal=(a==b);
而下面的操作是非法的:
- a~=b;//operator not defined
- sc_logic数据类型比sc_bit多两个值’X’和’Z’,它所支持的运算与sc_bit一样。下面的例子是合法的:
- sc_logic a,b;
- bool c;
- ……
- c=true;
- a=true;
- a='X'
- a=SC_LOGIC_1;
- b='1'
- b=c;
- b^=c;
- b='Z'
- a^='1'
- a=~b;
- a^=b;
- a=a|b;
- bool equal=a==b;
同样a~=b也是非法的。
- 上一篇:SystemC-sc_int和sc_uint
- 下一篇:SystemC专有数据类型