Verilog 测试台输出是 16 位进位加法器上的 x 和 z

Verilog testbench outputs are x and z on a 16-bit carry adder

我一直在尝试重现一个 16 位加法器,但我似乎无法在我的测试台上得到任何结果。有线索吗?

module adder(a,b,c,s,cout);
input a,b,c;
output s,cout;
xor #1
g1(w1,a,b),
g2(s,w1,c);
and #1
g3(w2,c,b),
g4(w3,c,a),
g5(w4,a,b);
or #1
g6(cout,w2,w3,w4);
endmodule


module sixteenbitAdder(x,y,s,cout,cin);
input [15:0] x,y;
output [15:0] s;
input cin;
output cout;
wire [15:0] c;
 adder f0 (x[0],y[0],cin,s[0],c[0]);
 adder f1 (x[1],y[1],c[0],s[0],c[1]);
 adder f2 (x[2],y[2],c[1],s[2],c[2]);
 adder f3 (x[3],y[3],c[2],s[3],c[3]);
 adder f4 (x[4],y[4],c[3],s[4],c[4]);
 adder f5 (x[5],y[5],c[4],s[5],c[5]);
 adder f6 (x[6],y[6],c[5],s[6],c[6]);
 adder f7 (x[7],y[7],c[6],s[7],c[7]);
 adder f8 (x[8],y[8],c[7],s[8],c[8]);
 adder f9 (x[9],y[9],c[8],s[9],c[9]);
 adder f10 (x[10],y[10],c[9],s[10],c[10]);
 adder f11 (x[11],y[11],c[10],s[11],c[11]);
 adder f12 (x[12],y[12],c[11],s[12],c[12]);
 adder f13 (x[13],y[13],c[12],s[13],c[13]);
 adder f14 (x[14],y[14],c[13],s[14],c[14]);
 adder f15 (x[15],y[15],c[14],s[15],cout);
endmodule

这是我的测试平台。不知道哪里错了

module test();
wire [15:0] x,y,s;
wire cin, cout;
 testAdder testt (x,y,s,cout,cin);
 sixteenbitAdder adderr (x,y,s,cout,cin);
endmodule


module testAdder(a,b,s,cout,cin);
input [15:0] s;
input cout;
output [15:0] a,b;
output cin;
reg [15:0] a,b;
reg cin;
initial
    begin
     $monitor($time,,"a=%d, b=%d, cin=%b, s=%d, cout=%b",a,b,cin,s,cout);
     $display($time,,"a=%d, b=%d, cin=%b, s=%d, cout=%b",a,b,cin,s,cout);
     #50  a=1; b=2; cin=0; 
    end
endmodule

这是我得到的回报

                   0 a=    x, b=    x, cin=x, s=    z, cout=z
                   0 a=    x, b=    x, cin=x, s=    X, cout=x
                  50 a=    1, b=    2, cin=0, s=    X, cout=x
                  52 a=    1, b=    2, cin=0, s=    X, cout=0
                  53 a=    1, b=    2, cin=0, s=    X, cout=0
                  55 a=    1, b=    2, cin=0, s=    Z, cout=0

您的设计有一个错误。变化:

 adder f1 (x[1],y[1],c[0],s[0],c[1]);

至:

 adder f1 (x[1],y[1],c[0],s[1],c[1]);
 //-------------------------^

输出:

           0 a=    x, b=    x, cin=x, s=    x, cout=x
          50 a=    1, b=    2, cin=0, s=    x, cout=x
          52 a=    1, b=    2, cin=0, s=    X, cout=0
          53 a=    1, b=    2, cin=0, s=    X, cout=0
          55 a=    1, b=    2, cin=0, s=    3, cout=0

不需要$display