我一直在设计一个带有两个半加法器模块的基本全加器,并尝试使用测试平台进行测试。没有编译错误,但在输出(波形),我得到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

这是波形:
答案 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 模块实例化语法。