TD5
CPU (1)
additionneur avec calcul avancé de retenue
a
15b
15c
16x
15c
15a
14b
14x
14c
14a
1b
1x
1c
1a
0b
0x
0c
0temps de propagation pour n additionneurs = n fois le temps d'un additionneur pour 16 bits à 15 ns par additionneur : 240 ns
● c'est le calcul (et sa propagation) des retenues qui ralentit l'obtention du résultat final
● on va chercher à améliorer ce temps de calcul en
essayant d'anticiper la valeur des retenues c i
● Retrouver les relations logiques donnant le résultat de la
somme arithmétique s i = a i + b i et le carry c i+1 en fonction
des 2 bits a i et b i et de c i .
a
ib
ic
iS
ic
i+10 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
a
ib
ic
iS
ic
i+10 0 0 0 0
0 0 1 1 0
0 1 0 1 0
0 1 1 0 1
1 0 0 1 0
1 0 1 0 1
1 1 0 0 1
1 1 1 1 1
a i b i
c i 00 01 11 10
0 0 0 1 0
1 0 1 1 1
c i + 1 = a i . b i + a i . c i + b i . c i S i = a i .b i .c i + a i .b i . c i
+ a i .b i .c i + a i .b i . c i
= ( a i b i + a i .b i ) c i +( a i .b i + a i b i ) c i
= ( a i ⊕ b i ) c i +( a i ⊕ b i ) c i
= a i ⊕ b i ⊕ c i
● Exprimer ces relations en fonction de g i = a i .b i , de p i = a i + b i et de c i
●
g i est le "générateur" de carry et p i le "propagateur" de carry
(Brevet IBM en 1957)
S i = a i ⊕ b i ⊕ c i
c i+ 1 =a i . b i + a i . c i + b i . c i
= a i . b i +( a i + b i ) . c i
= g i + p i . c i
● Ecrire les relations trouvées au 1 pour c1 et c2 et dessinez
le logigramme correspondant
c
1= g
0+ p
0. c
0c
2= g
1+ p
1. c
1c 0 p 0
p 1 g 0
g 1
c 1
c 2
● Ré-écrire c2 en fonction de p1, p0, g1, g0, et c0 .
Dessinez les logigramme correspondant pour c1 et c2.
Conclure quant à la complexité du 2nd circuit par rapport
au premier.
c
1= g
0+ p
0. c
0c
2= g
1+ p
1. c
1c 0 p 0
p 1 g 0
g 1
c 1
c 2
c
1= g
0+ p
0. c
0c
2= g
1+ p
1. g
0+ p
1.p
0.c
0c 0 p 0
p 1 g 0
g p 0 c 0
c 1
g 0
p 1 c 2
● Ecrire les expressions de c 1 à c 4 . Ré-écrire c 4 en posant
G 0 = g 3 + p 3 g 2 + p 3 p 2 g 1 + p 3 p 2 p 1 g 0 et P 0 = p 3 p 2 p 1 p 0
c
1= g
0+ p
0.c
0c
2= g
1+ p
1.c
1= g
1+ p
1.g
0+ p
1.p
0.c
0c
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
0c
4= g
3+ p
3.c
3= g
3+ p
3.g
2+ p
3.p
2.g
1+ p
3.p
2.p
1.g
0+ p
3.p
2.p
1.p
0.c
0= G
0+ P
0.c
0en posant
G
0= g
3+ p
3.g
2+ p
3.p
2.g
1+ p
3.p
2.p
1.g
0et
P
0= p
3.p
2.p
1.p
0c
0p
0g
0c
1c
2p
1g
1c
3p
2g
2G
0p
3P
0g
3g 3-0
g 3-0 p 3-0
c 0
c 1 c 2
c 3 P 0
G 0
● On va maintenant considérer une "boîte noire"
générant c1 à c3 ainsi que P0 et G0 à partir de gk et
pk (k=0-3) et de c0
● Faire de même avec c5 à c8 en posant
G1 = g7 + p7 g6 + p7 p6 g5 + p7 p6 p5 g4 et P1 = p7 p6 p5 p4
montrer que l'on peut utiliser la même boîte noire pour
les générer. Généraliser
c
5= g
4+ p
4.c
4c
6= g
5+ p
5.c
5= g
5+ p
5.g
4+ p
5.p
4.c
4c
7= g
6+ p
6.c
6= g
6+ p
6.g
5+ p
6.p
5.g
4+ p
6.p
5.p
4.c
4c
8= g
7+ p
7.c
7= g
7+ p
7.g
6+ p
7.p
6.g
5+ p
7.p
6.p
5.g
4+ p
7.p
6.p
5.p
4.c
4= G
1+ P
1.c
4en posant
G
1= g
7+ p
7.g
6+ p
7.p
6.g
5+ p
7.p
6.p
5.g
4et
P
1= p
7.p
6.p
5.p
4g
3-0p
3-0c
0P
0G
0c
1c
2c
3g
7-4p
7-4c
4P
1G
1c c
c
A
B
g
11-8p
11-8c
8P
2G
2c
9c
10c
11g
15-12p
15-12c
12P
3G
3c c
c
C
D
● Reprendre les équations de c4, c8, c12 et c16 en posant
G 0 = G3 + P3 G2 + P3 P2 G 1 + P3 P2 P1 G0 et
P 0 = P3 P2 P1 P0 . Montrer que l'on peut utiliser la
même boite pour générer c4, c8 et c12.
c
4= G
0+ P
0c
0c
8= G
1+ P
1c
4= G
1+ P
1G
0+ P
1P
0c
0c
12= G
2+ P
2c
8= G
2+ P
2G
1+ P
2P
1G
0+ P
2P
1P
0c
0c
16= G
3+ P
3c
12= G
3+ P
3G
2+ P
3P
2G
1+ P
3P
2P
1G
0+P
3P
2P
1P
0c
0= G
0+ P
0c
0avec
G
0= G
3+ P
3c
12= G
3+ P
3G
2+ P
3P
2G
1+ P
3P
2P
1G
0et P
0= P
3P
2P
1P
0On peut réaliser c
4, c
8, c
12, G
0et P
0à l'aide du même circuit
G
3-0P
3-0c
0P
0G
0c
4c
8c
12E
a 0 b 0
g 0 p 0
a i b i
g i p i
a 15 b 15
g 15 p 15
A
B
C
G 0 P 0 c 1
c 2 c 3
c 4
G 1 P 1 c 5
c 6 c 7
c 8
G 2 P 2 c 9
c 10 c 11
c 12 c 13
c 14 c 15
D E
a 0
b 0 S 0
a i
b i S i
c i
b 15 S 15
c 15 a 15 c 0
p i = a i + b i g i = a i . b i
S i = a i ⊕ b i ⊕ c i
c 16 = g 15 + p 15 . c 15
détection d'overflow dans une addition
● rappels sur la représentation des nombres entiers en complément à 2
● 2 n entiers compris entre -2 n-1 et 2 n-1 -1 A = ∑
k= 0 n− 2
a k 2 k − a n−1 2 n−1 A = A 1
A A = 2 n − 1
A A = 0
● coder en complément à 2 les nombres -17, -127, -128
1710 = 000100012
11101110 inversion des bits 1 +
111011112 = -1710
1710 = 000100012
11101110 inversion des bits + 1
= 111011112 = -1710 12710 = 011111112
10000000 inversion des bits + 1
= 10000001 =-12710
1710 = 000100012
11101110 inversion des bits 1 +
111011112 = -1710 12710 = 011111112
10000000 inversion des bits 1 +
10000001 =-12710 12810 = 100000002
01111111
1 +
100000002 = -12810
-8 1000
-7 1001
-6 1010
-5 1011
-4 1100
-3 1101
-2 1110
-1 1111
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
Représentation des entiers signés codés sur 4 bits
● effectuer les opérations (+3) + (+4)
(+6) + (-3)
(-2) + (-6)
(+4) + (-7)
000 +3 0011 + +4 + 0100 +7 0111
-8 1000
-7 1001
-6 1010
-5 1011
-4 1100
-3 1101
-2 1110
-1 1111
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
+3 0011 + +4 + 0100 +7 0111 100 +6 0110 + -3 + 1101 +3 10011
-8 1000
-7 1001
-6 1010
-5 1011
-4 1100
-3 1101
-2 1110
-1 1111
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
+3 0011 + +4 + 0100 +7 0111 +6 0110 + -3 + 1101 +3 10011 110 -2 1110 + -6 + 1010 -8 11000
-8 1000
-7 1001
-6 1010
-5 1011
-4 1100
-3 1101
-2 1110
-1 1111
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
+3 0011 + +4 + 0100 +7 0111 +6 0110 + -3 + 1101 +3 10011 -2 1110 + -6 + 1010 -8 11000 000 +4 0100 + -7 +1001 -3 1101
-8 1000
-7 1001
-6 1010
-5 1011
-4 1100
-3 1101
-2 1110
-1 1111
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
● effectuer les opérations (-3) + (-6)
(+5) + (+6)
(-8) + (-8)
(+7) + (+7)
0000 -3 1101 + -6 + 1010
-9 10111 = +7
-8 1000
-7 1001
-6 1010
-5 1011
-4 1100
-3 1101
-2 1110
-1 1111
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
-3 1101 + -6 + 1010
-9 10111 = +7 100
+5 0101 + +6 + 0110
+11 1011 = -5
-8 1000
-7 1001
-6 1010
-5 1011
-4 1100
-3 1101
-2 1110
-1 1111
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
-3 1101 + -6 + 1010
-9 10111 = +7 +5 0101
+ +6 + 0110
+11 1011 = -5 000
-8 1000 + -8 + 1000
-16 10000 = 0
-8 1000
-7 1001
-6 1010
-5 1011
-4 1100
-3 1101
-2 1110
-1 1111
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
-3 1101 + -6 + 1010
-9 10111 = +7 +5 0101
+ +6 + 0110
+11 1011 = -5 -8 1000
+ -8 + 1000
-16 10000 = 0 111
+7 0111 + +7 + 0111
+14 1110 = -2
-8 1000
-7 1001
-6 1010
-5 1011
-4 1100
-3 1101
-2 1110
-1 1111
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
000 +3 0011 + +4 + 0100 +7 00111 100 +6 0110 + -3 + 1101 +3 10011 110 -2 1110 + -6 + 1010 -8 11000 000 +4 0100 + -7 +1001
000 -3 1101 + -6 + 1010
-9 10111 = +7 100
+5 0101 + +6 + 0110
+11 01011 = -5 000
-8 1000 + -8 + 1000
-16 10000 = 0 111
+7 0111
+ +7 + 0111
OVERFLOW = CarryInn ⊕ CarryOutn
a0 b0
a1 b1
a2 b2
a3
ainv bneg
CarryInCarryOut
b3 r3
r2 r1 r0
0 0 0
zero
Set
Op