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
但是,由于未明确定义此行为,因此您不应依赖这些结果。你应该避免那样写代码。
如果在 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
但是,由于未明确定义此行为,因此您不应依赖这些结果。你应该避免那样写代码。