Date post: | 14-Jan-2016 |
Category: |
Documents |
Upload: | lisa-floyd |
View: | 268 times |
Download: | 0 times |
Binary Adder Design Spring 2003 1
Binary Adders
Binary Adder Design Spring 2003 2
n-bit Addition
– Ripple Carry Adder
– Conditional Sum Adder
– (Carry Lookahead Adder)
Binary Adder Design Spring 2003 3
Ripple Carry Adder
incnbnans ]0:1[]0:1[]0:[
Binary Adder Design Spring 2003 4
Ripple Carry Adder
in
in
in
cbanbna
cbnbana
cnbnans
]0[]0[2]1:1[2]1:1[
]0[2]1:1[]0[2]1:1[
]0:1[]0:1[]0:[
11
11
Binary Adder Design Spring 2003 5
Ripple Carry Adder
])0[],1[(2]1:1[2]1:1[
]0[]0[2]1:1[2]1:1[
]0[2]1:1[]0[2]1:1[
]0:1[]0:1[]0:[
11
11
11
scnbna
cbanbna
cbnbana
cnbnans
in
in
in
Binary Adder Design Spring 2003 6
Ripple Carry Adder
]0[2]1[]1:1[]1:1[
])0[],1[(2]1:1[2]1:1[
]0[]0[2]1:1[2]1:1[
]0[2]1:1[]0[2]1:1[
]0:1[]0:1[]0:[
1
11
11
11
scnbna
scnbna
cbanbna
cbnbana
cnbnans
in
in
in
Binary Adder Design Spring 2003 7
Ripple Carry Adder
]0[2]1[2]2[]2:1[]2:1[
]0[2]1[]1:1[]1:1[
])0[],1[(2]1:1[2]1:1[
]0[]0[2]1:1[2]1:1[
]0[2]1:1[]0[2]1:1[
]0:1[]0:1[]0:[
1
1
11
11
11
sscnbna
scnbna
scnbna
cbanbna
cbnbana
cnbnans
in
in
in
Binary Adder Design Spring 2003 8
Ripple Carry Adder
]0[2]1[2]2[]2:1[]2:1[
]0[2]1[2]2[]2:1[]2:1[
]0[2]1[]1:1[]1:1[
])0[],1[(2]1:1[2]1:1[
]0[]0[2]1:1[2]1:1[
]0[2]1:1[]0[2]1:1[
]0:1[]0:1[]0:[
12
1
1
11
11
11
sscnbna
sscnbna
scnbna
scnbna
cbanbna
cbnbana
cnbnans
in
in
in
Binary Adder Design Spring 2003 9
Ripple Carry Adder
]0:1[2]2[]2:1[]2:1[
]0[2]1[2]2[]2:1[]2:1[
]0[2]1[2]2[]2:1[]2:1[
]0[2]1[]1:1[]1:1[
])0[],1[(2]1:1[2]1:1[
]0[]0[2]1:1[2]1:1[
]0[2]1:1[]0[2]1:1[
]0:1[]0:1[]0:[
2
12
1
1
11
11
11
scnbna
sscnbna
sscnbna
scnbna
scnbna
cbanbna
cbnbana
cnbnans
in
in
in
Binary Adder Design Spring 2003 10
Ripple Carry Adder
]0:1[2][]:1[]:1[
]0:1[2]2[]2:1[]2:1[
]0[2]1[2]2[]2:1[]2:1[
]0[2]1[2]2[]2:1[]2:1[
]0[2]1[]1:1[]1:1[
])0[],1[(2]1:1[2]1:1[
]0[]0[2]1:1[2]1:1[
]0[2]1:1[]0[2]1:1[
]0:1[]0:1[]0:[
2
12
1
1
11
11
11
kskcknbkna
scnbna
sscnbna
sscnbna
scnbna
scnbna
cbanbna
cbnbana
cnbnans
k
in
in
in
Binary Adder Design Spring 2003 11
Ripple Carry Adder
])0:1[],[(
]0:1[2][]:1[]:1[
]0:1[2]2[]2:1[]2:1[
]0[2]1[2]2[]2:1[]2:1[
]0[2]1[2]2[]2:1[]2:1[
]0[2]1[]1:1[]1:1[
])0[],1[(2]1:1[2]1:1[
]0[]0[2]1:1[2]1:1[
]0[2]1:1[]0[2]1:1[
]0:1[]0:1[]0:[
2
12
1
1
11
11
11
nsnc
kskcknbkna
scnbna
sscnbna
sscnbna
scnbna
scnbna
cbanbna
cbnbana
cnbnans
k
in
in
in
Binary Adder Design Spring 2003 12
Ripple Carry Adder
)192(128)32()(
)448(480)32()(
RCA
FARCA
RCA
FARCA
DDnnD
CCnnC
Binary Adder Design Spring 2003 13
Conditional Sum Adder
Main principle: pre-computing upper sums for the cases: c[k]=1 and c[k]=0
Assume n is power of 2:
incnbnans ]0:1[]0:1[]0:[
Binary Adder Design Spring 2003 14
Conditional Sum Adder
Main principle: pre-computing upper sums for the cases: c[k]=1 and c[k]=0
Assume n is power of 2:
innn
in
cnbnnbnanna
cnbnans
]0:12/[2]2/:1[]0:12/[2]2/:1[
]0:1[]0:1[]0:[2/2/
Binary Adder Design Spring 2003 15
Conditional Sum Adder
Main principle: pre-computing upper sums for the cases: c[k]=1 and c[k]=0
Assume n is power of 2:
inn
innn
in
cnbnannbnna
cnbnnbnanna
cnbnans
]0:12/[]0:12/[2]2/:1[]2/:1[
]0:12/[2]2/:1[]0:12/[2]2/:1[
]0:1[]0:1[]0:[
2/
2/2/
Binary Adder Design Spring 2003 16
Conditional Sum Adder
Main principle: pre-computing upper sums for the cases: c[k]=1 and c[k]=0
Assume n is power of 2:
])0:12/[],2/[(2]2/:1[]2/:1[
]0:12/[]0:12/[2]2/:1[]2/:1[
]0:12/[2]2/:1[]0:12/[2]2/:1[
]0:1[]0:1[]0:[
2/
2/
2/2/
nsncnnbnna
cnbnannbnna
cnbnnbnanna
cnbnans
nin
nin
nnin
Binary Adder Design Spring 2003 17
Conditional Sum Adder
Main principle: pre-computing upper sums for the cases: c[k]=1 and c[k]=0
Assume n is power of 2:
]0:12/[2]2/[2]2/:1[]2/:1[
])0:12/[],2/[(2]2/:1[]2/:1[
]0:12/[]0:12/[2]2/:1[]2/:1[
]0:12/[2]2/:1[]0:12/[2]2/:1[
]0:1[]0:1[]0:[
2/2/
2/
2/
2/2/
nsncnnbnna
nsncnnbnna
cnbnannbnna
cnbnnbnanna
cnbnans
nn
nin
nin
nnin
Binary Adder Design Spring 2003 18
Conditional Sum Adder
Main principle: pre-computing upper sums for the cases: c[k]=1 and c[k]=0
Assume n is power of 2:
]0:12/[2]2/[]2/:1[]2/:1[
]0:12/[2]2/[2]2/:1[]2/:1[
])0:12/[],2/[(2]2/:1[]2/:1[
]0:12/[]0:12/[2]2/:1[]2/:1[
]0:12/[2]2/:1[]0:12/[2]2/:1[
]0:1[]0:1[]0:[
2/
2/2/
2/
2/
2/2/
nsncnnbnna
nsncnnbnna
nsncnnbnna
cnbnannbnna
cnbnnbnanna
cnbnans
n
nn
nin
nin
nnin
Binary Adder Design Spring 2003 19
Conditional Sum Adder
Main principle: pre-computing upper sums for the cases: c[k]=1 and c[k]=0
Assume n is power of 2:
1]2/[
0]2/[
1]2/:1[]2/:1[
]2/:1[]2/:1[2]0:12/[
]0:12/[2]2/[]2/:1[]2/:1[
]0:12/[2]2/[2]2/:1[]2/:1[
])0:12/[],2/[(2]2/:1[]2/:1[
]0:12/[]0:12/[2]2/:1[]2/:1[
]0:12/[2]2/:1[]0:12/[2]2/:1[
]0:1[]0:1[]0:[
2/
2/
2/2/
2/
2/
2/2/
nc
nc
if
if
nnbnna
nnbnnans
nsncnnbnna
nsncnnbnna
nsncnnbnna
cnbnannbnna
cnbnnbnanna
cnbnans
n
n
nn
nin
nin
nnin
Binary Adder Design Spring 2003 20
Conditional Sum Adder
Binary Adder Design Spring 2003 21
Conditional Sum Adder
full adder implements adder for n=1: CSA(1) = FA !!!!
Binary Adder Design Spring 2003 22
Conditional Sum Adder
full adder implements adder for n=1: CSA(1) = FA !!!!
MUXCSACSA DnDnD )2/()(
Binary Adder Design Spring 2003 23
Conditional Sum Adder
full adder implements adder for n=1: CSA(1) = FA !!!!
MUXFA
MUXCSACSADnD
DnDnD
)(log
)2/()(
2
Binary Adder Design Spring 2003 24
Conditional Sum Adder
full adder implements adder for n=1: CSA(1) = FA !!!!
)16(14)32(
)(log)2/()(
2
CSA
MUXFA
MUXCSACSA
D
DnDDnDnD
Binary Adder Design Spring 2003 25
Conditional Sum Adder
full adder implements adder for n=1: CSA(1) = FA !!!!
MUXCSACSA CnnCnC )12/()2/(3)(
Binary Adder Design Spring 2003 26
Conditional Sum Adder
full adder implements adder for n=1: CSA(1) = FA !!!!
)1(3
)12/()2/(3)()(log2
CSAn
MUXCSACSA
C
CnnCnC
Binary Adder Design Spring 2003 27
Conditional Sum Adder
full adder implements adder for n=1: CSA(1) = FA !!!!
FAn
CSAn
MUXCSACSA
C
C
CnnCnC
)(log
)(log
2
2
3
)1(3
)12/()2/(3)(
Binary Adder Design Spring 2003 28
Conditional Sum Adder
full adder implements adder for n=1: CSA(1) = FA !!!!
FAn
FAn
CSAn
MUXCSACSA
C
C
C
CnnCnC
)3(log)(log
)(log
)(log
22
2
2
2
3
)1(3
)12/()2/(3)(
Binary Adder Design Spring 2003 29
Conditional Sum Adder
full adder implements adder for n=1: CSA(1) = FA !!!!
FA
FAn
FAn
CSAn
MUXCSACSA
Cn
C
C
C
CnnCnC
57.1
)3(log)(log
)(log
)(log
22
2
2
2
3
)1(3
)12/()2/(3)(
Binary Adder Design Spring 2003 30
Conditional Sum Adder
full adder implements adder for n=1: CSA(1) = FA !!!!
FA
FAn
FAn
CSAn
MUXCSACSA
Cn
C
C
C
CnnCnC
57.1
)3(log)(log
)(log
)(log
22
2
2
2
3
)1(3
)12/()2/(3)(
4398)32(1449)16(474)8(153)4(48)2(14)1(
CSA
CSA
CSA
CSA
CSA
CSA
CCCCCC
Binary Adder Design Spring 2003 31
Conditional Sum Adder
full adder implements adder for n=1: CSA(1) = FA !!!!
FA
FAn
FAn
CSAn
MUXCSACSA
Cn
C
C
C
CnnCnC
57.1
)3(log)(log
)(log
)(log
22
2
2
2
3
)1(3
)12/()2/(3)( n CSA RCA
1 14 142 48 284 153 568 474 11216 1449 22432 4398 448
Binary Adder Design Spring 2003 32
Carry Lookahead Adder
Main principle: combine carry computations of substrings
Carry into bit position i: c[i] is computed from bits: a[i-1:0],b[i-1:0], cin
• condition:
0
1
2]0:1[]0:1[
12]0:1[]0:1[
2]0:1[]0:1[][
in
ini
i
iin
c
c
if
if
ibia
ibia
cibiaic
Binary Adder Design Spring 2003 33
Carry Lookahead Adder
Main principle: combine carry computations of substrings
Carry into bit position i: c[i] is computed from bits: a[i-1:0],b[i-1:0], cin
• condition:
Definition propagate signals:
Definition generate signals:
1, 1]:[]:[1),( ijij ijbijabap
1, 10]:[]:[1),( ijij ijbijabag
10, 10]0:[]0:[1),,(),,( j
ininjinj cjbjacbagcbaG
0
1
2]0:1[]0:1[
12]0:1[]0:1[
2]0:1[]0:1[][
in
ini
i
iin
c
c
if
if
ibia
ibia
cibiaic
Binary Adder Design Spring 2003 34
Carry Lookahead Adder
Definition propagate signals:
Definition generate signals:
for i>0:
for i=0:
relation to carries:
Computation of the signals , :
for i>0:
for i=0: 2]0[]0[),,(
][][),(
][][),(
0,0
,
,
inin
ii
ii
cbacbag
ibiabag
ibiabap
),(, bap ii ),(, bag ii
1, 1]:[]:[1),( ijij ijbijabap
1, 10]:[]:[1),( ijij ijbijabag
10, 10]0:[]0:[1),,( j
ininj cjbjacbag
),,(),,(][ 10,1 iniini cbaGcbagic
Binary Adder Design Spring 2003 35
Carry Lookahead Adder
Combination of carry and propagate signals:
ijjkik ppp ,1,,
Binary Adder Design Spring 2003 36
)( ,1,1,,
,1,,
ijjkjkik
ijjkik
gpgg
ppp
Carry Lookahead Adder
Combination of carry and propagate signals:
Binary Adder Design Spring 2003 37
ijjkjk
ijjkjkik
ijjkik
gNANDpNANDg
gpgg
ppp
,1,1,
,1,1,,
,1,,
)(
Carry Lookahead Adder
Combination of carry and propagate signals:
Binary Adder Design Spring 2003 38
Carry Lookahead Adder
Combination of carry and propagate signals:
Given two such pairs of generate and propagate signals and
we define the operation :
ijjkjk
ijjkjkik
ijjkik
gNANDpNANDg
gpgg
ppp
,1,1,
,1,1,,
,1,,
)(
),( 1,1, jkjk pg ),( ,, ijij pg
ijjkijjkjk
ijijjkjkikik
ppgNANDpNANDg
pgpgpg
,1,,1,1,
,,1,1,,,
,
),(),(),(
Binary Adder Design Spring 2003 39
Carry Lookahead Adder
Carry computation based on computation of generate and propagate signals:
),(
),(),(),(),(
,,
,,1,11,1,,,,
jjjj
k
ij
iiiikkkkkkkkikik
pg
pgpgpgpg
Binary Adder Design Spring 2003 40
Carry Lookahead Adder
Carry computation based on computation of generate and propagate signals:
),(
),(),(),(),(
,,
,,1,11,1,,,,
jjjj
k
ij
iiiikkkkkkkkikik
pg
pgpgpgpg
),(
),(),(),(
),(),(
,,0
0,00,01,11,1,,
0,0,0,
jjjj
k
j
kkkkkkkk
kkkk
pg
pgpgpg
pgpG
Binary Adder Design Spring 2003 41
Carry Lookahead Adder
incnbnans ]0:1[]0:1[]0:[
Binary Adder Design Spring 2003 42
Carry Lookahead Adder
injj
in
cjbjnbjajna
cnbnans
]0:1[2]:1[]0:1[2]:1[
]0:1[]0:1[]0:[
Binary Adder Design Spring 2003 43
Carry Lookahead Adder
inj
injj
in
cjbjajnbjna
cjbjnbjajna
cnbnans
]0:1[]0:1[2]:1[]:1[
]0:1[2]:1[]0:1[2]:1[
]0:1[]0:1[]0:[
Binary Adder Design Spring 2003 44
Carry Lookahead Adder
])0:1[],[(2]:1[]:1[
]0:1[]0:1[2]:1[]:1[
]0:1[2]:1[]0:1[2]:1[
]0:1[]0:1[]0:[
jsjcjnbjna
cjbjajnbjna
cjbjnbjajna
cnbnans
jin
jin
jjin
Binary Adder Design Spring 2003 45
Carry Lookahead Adder
])0:1[],[(2])[][(2]1:1[]1:1[
])0:1[],[(2]:1[]:1[
]0:1[]0:1[2]:1[]:1[
]0:1[2]:1[]0:1[2]:1[
]0:1[]0:1[]0:[
1
jsjcjbjajnbjna
jsjcjnbjna
cjbjajnbjna
cjbjnbjajna
cnbnans
jj
jin
jin
jjin
Binary Adder Design Spring 2003 46
Carry Lookahead Adder
])0:1[],[(2),(2]1:1[]1:1[
])0:1[],[(2])[][(2]1:1[]1:1[
])0:1[],[(2]:1[]:1[
]0:1[]0:1[2]:1[]:1[
]0:1[2]:1[]0:1[2]:1[
]0:1[]0:1[]0:[
,,1
1
jsjcpgjnbjna
jsjcjbjajnbjna
jsjcjnbjna
cjbjajnbjna
cjbjnbjajna
cnbnans
jjjjj
j
jj
jin
jin
jjin
Binary Adder Design Spring 2003 47
Carry Lookahead Adder
])0:1[],[(222]1:1[]1:1[
])0:1[],[(2),(2]1:1[]1:1[
])0:1[],[(2])[][(2]1:1[]1:1[
])0:1[],[(2]:1[]:1[
]0:1[]0:1[2]:1[]:1[
]0:1[2]:1[]0:1[2]:1[
]0:1[]0:1[]0:[
,1
,1
,,1
1
jsjcpgjnbjna
jsjcpgjnbjna
jsjcjbjajnbjna
jsjcjnbjna
cjbjajnbjna
cjbjnbjajna
cnbnans
jjj
jjj
j
jjjjj
j
jj
jin
jin
jjin
Binary Adder Design Spring 2003 48
Carry Lookahead Adder
])0:1[],[(22]1:1[]1:1[
])0:1[],[(222]1:1[]1:1[
])0:1[],[(2),(2]1:1[]1:1[
])0:1[],[(2])[][(2]1:1[]1:1[
])0:1[],[(2]:1[]:1[
]0:1[]0:1[2]:1[]:1[
]0:1[2]:1[]0:1[2]:1[
]0:1[]0:1[]0:[
,1
,
,1
,1
,,1
1
jsjcpgjnbjna
jsjcpgjnbjna
jsjcpgjnbjna
jsjcjbjajnbjna
jsjcjnbjna
cjbjajnbjna
cjbjnbjajna
cnbnans
jjj
jjj
jjj
jjj
j
jjjjj
j
jj
jin
jin
jjin
Binary Adder Design Spring 2003 49
Carry Lookahead Adder
]0:1[2][22]1:1[]1:1[
])0:1[],[(22]1:1[]1:1[
])0:1[],[(222]1:1[]1:1[
])0:1[],[(2),(2]1:1[]1:1[
])0:1[],[(2])[][(2]1:1[]1:1[
])0:1[],[(2]:1[]:1[
]0:1[]0:1[2]:1[]:1[
]0:1[2]:1[]0:1[2]:1[
]0:1[]0:1[]0:[
,1
,
,1
,
,1
,1
,,1
1
jsjcpgjnbjna
jsjcpgjnbjna
jsjcpgjnbjna
jsjcpgjnbjna
jsjcjbjajnbjna
jsjcjnbjna
cjbjajnbjna
cjbjnbjajna
cnbnans
jjjj
jjj
jjj
jjj
jjj
jjj
j
jjjjj
j
jj
jin
jin
jjin
Binary Adder Design Spring 2003 50
Carry Lookahead Adder
]0:1[222]1:1[]1:1[
]0:1[2][22]1:1[]1:1[
])0:1[],[(22]1:1[]1:1[
])0:1[],[(222]1:1[]1:1[
])0:1[],[(2),(2]1:1[]1:1[
])0:1[],[(2])[][(2]1:1[]1:1[
])0:1[],[(2]:1[]:1[
]0:1[]0:1[2]:1[]:1[
]0:1[2]:1[]0:1[2]:1[
]0:1[]0:1[]0:[
1,0,1
,
,1
,
,1
,
,1
,1
,,1
1
jsGpgjnbjna
jsjcpgjnbjna
jsjcpgjnbjna
jsjcpgjnbjna
jsjcpgjnbjna
jsjcjbjajnbjna
jsjcjnbjna
cjbjajnbjna
cjbjnbjajna
cnbnans
jj
jjj
jjj
jjjj
jjj
jjj
jjj
jjj
jjj
j
jjjjj
j
jj
jin
jin
jjin
Binary Adder Design Spring 2003 51
Carry Lookahead Adder
]0:1[22]1:1[]1:1[
]0:1[222]1:1[]1:1[
]0:1[2][22]1:1[]1:1[
])0:1[],[(22]1:1[]1:1[
])0:1[],[(222]1:1[]1:1[
])0:1[],[(2),(2]1:1[]1:1[
])0:1[],[(2])[][(2]1:1[]1:1[
])0:1[],[(2]:1[]:1[
]0:1[]0:1[2]:1[]:1[
]0:1[2]:1[]0:1[2]:1[
]0:1[]0:1[]0:[
1,0,1
,
1,0,1
,
,1
,
,1
,
,1
,1
,,1
1
jsGpgjnbjna
jsGpgjnbjna
jsjcpgjnbjna
jsjcpgjnbjna
jsjcpgjnbjna
jsjcpgjnbjna
jsjcjbjajnbjna
jsjcjnbjna
cjbjajnbjna
cjbjnbjajna
cnbnans
jjjj
jjj
jj
jjj
jjj
jjjj
jjj
jjj
jjj
jjj
jjj
j
jjjjj
j
jj
jin
jin
jjin
Binary Adder Design Spring 2003 52
Carry Lookahead Adder
]0:1[22]1:1[]1:1[
]0:1[22]1:1[]1:1[
]0:1[222]1:1[]1:1[
]0:1[2][22]1:1[]1:1[
])0:1[],[(22]1:1[]1:1[
])0:1[],[(222]1:1[]1:1[
])0:1[],[(2),(2]1:1[]1:1[
])0:1[],[(2])[][(2]1:1[]1:1[
])0:1[],[(2]:1[]:1[
]0:1[]0:1[2]:1[]:1[
]0:1[2]:1[]0:1[2]:1[
]0:1[]0:1[]0:[
1,0,1
,0
1,0,1
,
1,0,1
,
,1
,
,1
,
,1
,1
,,1
1
jsGpGjnbjna
jsGpgjnbjna
jsGpgjnbjna
jsjcpgjnbjna
jsjcpgjnbjna
jsjcpgjnbjna
jsjcpgjnbjna
jsjcjbjajnbjna
jsjcjnbjna
cjbjajnbjna
cjbjnbjajna
cnbnans
jjjj
jj
jjjj
jjj
jj
jjj
jjj
jjjj
jjj
jjj
jjj
jjj
jjj
j
jjjjj
j
jj
jin
jin
jjin
Binary Adder Design Spring 2003 53
Carry Lookahead Adder
]0:1[22]1:1[]1:1[
]0:1[22]1:1[]1:1[
]0:1[222]1:1[]1:1[
]0:1[2][22]1:1[]1:1[
])0:1[],[(22]1:1[]1:1[
])0:1[],[(222]1:1[]1:1[
])0:1[],[(2),(2]1:1[]1:1[
])0:1[],[(2])[][(2]1:1[]1:1[
])0:1[],[(2]:1[]:1[
]0:1[]0:1[2]:1[]:1[
]0:1[2]:1[]0:1[2]:1[
]0:1[]0:1[]0:[
1,0,1
,0
1,0,1
,
1,0,1
,
,1
,
,1
,
,1
,1
,,1
1
jsGpGjnbjna
jsGpgjnbjna
jsGpgjnbjna
jsjcpgjnbjna
jsjcpgjnbjna
jsjcpgjnbjna
jsjcpgjnbjna
jsjcjbjajnbjna
jsjcjnbjna
cjbjajnbjna
cjbjnbjajna
cnbnans
jjjj
jj
jjjj
jjj
jj
jjj
jjj
jjjj
jjj
jjj
jjj
jjj
jjj
j
jjjjj
j
jj
jin
jin
jjin
1,0,][ jjj Gpjs
Binary Adder Design Spring 2003 54
Carry Lookahead Adder
• Structure
• Implementation using Parallel Prefix Computation
Binary Adder Design Spring 2003 55
Parallel Prefix Computation
For associative operation o, we define
Parallel Prefix Operation:
n-bit INPUT:
n-bit OUTPUT:
Compute the operation o on all prefixes of X[n:1]
11 XXXY iii
]1:[nX
]1:[nY
Binary Adder Design Spring 2003 56
Carry Lookahead Adder
Parallel Prefix Computation:
n=1: n=2^k:
1212212
21212
21212211
122
''''
'
XXXXX
YXY
YXXXXXXXY
XXX
iii
iii
iiiiii
iii
11 XY
Binary Adder Design Spring 2003 57
Carry Lookahead Adder
Parallel Prefix Computation:
0)1()1()2/()(
PP
PPPPC
CnnCnC
Binary Adder Design Spring 2003 58
Carry Lookahead Adder
Parallel Prefix Computation:
0)1(2)2/()(
0)1()1()2/()(
PP
PPPP
PP
PPPP
DDnDnD
CCnnCnC
Binary Adder Design Spring 2003 59
Carry Lookahead Adder
Parallel Prefix Computation:
)(log2)(0)1(
2)2/()(0)1(
)1()2/()(
2 nDnDD
DnDnDC
CnnCnC
PP
PP
PPPP
PP
PPPP
Binary Adder Design Spring 2003 60
Carry Lookahead Adder
Parallel Prefix Computation:
)(log2)(0)1(
2)2/()(0)1(
)1()2/()(
2 nDnDD
DnDnDC
CnnCnC
PP
PP
PPPP
PP
PPPP
n cost delay
1 0 02 7 4(2)4 28 8(4)8 77 12(8)16 182 16(12)32 399 20(16)
Binary Adder Design Spring 2003 61
Carry Lookahead Adder
ORANDPPCLA CCnCnnCnC )1(2)()(
Binary Adder Design Spring 2003 62
Carry Lookahead Adder
ORANDPPCLA
ORANDPPCLADDDnDnD
CCnCnnCnC
2)()(
)1(2)()(
Binary Adder Design Spring 2003 63
Carry Lookahead Adder
26)32(2)()(
)1(2)()(
CLA
ORANDPPCLA
ORANDPPCLA
DDDDnDnD
CCnCnnCnC
Binary Adder Design Spring 2003 64
Carry Lookahead Adder
• cost:n CSA RCA CLA
1 14 14 142 48 28 314 153 56 728 474 112 16116 1449 224 34632 4398 448 723
Binary Adder Design Spring 2003 65
Carry Lookahead Adder
• delay:n CSA RCA CLA
1 4 4 6(4)2 6 8 10(6)4 8 16 14(10)8 10 32 18(14)16 12 64 22(18)32 14 128 26(22)
Binary Adder Design Spring 2003 66
Carry Lookahead Adder
• Example for n=8 – design
– computation of 183+43
Binary Adder Design Spring 2003 67
Carry Lookahead Adder
Binary Adder Design Spring 2003 68
Carry Lookahead Adder
Binary Adder Design Spring 2003 69
Carry Lookahead Adder
Binary Adder Design Spring 2003 70
Carry Lookahead Adder
Binary Adder Design Spring 2003 71
Carry Lookahead Adder
Binary Adder Design Spring 2003 72
Carry Lookahead Adder
Binary Adder Design Spring 2003 73
Carry Lookahead Adder
Binary Adder Design Spring 2003 74
Carry Lookahead Adder
Binary Adder Design Spring 2003 75
Carry Lookahead Adder
Binary Adder Design Spring 2003 76
Carry Lookahead Adder
Binary Adder Design Spring 2003 77
Addition/Substraction
• Addition and Subtration for n-bit two’s complement inputs– bit op signals the case of subtraction (op=1):
]]0:1[[)1(]0:1[[]]0:1[[ nbnans op
Binary Adder Design Spring 2003 78
Addition/Substraction
• Addition and Subtration for n-bit two’s complement inputs– bit op signals the case of subtraction (op=1):
0]]0:1[[]0:1[[
1]]0:1[[]0:1[[]]0:1[[)1(]0:1[[]]0:1[[
opifnbna
opifnbnanbnans op
Binary Adder Design Spring 2003 79
Addition/Substraction
• Addition and Subtration for n-bit two’s complement inputs– bit op signals the case of subtraction (op=1):
00]0]0:1[[]0:1[[
11]1]0:1[[]0:1[[
0]]0:1[[]0:1[[
1]]0:1[[]0:1[[]]0:1[[)1(]0:1[[]]0:1[[
opifnbna
opifnbna
opifnbna
opifnbnanbnans op
Binary Adder Design Spring 2003 80
Addition/Substraction
• Addition and Subtration for n-bit two’s complement inputs– bit op signals the case of subtraction (op=1):
0]]0:1[[]0:1[[
1]]0:1[[]0:1[[
00]0]0:1[[]0:1[[
11]1]0:1[[]0:1[[
0]]0:1[[]0:1[[
1]]0:1[[]0:1[[]]0:1[[)1(]0:1[[]]0:1[[
opifopopnbna
opifopopnbna
opifnbna
opifnbna
opifnbna
opifnbnanbnans op
Binary Adder Design Spring 2003 81
Addition/Substraction
• Addition and Subtration for n-bit two’s complement inputs– bit op signals the case of subtraction (op=1):
opopnbnaopifopopnbna
opifopopnbna
opifnbna
opifnbna
opifnbna
opifnbnanbnans op
]]0:1[[]0:1[[0]]0:1[[]0:1[[
1]]0:1[[]0:1[[
00]0]0:1[[]0:1[[
11]1]0:1[[]0:1[[
0]]0:1[[]0:1[[
1]]0:1[[]0:1[[]]0:1[[)1(]0:1[[]]0:1[[
Binary Adder Design Spring 2003 82
Addition/Substraction
• Addition and Subtration for n-bit two’s complement inputs– bit op signals the case of subtraction (op=1):
• assumption: add/sub result is representable with n bits
opopnbnaopifopopnbna
opifopopnbna
opifnbna
opifnbna
opifnbna
opifnbnanbnans op
]]0:1[[]0:1[[0]]0:1[[]0:1[[
1]]0:1[[]0:1[[
00]0]0:1[[]0:1[[
11]1]0:1[[]0:1[[
0]]0:1[[]0:1[[
1]]0:1[[]0:1[[]]0:1[[)1(]0:1[[]]0:1[[
Binary Adder Design Spring 2003 83
Addition/Substraction
• Addition and Subtration for n-bit two’s complement inputs– bit op signals the case of subtraction (op=1):
• assumption: add/sub result is representable with n bits
• Detection of the case that the result can not be represented with n bits(overflow)
opopnbnaopifopopnbna
opifopopnbna
opifnbna
opifnbna
opifnbna
opifnbnanbnans op
]]0:1[[]0:1[[0]]0:1[[]0:1[[
1]]0:1[[]0:1[[
00]0]0:1[[]0:1[[
11]1]0:1[[]0:1[[
0]]0:1[[]0:1[[
1]]0:1[[]0:1[[]]0:1[[)1(]0:1[[]]0:1[[
Binary Adder Design Spring 2003 84
Overflow
• Overflow: result too large for finite computer word– e.g., adding two n-bit numbers does not yield an n-bit number
0111+ 0001 note that overflow term is somewhat
misleading, 1000 it does not mean a carry “overflowed”
• Detecting Overflow– No overflow when adding a positive and a negative number– No overflow when signs are the same for subtraction– Overflow occurs when the value affects the sign:
• overflow when adding two positives yields a negative • or, adding two negatives gives a positive• or, subtract a negative from a positive and get a negative• or, subtract a positive from a negative and get a positive
– Consider the operations A + B, and A – B• Can overflow occur if B is 0 ?• Can overflow occur if A is 0 ?
Binary Adder Design Spring 2003 85
Effects of Overflow
• An exception (interrupt) occurs– Control jumps to predefined address for exception
– Interrupted address is saved for possible resumption
• Details based on software system / language– example: flight control vs. homework assignment
• correct sign has to be computed even for overflows– branches should also work correctly after overflows
– neg signal:
0]]0:1[[)1(]]0:1[[ nbnaneg sub
Binary Adder Design Spring 2003 86
Overflow & Sign
• Overflow detection:
incnbnaovf ]]0:1[[]]0:1[[ nT
Binary Adder Design Spring 2003 87
Overflow & Sign
• Overflow detection:
incnbnaovf ]]0:1[[]]0:1[[
innnn
in cnbnabacba ]0:2[]0:2[)(2][][ 111
nT
Binary Adder Design Spring 2003 88
Overflow & Sign
• Overflow detection:
incnbnaovf ]]0:1[[]]0:1[[
])0:2[],1[()(2
]0:2[]0:2[)(2][][
111
111
nsncba
cnbnabacba
nnn
innnn
in
nT
Binary Adder Design Spring 2003 89
Overflow & Sign
• Overflow detection:
incnbnaovf ]]0:1[[]]0:1[[
]0:2[])1[2]1[(2
])0:2[],1[()(2
]0:2[]0:2[)(2][][
111
111
111
nsncncba
nsncba
cnbnabacba
nnn
nnn
innnn
in
nT
Binary Adder Design Spring 2003 90
Overflow & Sign
• Overflow detection:
incnbnaovf ]]0:1[[]]0:1[[
]0:2[])1[2])1[],[((2
]0:2[])1[2]1[(2
])0:2[],1[()(2
]0:2[]0:2[)(2][][
111
111
111
1
nsncnsnc
nsncncba
nsncba
cnbnabacba
nnn
nnn
ninnn
nin
nT
Binary Adder Design Spring 2003 91
Overflow & Sign
• Overflow detection:
incnbnaovf ]]0:1[[]]0:1[[
]]0:1[[])1[][(2
]0:2[])1[2])1[],[((2
]0:2[])1[2]1[(2
])0:2[],1[()(2
]0:2[]0:2[)(2][][
111
111
111
1
nsncnc
nsncnsnc
nsncncba
nsncba
cnbnabacba
n
nnn
nnn
ninnn
nin
nT
Binary Adder Design Spring 2003 92
Overflow & Sign
• Overflow detection:
incnbnaovf ]]0:1[[]]0:1[[
]]0:1[[])1[][(2
]0:2[])1[2])1[],[((2
]0:2[])1[2]1[(2
])0:2[],1[()(2
]0:2[]0:2[)(2][][
111
111
111
1
nsncnc
nsncnsnc
nsncncba
nsncba
cnbnabacba
n
nnn
nnn
ninnn
nin
]1[][]]0:1[[])1[][(2 ncncTnsncnc nn
nT
Binary Adder Design Spring 2003 93
Overflow & Sign
• Overflow detection:
incnbnaovf ]]0:1[[]]0:1[[
]]0:1[[])1[][(2
]0:2[])1[2])1[],[((2
]0:2[])1[2]1[(2
])0:2[],1[()(2
]0:2[]0:2[)(2][][
111
111
111
1
nsncnc
nsncnsnc
nsncncba
nsncba
cnbnabacba
n
nnn
nnn
ninnn
nin
]1[][]]0:1[[])1[][(2 ncncTnsncnc nn
]1[][ ncncovf
nT
Binary Adder Design Spring 2003 94
Overflow & Sign
• Sign condition:
0]]0:1['[]]0:1[[ incnbnaneg
Binary Adder Design Spring 2003 95
Overflow & Sign
• Sign condition:
consider sign extended sum:
0]]0:1['[]]0:1[[ incnbnaneg
]0:1[])0:1[],1[(])0:1[],1[( nscnbnbnana in
Binary Adder Design Spring 2003 96
Overflow & Sign
• Sign condition:
consider sign extended sum:
sign computation:
0]]0:1['[]]0:1[[ incnbnaneg
]0:1[])0:1[],1[(])0:1[],1[( nscnbnbnana in
][nsneg
Binary Adder Design Spring 2003 97
Overflow & Sign
• Sign condition:
consider sign extended sum:
sign computation:
0]]0:1['[]]0:1[[ incnbnaneg
]0:1[])0:1[],1[(])0:1[],1[( nscnbnbnana in
][]1[]1[][
ncnbnansneg
Binary Adder Design Spring 2003 98
Overflow & Sign
• Sign condition:
consider sign extended sum:
sign computation:
0]]0:1['[]]0:1[[ incnbnaneg
]0:1[])0:1[],1[(])0:1[],1[( nscnbnbnana in
][),(][]1[]1[
][
1,1 ncbapncnbna
nsneg
nn
Binary Adder Design Spring 2003 99
Overflow & Sign
• Sign condition:
consider sign extended sum:
sign computation:
0]]0:1['[]]0:1[[ incnbnaneg
]0:1[])0:1[],1[(])0:1[],1[( nscnbnbnana in
),,(),(
][),(][]1[]1[
][
1,01,1
1,1
innnn
nn
cbaGbap
ncbapncnbna
nsneg
Binary Adder Design Spring 2003 100
Design of an Add/Subtract Unit
Binary Adder Design Spring 2003 101
Design of an Add/Subtract Unit
])1[][( ncncovf
Binary Adder Design Spring 2003 102
Design of an Add/Subtract Unit
])1[]1[]1[][(])1[][(
npncnpncncncovf
Binary Adder Design Spring 2003 103
Design of an Add/Subtract Unit
])1[]1[][(])1[]1[]1[][(
])1[][(
nsnpncnpncnpnc
ncncovf
Binary Adder Design Spring 2003 104
Design of an Add/Subtract Unit
])1[]1[][(])1[]1[][(
])1[]1[]1[][(])1[][(
nsnpncnsnpnc
npncnpncncncovf
Binary Adder Design Spring 2003 105
Design of an Add/Subtract Unit
])1[(])1[]1[][(])1[]1[][(
])1[]1[]1[][(])1[][(
nsnegnsnpncnsnpnc
npncnpncncncovf