在基本全加器的输出端获取 Z 和 X

Getting Z and X at output for a basic Full Adder

我一直在设计一个带有两个半加器模块的基本全加器,并尝试用测试台对其进行测试。没有编译错误,但在输出(波形)中,我得到 Z 和 X 用于 Sum 和 Carry。我被卡住了,不确定接下来要看什么来纠正这个错误。

关于要检查哪些后续步骤(或一些指示)以纠正此问题的任何建议都会有所帮助。

这里是全加器的 Verilog 代码:

module half_adder(x,y,S,C);
input x,y;
output S,C;

xor G1(S,x,y);
and G2(C,x,y);

endmodule

module full_adder(x,y,z,S,C);
input x,y,z;
output S,C;
wire S1,C1,C2;

half_adder HA1(S1,C1,x,y);
half_adder HA2(S,C2,S1,z);
or G3(C,C1,C2);

endmodule

上面的测试台:

module tb_fulladder;
wire S,C;
reg x,y,z;

full_adder DUT(x,y,z,S,C);

initial
begin
x=1'b0;y=1'b0;z=1'b0;
#50
x=1'b0;y=1'b0;z=1'b1;
#50
x=1'b0;y=1'b1;z=1'b0;
#50
x=1'b0;y=1'b1;z=1'b1;
#50
x=1'b1;y=1'b0;z=1'b0;
#50
x=1'b1;y=1'b0;z=1'b1;
#50
x=1'b1;y=1'b1;z=1'b0;
#50
x=1'b1;y=1'b1;z=1'b1;
end

initial
#500
$finish;

endmodule

波形如下:

您与 half_adder 的联系有误。您需要更改端口信号的顺序。变化:

half_adder HA1(S1,C1,x,y);
half_adder HA2(S,C2,S1,z);

至:

half_adder HA1 (x,y,S1,C1);
half_adder HA2 (S1,z,S,C2);

我通过查看内部全加器和半加器信号的波形发现了这一点。

这就是为什么最好使用按名称连接而不是按位置连接的原因。例如,使用:

half_adder HA1 (.x(x), .y(y), .S(S1), .C(C1));

使用此语法,端口顺序无关紧要。请参阅免费的 IEEE Std 1800-2012, 23.3.2 模块实例化语法.