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

Verilog 在基本全加器的输出端获得Z和X,verilog,hdl,Verilog,Hdl,我一直在设计一个带有两个半加器模块的基本全加器,并试图用测试台对其进行测试。没有编译错误,但是在输出端(波形),我得到Z和X作为和和进位。我被卡住了,不确定下一步要看什么来纠正这个错误 任何关于下一步(或一些指针)检查以纠正这一问题的建议都会很有帮助 以下是全加器的Verilog代码: 模半加法器(x,y,S,C); 输入x,y; 输出S,C; xor G1(S,x,y); G2(C,x,y); 端模 模块全加器(x,y,z,S,C); 输入x,y,z; 输出S,C; 导线S1、C1、C2; 半

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

任何关于下一步(或一些指针)检查以纠正这一问题的建议都会很有帮助

以下是全加器的Verilog代码:

模半加法器(x,y,S,C);
输入x,y;
输出S,C;
xor G1(S,x,y);
G2(C,x,y);
端模
模块全加器(x,y,z,S,C);
输入x,y,z;
输出S,C;
导线S1、C1、C2;
半加法器HA1(S1,C1,x,y);
半加法器HA2(S,C2,S1,z);
或G3(C、C1、C2);
端模
上述测试台:

模块tb\U全加器;
钢丝S,C;
注册表x,y,z;
全加器DUT(x,y,z,S,C);
最初的
开始
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;
结束
最初的
#500
$finish;
端模
以下是波形:


连接到半加法器时出错。您需要更改端口信号的顺序。更改:

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

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

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

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

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

您在连接到半加器时出错。您需要更改端口信号的顺序。更改:

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

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

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

half_adder HA1 (.x(x), .y(y), .S(S1), .C(C1));
使用此语法,端口顺序无关紧要。请参阅免费的IEEE标准1800-2012,23.3.2模块实例化语法