首页 > 解决方案 > Verilog 对 1 位信号按位异或

问题描述

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

例如:

input A;
wire B;
B = ^A;

如果A是1,会B是1吗?或者会是X还是什么?

标签: verilog

解决方案


您显示的代码称为归约 XOR。请参阅 IEEE Std 1800-2017,第 11.4.9 节归约运算符。这些运算符旨在用于超过 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

但是,由于此行为没有明确定义,因此您不应依赖这些结果。您应该避免以这种方式编写代码。


推荐阅读