How a carry-skip (carry-bypass) adder works: 4 bits in two blocks
A carry-skip adder, also called a carry-bypass adder, is a ripple-carry adder split into blocks, where each block checks whether every bit in it propagates (A XOR B = 1). If so, the block's carry-out must equal its carry-in, so a multiplexer passes the carry-in straight on instead of waiting for it to ripple through. This live 4-bit one has two 2-bit blocks.
The worst case for a ripple-carry adder is a carry that has to travel through every bit, as in 0111 + 0001 with a carry-in. That only happens when the bits in between all propagate, and that is exactly the condition a block can test with one AND of its propagate signals. When the block propagate P is 1, the skip multiplexer forwards the carry-in at once; when P is 0, the carry is generated or killed inside the block, so the rippled carry is already correct without waiting for the carry-in. The answer is the same either way, so the skip is purely about speed: the long carry chain becomes one multiplexer per block. Compare the carry-select adder, which computes the upper bits twice instead. All 512 combinations of A, B and Cin are checked against real addition before the page is built.
Open this circuit in the lab →
What you need
- 4× full adder: two per block, rippling inside the block (each 2 XOR, 2 AND and 1 OR; the first XOR is the bit's propagate p)
- 2× AND: block propagates P0 = p0 p1 and P1 = p2 p3
- 2× 2-to-1 mux: the skip: block carry-out = P ? carry-in : rippled carry (each mux is NOT, 2 AND and OR)
Step by step
- Place inputs
A3toA0,B3toB0andCin, and probesS3toS0andCout. - Block 0: two full adders ripple bits 0 and 1 from Cin. AND their propagates (the A XOR B inside each adder) into
P0. - Skip mux 0:
c2 = P0 ? Cin : rippled carry. - Block 1: two full adders for bits 2 and 3 from c2,
P1 = p2 p3, and skip mux 1 givesCout = P1 ? c2 : rippled carry. - Try 1111 + 0000 with Cin = 1: both blocks propagate, so the carry skips both blocks through two multiplexers and Cout = 1 with S = 0000.
Worked examples
| A | B | Cin | P0 (bits 1, 0) | P1 (bits 3, 2) | Carry path | S | Cout |
|---|---|---|---|---|---|---|---|
| 0011 | 0001 | 0 | 0 | 0 | ripples | 0100 | 0 |
| 0110 | 1001 | 1 | 1 | 1 | skips both blocks | 0000 | 1 |
| 1111 | 0000 | 1 | 1 | 1 | skips both blocks | 0000 | 1 |
| 0101 | 0011 | 0 | 0 | 0 | ripples | 1000 | 0 |
| 1100 | 0100 | 0 | 0 | 0 | ripples | 0000 | 1 |
The circuit has 30 gates against 20 for a 4-bit ripple-carry adder. With n bits in blocks of k, the worst carry ripples through one block, skips the ones in between and ripples through the last, so the delay grows about with 2k + n/k, which is smallest for blocks of about the square root of n/2 bits.
You can also read the full theory in the lesson on faster adders and carry lookahead. Prefer to build it yourself from scratch? Open the digiwleea lab and place the gates on the canvas, or start from the logic gate simulator.
Build more parts from gates
Each of these is one step from a transistor to a working CPU. Build every gate from CMOS transistors and work all the way up in the free digiwleea lab, with the free theory reference alongside.
Open the 4-bit carry-skip adder in the lab →Frequently asked
What is a carry skip adder?
A ripple-carry adder divided into blocks, each with a block propagate signal (the AND of its bits' A XOR B) and a multiplexer. When every bit of a block propagates, the multiplexer passes the block's carry-in straight to its carry-out, skipping the ripple through that block.
Is a carry skip adder the same as a carry bypass adder?
Yes. Carry-skip and carry-bypass are two names for the same design.
Why does the skip give the right answer?
If every bit in a block propagates, none generates or kills a carry, so the carry-out equals the carry-in. If any bit does not propagate, the carry-out is decided inside the block and does not depend on the carry-in, so the rippled value is correct.
Carry skip vs carry select vs carry lookahead: which is fastest?
Carry lookahead and prefix adders such as Kogge-Stone are fastest and largest. Carry select is next: it doubles the upper adders to remove the wait. Carry skip adds only an AND and a multiplexer per block, so it is the cheapest speed-up over ripple carry, with delay that grows roughly with the square root of the width.