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

// Top module: 4-bit ripple-carry adder built from 1-bit full adders
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 (c0 is cin, c4 is cout)
    wire c1, c2, c3;

    // Bit 0
    full_adder_1bit fa0 (
        .a    (a[0]),
        .b    (b[0]),
        .cin  (cin),   // c0
        .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
    full_adder_1bit fa3 (
        .a    (a[3]),
        .b    (b[3]),
        .cin  (c3),
        .sum  (sum[3]),
        .cout (cout)   // c4
    );

endmodule


// 1-bit full adder (fully combinational)
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);

    // Equivalent behavioral form (also synthesizable)
    // assign {cout, sum} = a + b + cin;

endmodule

 

Was this helpful?
Upvote
Downvote