Quelle:Timo Hamalainen, Computer Arithmetic: Carry-Skip Adder
Carry-Skip-Adder
consider addition of the following numbers
. . .
010101
. . .
. . .
101010
. . .
if
= 1 carry will propagate to position
to speed-up operation, propagation is skipped to position i without waiting for ripp-
ling
operation time varies according to operands as in carry-complete addition
to implement carry-skip adder, stages are divided into blocks
operands
....
generated block previous bock
skipped carryskip
detect
carry-skip logic is added to each block to detect when carry-in the block can be
passed directly to the next block
define carry transfer =
carry skipping can be detected for a block size of m as follows (carry propagates
through all stages):
!
. . . "#%$&
('*) +,'-+,. 0/1+23"
4 !
"/6505 5/
note: this takes into account both propagated and generated carries!
carry out from the block (m-bits in a block) is
; 7 !
85 50<>5"= !#9$&
(.:? ; : !>< = # ?
@ "BACAED,F G D,H D2>I JCKLDMF
1
A 2m1 B2m1 A m+1 Bm+1 Am Bm A m1 Bm1 A1 B1 A0 B0
C2m
VA ... Cm+2
VA
Cm+1
VA
Cm
VA ... C2
VA
C1
VA
C0
S 2m1 T2m1 S m+1 Tm+1 Sm Tm Sm1 Tm1 S1 T1 S0 T0
... ...
block size in carry-skip adder is very important
worst case operation time takes place when
carry is generated in the first block
carry skips intermediate stages
carry is killed in the last block
Block N 1 Block 1 Block 0
M
...
CarrySkipLogic ;
H
worst case addition time is #
( =adder width, =block size)
for optimal block size, minimize delay:
F
H
# '
H
FC#
'
H
#
in practise, non-uniform block sizes gives the best performance
in general, outer blocks should be smaller than middle blocks