Prev Problem
Next Problem

65. Ripple Carry Adder

Back To All Submissions
Previous Submission
Next Submission

Solving Approach

How do you plan to solve it?

 

Code

module rca4_chain(
    input  wire [3:0] a,
    input  wire [3:0] b,
    input  wire       cin,
    output wire [3:0] sum,
    output wire       cout
);

    // Internal carry wires
    wire c1, c2, c3, c4;

    // Bit 0 (LSB)
    full_adder_1bit fa0(
        .a(a[0]),
        .b(b[0]),
        .cin(cin),
        .sum(sum[0]),
        .cout(c1)
    );

    // Bit 1
    full_adder_1bit fa1(
        .a(a[1]),
        .b(b[1]),
        .cin(c1),
        .sum(sum[1]),
        .cout(c2)
    );

    // Bit 2
    full_adder_1bit fa2(
        .a(a[2]),
        .b(b[2]),
        .cin(c2),
        .sum(sum[2]),
        .cout(c3)
    );

    // Bit 3 (MSB)
    full_adder_1bit fa3(
        .a(a[3]),
        .b(b[3]),
        .cin(c3),
        .sum(sum[3]),
        .cout(c4)
    );

    assign cout = c4;

endmodule


// -------------------------------------------------
// 1-bit Full Adder — used by ripple carry chain
// -------------------------------------------------
module full_adder_1bit(
    input  wire a,
    input  wire b,
    input  wire cin,
    output wire sum,
    output wire cout
);

    assign sum  = a ^ b ^ cin;
    assign cout = (a & b) | (a & cin) | (b & cin);

endmodule

 

Was this helpful?
Upvote
Downvote