Prev Problem
Next Problem

64. Full Adder

Back To All Submissions
Previous Submission
Next Submission

Solving Approach

How do you plan to solve it?

 

Code

module full_adder_struct(
    input  wire a,
    input  wire b,
    input  wire cin,
    output wire sum,
    output wire cout
);

    // Wires between blocks
    wire s1;       // a ⊕ b
    wire c1;       // carry from first half adder
    wire c2;       // carry from second half adder

    // ------------------------------------
    // First half adder: (a, b) → s1, c1
    // ------------------------------------
    half_adder ha1 (
        .a(a),
        .b(b),
        .sum(s1),
        .carry(c1)
    );

    // ------------------------------------
    // Second half adder: (s1, cin) → sum, c2
    // ------------------------------------
    half_adder ha2 (
        .a(s1),
        .b(cin),
        .sum(sum),
        .carry(c2)
    );

    // ------------------------------------
    // OR gate merges the two carry outputs
    // ------------------------------------
    or (cout, c1, c2);

endmodule


// ----------------------------------------------------
// Half Adder (must be included for structural design)
// ----------------------------------------------------
module half_adder(
    input  wire a,
    input  wire b,
    output wire sum,
    output wire carry
);

    xor (sum, a, b);     // sum  = a ⊕ b
    and (carry, a, b);   // carry = a & b

endmodule

 

Was this helpful?
Upvote
Downvote