3.3.3 · D5Combinational Circuits
Question bank — Carry-lookahead adder
Before you start, keep three anchors from the parent in mind:
- Generate — "this bit makes a carry by itself."
- Propagate — "this bit passes a carry through."
- The whole trick: , unrolled so no carry waits for another.
True or false — justify
Every reveal below is True/False + a one-line reason. Don't accept the verdict without the because.
CLA computes all carries in a delay that does not depend on the number of bits .
True (idealised) — each carry is a fixed 2-level AND–OR of the 's, 's and , so depth is constant; but this ignores the fan-in blow-up that forces hierarchy in real chips.
"Parallel carry computation" means CLA has zero delay.
False — parallel means constant depth (~4 gate levels), not instantaneous; the still take a gate delay and the AND–OR still takes two.
Using (OR) instead of XOR breaks the carry output.
False — the carry is fine, because OR and XOR differ only when , and there already forces ; it breaks the sum bit, not the carry.
The generate signal can be 1 even when the incoming carry is 0.
True — depends only on that bit's own inputs; generation is by definition independent of any incoming carry.
If for some bit, no carry can ever pass through that position.
True — ; with the term vanishes, so and the incoming carry is blocked (only local generation survives).
A CLA and a ripple-carry adder can give different final sums for the same inputs.
False — CLA only rearranges the same Boolean equations for speed; both implement identical logic, so the outputs are bit-for-bit equal.
Hierarchical (block) CLA uses completely different math from single-bit CLA.
False — it is the same recurrence one level up, with group replacing per-bit .
Increasing the CLA width from 4 to 64 bits keeps gate fan-in the same.
False — the formula's product terms grow with , so wide flat CLA needs impractically large fan-in gates; that is exactly why designers stop at ~4-bit blocks.
Spot the error
Each item states a plausible-but-wrong claim. The reveal names the flaw.
" means 'either input is 1', so I'll write ."
XOR is "exactly one is 1", not "at least one"; OR wrongly makes when both are 1, which corrupts .
", so I can drop the term entirely."
Only valid when ; the general expansion always ends with , and forgetting it gives wrong answers whenever the adder has an incoming carry.
"Since is recursive, CLA still waits for like ripple does."
The recurrence looks serial, but CLA unrolls it into a flat sum of products of only — no appears on the right, so nothing waits.
" is the sum bit."
That's only ; the true sum is — you must XOR in the incoming carry.
"The 4-bit group propagate is ."
It's the product (AND) — a carry propagates through the whole block only if every bit propagates, not just one.
"CLA replaces the full adders, so we no longer compute with XOR."
CLA only speeds up the carry path; the sum bits still use , reusing the same full-adder XOR logic (Full Adder).
"Group generate is ."
Wrong — a lower bit's generate only escapes the block if all higher bits propagate: .
Why questions
Why must and depend only on and never on ?
Because their whole purpose is to be available immediately (in 1 gate delay); if they depended on we'd reintroduce the serial waiting CLA was built to kill.
Why does unrolling the recursion remove the speed problem?
Substitution replaces each by inputs, turning a depth- chain into a single 2-level AND–OR expression whose depth is fixed regardless of .
Why does the carry equation tolerate but the sum does not?
OR and XOR differ only at , where already sets the carry; but reads directly, so the wrong produces a wrong sum bit.
Why do real chips use 4-bit blocks instead of one giant flat CLA?
A flat -bit CLA needs gates with fan-in up to ; fan-in and gate count grow too large, so hierarchy keeps each gate small (Propagation Delay & Fan-in).
Why is CLA's delay called "constant" even though wider adders add hierarchy levels?
Each hierarchy level adds a fixed couple of gate delays; the total grows like at worst (as in Prefix Adders (Kogge-Stone)) — far below ripple's linear .
Why is unrolling "just Boolean algebra"?
It's repeated substitution plus the distributive law — no new axioms, see Boolean Algebra.
Why does one generate followed by all propagates make a carry "travel instantly" in CLA?
In the unrolled formula that single is ANDed with the propagate product and ORed straight into every higher , so all those carries are true in the same 2 gate levels — no rippling.
Edge cases
What is when and ?
; with nothing generated and no incoming carry, there is simply nothing for to propagate.
If every across an -bit adder and , what is the top carry-out?
— the incoming carry propagates through all positions via the term, riding straight to the top.
Both inputs zero everywhere ( for all ), : what happens?
Every and every , so no bit propagates; immediately and the incoming carry dies at bit 0.
Can and hold simultaneously for the same bit?
No — needs , but then ; generate and propagate are mutually exclusive per bit.
What does reduce to at a position where ?
regardless of or , since appears as a lone OR term — a generated carry is unconditional.
For a 1-bit CLA (), does CLA differ from a full adder at all?
Not meaningfully — with one bit there is no carry chain to shortcut, so is exactly the ordinary full-adder carry.
Zero-width degenerate case: if the "adder" has no bits, what is the carry-out?
It is just passed through unchanged — with no positions there is nothing to generate or propagate, so out equals in.
Recall One-line self-test before you leave
Cover the reveals and answer three: (1) Why doesn't have to wait for in a CLA? (2) Why can OR stand in for XOR in the carry but not the sum? (3) Why do we chunk into 4-bit blocks? Answers ::: (1) Unrolling expresses purely in . (2) OR/XOR differ only when , which already forces the carry, but the sum reads literally. (3) To keep gate fan-in small (Propagation Delay & Fan-in).
Connections
- Carry-Lookahead Adder — the parent note this bank tests.
- Full Adder — source of that many traps abuse.
- Ripple-Carry Adder — the "still waits serially" misconception's origin.
- Boolean Algebra — justifies that unrolling changes nothing about the output.
- Propagation Delay & Fan-in — the real reason wide CLA is impractical.
- Prefix Adders (Kogge-Stone) — where the depth claim comes from.
- Carry-Save Adder — a different speed trick, easy to confuse with CLA.