获得" Z和X"在输出处为基本的全加器

时间:2017-11-16 12:00:11

标签: verilog hdl

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

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

以下是Full Adder的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




以上的Testbench:



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




这是波形:

enter image description here

1 个答案:

答案 0 :(得分:0)

你在与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 模块实例化语法