1 位信号的 Verilog 按位异或

Verilog bitwise XOR on 1-bit signal

如果在 Verilog 中对 1 位 信号进行按位异或运算会发生什么。

例如:

input A;
wire B;
B = ^A;

如果A是1,那么B会是1吗?还是 X 之类的?

您显示的代码被称为减少异或。请参阅 IEEE Std 1800-2017,第 11.4.9 节 Reduction operators。这些运算符旨在用于超过 1 位的信号,例如,如果 A 是 4 位宽。在您的情况下(1 位),行为没有明确定义。您试图用该代码描述哪种硬件? XOR 用于比较 2 个信号。

module tb;

reg A;
wire B = ^A;

initial begin
    $monitor($time, " A=%b  B=%b", A, B);
    #5 A = 0;
    #5 A = 1;
    #5 A = 0;
    #5 $finish;
end

endmodule

这是我在 2 个不同的模拟器上得到的输出:

               0 A=x  B=x
               5 A=0  B=0
              10 A=1  B=1
              15 A=0  B=0

但是,由于未明确定义此行为,因此您不应依赖这些结果。你应该避免那样写代码。