大家好,这是我与verilog合作的第一周。这里我显示了一个四位加法器的代码。我只是想知道为什么当我模拟测试平台时,我得到了ZXXX0的输出?我做错了吗? :/
module adder(
input a,
input b,
input cin,
output s,
output cout
);
assign s = a ^ b ^ cin;
assign out = (a & b) | (cin & a) | (cin & b);
endmodule
module full_adder(p,q,ci,r);
input [3:0] p,q; // four-bit inputs
input ci; // one-input input carry
output [4:0] r; // five-bit outputs
wire [2:0] carry; // internal carry wires
adder fa0(p[0],q[0],ci,r[0],carry[0]);
adder fa1(p[1],q[1],carry[0],r[1],carry[1]);
adder fa2(p[2],q[2],carry[1],r[2],carry[2]);
adder fa3(p[3],q[3],carry[2],r[3],r[4]);
endmodule
module test_bench();
// Inputs
reg [3:0] p;
reg [3:0] q;
reg ci;
// Outputs
wire [4:0] r;
// Instantiate the Unit Under Test (UUT)
full_adder uut (
.p(p),
.q(q),
.ci(ci),
.r(r)
);
initial begin
// Initialize Inputs
p = 0;
q = 0;
ci = 0;
// Wait 100 ns for global reset to finish
#100;
// Add stimulus here
p=4'b0011;
q=4'b0001;
#100 $finish;
end
endmodule
答案 0 :(得分:2)
您已将某个作业拼写错误:
assign out = (a & b) | (cin & a) | (cin & b);
应该是(cout):
assign cout = (a & b) | (cin & a) | (cin & b);
这具有来自
的r [4]未驱动(z
)的效果
adder fa3(p[3],q[3],carry[2],r[3],r[4]);
并且z被驱动到cin中,当它到达布尔逻辑时变成未知(x
)值:
assign s = a ^ b ^ cin;
EDAplayground上的工作示例。