这是 SystemVerilog 中的两个程序。
module tb_1;
logic [3:0] a = 4'b1101;
logic [3:0] b = 4'b1011;
initial begin
if (a&b)
$display ("TRUE");
else
$display ("FALSE");
end
endmodule
module tb_2;
logic [3:0] a = 4'b1101;
logic [3:0] b = 4'b1011;
initial begin
if (a&&b)
$display ("TRUE");
else
$display ("FALSE");
end
endmodule
两者之间的唯一区别在于,在第一种情况下使用 &,在第二种情况下使用 &&。两人都跑。它们都给出与 TRUE 相同的结果。
我们如何知道是使用&还是&&?我确信它们的意思不是同一件事。其中一种称为按位与,另一种称为逻辑与。
我期望这会给出不同的结果,因为按位 AND 给出的结果是 1001,其中有零。我不知道逻辑 AND 如何处理多位值(而不是 C 布尔类型)。
a&b
对信号进行按位与,在本例中解析为 4'b1001。由于所有 4 位都有已知值(0 或 1),并且没有 x
或 z
位,因此表达式 if (a&b)
为真。
a&&b
对信号进行逻辑与。由于两个信号的所有 4 位都有已知值(0 或 1),并且没有 x
或 z
位,并且两个 4 位值都不为 0,因此表达式 if (a&&b)
为真。