3.3.3 · Hardware › Combinational Circuits
Ripple-carry adder slow hota hai kyunki har bit ka carry apne neeche wale bit ke carry ka wait karta hai — jaise ek line mein log ek bucket ek ek karke pass kar rahe hain. Carry-lookahead adder ek zyada smart sawaal poochta hai: "Kya main har carry ko directly inputs se predict kar sakta hoon, bina wait kiye?" Jawab hai haan — kyunki kisi bit position pe carry produce hoga ya forward hoga, yeh sirf us bit ke apne a i , b i pe depend karta hai, actual incoming carry pe nahi.
Definition Ripple-carry ki problem
Ek n -bit ripple-carry adder mein, carry c i + 1 ko c i chahiye, jise c i − 1 chahiye… Worst-case delay O ( n ) ki tarah badhta hai. Har full-adder carry stage mein 2 gate delays lagte hain (pehle AND phir OR), toh ek 64-bit ripple adder mein series mein 2 × 64 = 128 carry-gate delays lag sakte hain. Hum chahte hain ki carries in parallel compute hon, constant depth mein.
WHAT we exploit: Bit i pe ek single full adder ke liye, inputs a i , b i aur incoming carry c i hain:
s i = a i ⊕ b i ⊕ c i , c i + 1 = a i b i + ( a i ⊕ b i ) c i
c i + 1 dekho. Yeh do tarakon se 1 banta hai:
Bit apne aap carry generate karta hai: a i b i = 1 .
Bit ek incoming carry ko propagate karta hai: ( a i ⊕ b i ) c i = 1 .
Definition Generate aur Propagate
Do per-bit signals define karo jo sirf a i , b i pe depend karte hain (jo turant available hain):
g i = a i b i ( ==generate== ) , p i = a i ⊕ b i ( ==propagate== )
Carry equation mein substitute karo:
Ab recursion ko unroll karo taaki pichle carry pe dependence khatam ho. c 0 (input carry) se shuru karo:
c 1 = g 0 + p 0 c 0
c 2 = g 1 + p 1 c 1 = g 1 + p 1 ( g 0 + p 0 c 0 ) = g 1 + p 1 g 0 + p 1 p 0 c 0
c 3 = g 2 + p 2 c 2 = g 2 + p 2 g 1 + p 2 p 1 g 0 + p 2 p 1 p 0 c 0
The payoff: har c i + 1 ab g 's, p 's aur c 0 ka ek 2-level AND-OR expression hai. Kyunki g i , p i 1 gate delay mein compute hote hain, saare carries constant number of gate delays mein aate hain — n se independent.
Intuition Yeh fast kyun hai
Saare p i , g i compute karo: 1 gate delay (parallel).
Saare c i lookahead logic se compute karo: 2 gate delays (AND phir OR).
Saare s i = p i ⊕ c i compute karo: 1 aur delay .
Total ≈ constant (~4) gate delays, ripple ke ≈ 2 n ke comparison mein (har carry stage AND-then-OR = 2 delays hai). Trade-off: gate fan-in aur gate count badhte hain, isliye real chips 4-bit CLA blocks banate hain aur unhe hierarchically connect karte hain.
Worked example Example 1 —
A = 1011 , B = 0110 , c 0 = 0 add karo
Step 1 — per-bit p , g . Why? Yeh raw predictors hain.
i
a i
b i
g i = a i b i
p i = a i ⊕ b i
0
1
0
0
1
1
1
1
1
0
2
0
1
0
1
3
1
0
0
1
Step 2 — lookahead se carries. Why? Koi waiting nahi; formula mein plug karo.
c 1 = g 0 + p 0 c 0 = 0 + 1 ⋅ 0 = 0
c 2 = g 1 + p 1 g 0 + p 1 p 0 c 0 = 1 + 0 + 0 = 1
c 3 = g 2 + p 2 g 1 + p 2 p 1 g 0 + p 2 p 1 p 0 c 0 = 0 + 1 ⋅ 1 + 0 + 0 = 1
c 4 = g 3 + p 3 c 3 = 0 + 1 ⋅ 1 = 1
Step 3 — sums s i = p i ⊕ c i . Why? Sum bit p i reuse karta hai.
s 0 = 1 ⊕ 0 = 1 , s 1 = 0 ⊕ 0 = 0 , s 2 = 1 ⊕ 1 = 0 , s 3 = 1 ⊕ 1 = 0 , carry-out = 1 .
Result: S = 0001 with carry-out 1 ⇒ 1 000 1 2 . Check: 101 1 2 + 011 0 2 = 11 + 6 = 17 = 1000 1 2 . ✓
Worked example Example 2 — Propagation dikhao,
A = 1111 , B = 0001 , c 0 = 0
g = ( a i b i ) : g 0 = 1 , g 1 = g 2 = g 3 = 0 . p = ( a i ⊕ b i ) : p 0 = 0 , p 1 = p 2 = p 3 = 1 .
c 1 = g 0 = 1 .
c 2 = g 1 + p 1 c 1 = 0 + 1 ⋅ 1 = 1 . Why? Bit 0 ka generate upar propagate ho raha hai.
c 3 = 1 , c 4 = 1 — wahi carry saare propagate positions se guzar jaati hai.
Sums: s 0 = 0 ⊕ 0 = 0 , s 1 = 1 ⊕ 1 = 0 , s 2 = 0 , s 3 = 0 , carry-out 1 .
S = 1000 0 2 = 16 = 15 + 1 . ✓ Sundar illustration: ek generate + propagates ki chain = carry CLA logic mein instantly travel karti hai.
p i = a i + b i (OR) use karna XOR ki jagah
Why it feels right: "carry propagate karna" sunne mein lagta hai "koi bhi ek input 1 hai," jo OR hai. Aur carry equation ke liye yeh actually kaam karta hai — kyunki jab a i b i = 1 ho (sirf woh case jahan OR aur XOR differ karte hain), g i = 1 pehle se hi c i + 1 = 1 force kar deta hai.
The fix: Carry ke liye, OR acceptable hai. Lekin s i = p i ⊕ c i compute karne ke liye tumhe XOR zaroor use karna hoga. Agar tumne p i OR se define kiya, toh sum bit toot jaayega. Sabse safe: hamesha p i = a i ⊕ b i .
Common mistake Yeh sochna ki CLA ki delay zero hai
Why it feels right: "parallel = instant." The fix: yeh constant delay (~4 gate levels) hai, zero nahi. Aur wide CLA ko bahut bade fan-in gates chahiye, isliye practical designs hierarchical hote hain (block generate/propagate), jo kuch aur levels add karta hai.
Common mistake Expansion mein
c 0 bhool jaana
Why it feels right: examples mein aksar c 0 = 0 hota hai. The fix: general formula mein hamesha c 0 ∏ p j term hota hai; use sirf tabhi drop karo jab confirm ho ki c 0 = 0 hai.
Ripple-carry slow kyun hota hai? Har carry serially pichle wale ka wait karta hai → O ( n ) delay (~2 n gate delays, 2 per carry stage).
Generate g i define karo. g i = a i b i : bit incoming carry ki parwah kiye bina carry banata hai.
Propagate p i define karo. p i = a i ⊕ b i : bit ek incoming carry ko pass through karta hai.
Recursive carry equation? c i + 1 = g i + p i c i .
Inputs ke terms mein expanded c 2 ? c 2 = g 1 + p 1 g 0 + p 1 p 0 c 0 .
Sum bit formula? s i = p i ⊕ c i .
CLA vs ripple ka gate-delay? CLA ~constant (~4 levels); ripple ~2 n (2 delays per carry stage).
4-bit block ke liye group propagate? P = p 3 p 2 p 1 p 0 .
4-bit block ke liye group generate? G = g 3 + p 3 g 2 + p 3 p 2 g 1 + p 3 p 2 p 1 g 0 .
Wide CLA ki main cost? Bada gate fan-in aur gate count → hierarchy se solve hota hai.
Recall Feynman: ek 12-saal ke bachche ko explain karo
Socho ek row mein baithhe bacchon ko ek note pass karna hai. Ripple-carry = har bachche ko note milne ka wait karna padta hai phir aage pass karo, toh last bachcha bahut der tak wait karta hai. CLA smarter hai: game shuru hone se pehle, har bachcha sirf apne cards dekh ke do cheezein decide kar leta hai — "Main definitely haath uthaunga (generate)" ya "Main jo neeche wala karega wahi karunga (propagate)." Ab ek teacher saare ki cards ek saath dekhta hai aur turant announce kar deta hai ki kaun haath uthayega. Line mein koi waiting nahi!
"GAP" — G enerate = A nd (a i b i ), P ropagate = xor. Aur "c = G or P·c" ek rhyme ki tarah hai — "Generate it, or Propagate it."
Full Adder — CLA wahi s i = a i ⊕ b i ⊕ c i logic reuse karta hai.
Ripple-Carry Adder — woh slow baseline jise CLA improve karta hai.
Boolean Algebra — recursion unroll karna pure substitution + distributive law hai.
Carry-Save Adder — alag speed trick (carries defer karo).
Propagation Delay & Fan-in — practice mein hierarchy kyun zaroori hai.
Prefix Adders (Kogge-Stone) — CLA ka logarithmic-depth generalization.
Predict carries from inputs
Generate g_i equals a_i b_i
Propagate p_i equals a_i XOR b_i
Recursive carry c_i+1 equals g_i plus p_i c_i
4-bit CLA blocks hierarchical