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