- 相等
==
和!==
称为逻辑等式运算符,其结果由两个操作数的值决定。真值表如下:
== | 0 | 1 | x | z |
---|---|---|---|---|
0 | 1 | 0 | x | x |
1 | 0 | 1 | x | x |
x | x | x | x | x |
z | x | x | x | x |
- 全等
===
和!===
常用于case表达式的判别,所以又称为case等式运算符。它是对操作数进行按位比较,两个操作数必须完全一致,结果才为1。若两个操作数对应位都出现不定值x或高阻值z,则也可认为是相同的。真值表如下:
=== | 0 | 1 | x | z |
---|---|---|---|---|
0 | 1 | 0 | 0 | 0 |
1 | 0 | 1 | 0 | 0 |
x | 0 | 0 | 1 | 0 |
z | 0 | 0 | 0 | 1 |
之所以会引入全等,可能是Verilog的语法比较宽松的缘故,从而用全等去约束不定状态继续向下传播的可能。
具体可以参考如下代码:
module equal_tb;
reg[3:0] a, b, c, d; //reg初始默认值为不定值(x)
initial begin
a = 4'b0xx1;
b = 4'b0xx1;
c = 4'b0011;
d = 2'b11;
$display(a == b); //结果为不定值(x)
$display(a === b); //结果为真(1)
$display(c == d); //结果为真(1)
$display(c === d); //结果为假(0)
end
endmodule