Vic*_*sky 2 verilog system-verilog
在IEEE 1800-2005或更高版本中,&和&&二元运算符有什么区别?它们是等价的吗?
我注意到这些封面定义的行为相同,其中a和b的类型是bit:
cp: coverpoint a & b;cp: coverpoint a && b;Vas*_*liy 10
&&是一个布尔运算符,我们称之为"逻辑AND".这并不意味着它必须对布尔操作数进行操作,但它的返回类型是布尔值.在SV中,布尔表示:
1'b1 \\ true
1'b0 \\ false
1'bx \\ undef
Run Code Online (Sandbox Code Playgroud)
当逻辑AND对单个位操作数进行操作时,结果很明显,但是当它在向量上运行时会出现问题.例如:
logic [1:0] vector;
...
vector = 2'b10;
if (1'b1 && vector) ...
Run Code Online (Sandbox Code Playgroud)
出于此逻辑操作的目的,向量的相等性测试为0.如果是,则将其布尔值定义为"false",否则定义为"true".在上面的例子中,结果是"true".
&是一个按位AND和减少AND运算符.无论是按位执行还是按位缩减都由上下文决定:
logic [1:0] vector1;
logic [1:0] vector2;
logic [1:0] vector3;
...
vector1 = 2'b10;
vector2 = 2'b01;
...
vector3 = vector2 & vector1; // bitwise; vector3 = 2'b00
if ( (&vector1) || (&vector2) ) ... // reduction; the result of each reduction is 1'b0
Run Code Online (Sandbox Code Playgroud)
按位运算符对每对操作数的相应位执行逻辑AND运算.结果是一个向量,其宽度等于操作数的最大宽度.
简化运算符在单个向量的所有位之间执行逻辑AND运算.结果是一位布尔值.
注意:在单个位操作数上执行时,按位和逻辑运算符的结果是相同的.但是,即使其中一个操作数是向量,结果也可能不同.
| 归档时间: |
|
| 查看次数: |
49475 次 |
| 最近记录: |