You are on page 1of 14

Carry-Select Adders

Consider the Following Partitioned Addition:

101 101 110


110 111 001
101
+110

101
+111

110
+001

1 011 0

100 0

111 0

1 100 1

101 1

000 1

1 100 100 111

4-Bit Carry Select


X=
+Y =
sum
cout
sum
cout

1
0
1
0
1
0

0 1 1 0 1 1 0
0 1 0 1 1 0 1
1 0 1 0 0 1 1
1
1 1 0

}
}

Answer: 1110 0011


cin 1 for Least Significant Nibble
Must Wait for 4 Ripples to Select
Can Divide into Groups of Two

cin = 0

cin = 1

Carry-Select Adders

2-Bit Carry Select


X=
+Y =
sum
cout
sum
cout

1
0
1
0
1
0

0 1 1 0
0 1 0 1
0 0 1 0
1
1
1 1 0 0
1
1

1 1 0
1 0 1
0 1 1
0
1

}
}

cin = 0

cin = 1

Answer: 11 10 00 11
cin 1 for Least Significant 2 Bits
Must Wait for 2 Ripples to Select
Can Divide into Groups of One Carry Select

Carry-Select Adders

1-Bit Carry-Select/Cond. Sum


X=
+Y =
sum
cout
sum
cout

1
0
1
0
0
1

0
0
0
0
1
0

1
1
0
1
1
1

1
0
1
0
0
1

0
1
1
0
0
1

1
1
0
1
1
1

1
0
1
0
0
1

0
1
1
0

}
}

cin = 0

cin = 1

Answer: 11 10 00 11
cin 1 for Least Significant 1 Bit
Must Wait for 1 Ripples to Select
Can Divide into Groups of One Conditional Sum

Conditional-Sum Adders

1-Bit Conditional-Sum Adder Cell

Conditional-Sum Addition

Optimizations/Implementation

Carry Select/Conditional Sum Implemented as Adders

with MUX Tree (1-bit Cells for Conditional Sum)


Carry Select is Conditional Sum with One Set of Groups
- Not Necessarily with Group Size = 1
CLA/Conditional Sum Approximately Same Speed
CLA Generally has More Efficient Layout
Trees are Hard (irregular) CLA More Popular
Prefix Generators are Optimal in speed/area Tradeoff

Hybrid Adders

Hybrid Adders

Optimizations in Adders

Optimizations in Adders

You might also like