我没有得到4位全加器Verilog的输出

时间:2014-05-24 22:00:13

标签: verilog xilinx hdl

大家好,这是我与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

1 个答案:

答案 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上的工作示例。