SystemVerilog 中条件块中 & 和 && 之间的区别[重复]

问题描述 投票:0回答:1

这是 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 布尔类型)。

if-statement system-verilog
1个回答
0
投票

a&b
对信号进行按位与,在本例中解析为 4'b1001。由于所有 4 位都有已知值(0 或 1),并且没有
x
z
位,因此表达式
if (a&b)
为真。

a&&b
对信号进行逻辑与。由于两个信号的所有 4 位都有已知值(0 或 1),并且没有
x
z
位,并且两个 4 位值都不为 0,因此表达式
if (a&&b)
为真。

© www.soinside.com 2019 - 2024. All rights reserved.