A ripple-carry adder is a combinational circuit used in computer science and digital electronics for adding multi-bit binary numbers. A ripple-carry adder consists of multiple full adder circuits connected in series. Each full adder adds two corresponding bits from the input numbers along with the carry from the previous stage.

The adder works by "rippling" the carry information from one full adder to the next. The carry output from each stage becomes the carry input for the next more significant stage.

It can add two -bit binary numbers by cascading full adder stages. For example, to add two 4-bit numbers, four full adders would be connected in series.

graph LR
    A0[A0] --> FA0[FA0]
    B0[B0] --> FA0
    Cin[Cin] --> FA0
    A1[A1] --> FA1[FA1]
    B1[B1] --> FA1
    A2[A2] --> FA2[FA2]
    B2[B2] --> FA2
    A3[A3] --> FA3[FA3]
    B3[B3] --> FA3
    
    FA0 --> S0[S0]
    FA1 --> S1[S1]
    FA2 --> S2[S2]
    FA3 --> S3[S3]
    
    FA0 --Carry--> FA1
    FA1 --Carry--> FA2
    FA2 --Carry--> FA3
    FA3 --Carry--> Cout[Cout]
    
    style FA0 fill:#f9f,stroke:#333,stroke-width:2px
    style FA1 fill:#f9f,stroke:#333,stroke-width:2px
    style FA2 fill:#f9f,stroke:#333,stroke-width:2px
    style FA3 fill:#f9f,stroke:#333,stroke-width:2px

The main limitation of a ripple-carry adder is its propagation delay. As the carry has to propagate through each full adder stage before reaching the final stage, the delay increases with the number of bits being added. The worst-case delay occurs when the carry has to propagate from the least significant bit to the most significant bit, in which case the total delay counts up to