Vous êtes sur la page 1sur 43

Arithmétique I

 Opérations arithmétiques – Addition et Soustraction


 Nombres entiers et flottants
MÉMOIRE
PRINCIPALE DD IO IO

BUS SYSTÈME

Cache MMU Unité de Unité de Cache


instructions TLB contrôle traitement données

ALU
Décodeur
Unité
PC flottante

CPU Registres
Rappel sur l'écriture des entiers en base 2
 Entiers positifs

 
n −1
A= 
i =0
ai 2i , ai  0,1, A  0,2 n − 1

 Entiers relatifs (complément à 2)

 
n−2
B = −bn −1 2 n −1
+  bi 2i , bi  0,1, B  − 2 n −1 ,2 n −1 − 1
i =0
Unité Arithmétique & Logique
 Cœur du microprocesseur
 Opérations simples sur mots binaires
➢ Inversion (NON)
➢ ET/OU
➢ Addition

 Les UAL modernes font bien plus…


L’UAL (2)
Demi-Additionneur

 Le demi additionneur est un circuit combinatoire qui permet de réaliser la


somme arithmétique de deux nombres A et B chacun sur un bit.
 A la sotie on va avoir la somme S et la retenu R ( Carry).

A S
DA
B R

Pour trouver la structure ( le schéma ) de ce circuit on doit en


premier dresser sa table de vérité
Demi-Additionneur

 En binaire l’addition sur un seul


bit se fait de la manière suivante:

•La table de vérité associée :

A B R S De la table de vérité on trouve :

0 0 0 0
R = A.B
0 1 0 1
S = A.B + A.B = A  B
1 0 0 1
1 1 1 0
Demi-Additionneur

R = A.B
S = A B

A S
B

7
Additionneur complet

 En binaire lorsque on fait une addition il faut tenir


en compte de la retenue entrante.

r4 r3 r2 r1 r0= 0 ri-1
a4 a3 a2 a1 ai
+ b4 b3 b2 b1 + bi

r4 s4 s3 s2 s1 ri si
Additionneur complet 1 bit

 L’additionneur complet un bit possède 3 entrées :


➢ ai : le premier nombre sur un bit.
➢ bi : le deuxième nombre sur un bit.
➢ ri-1 : le retenue entrante sur un bit.

 Il possède deux sorties :


➢ Si : la somme
➢ Ri la retenue sortante

ai
Si
bi
Additionneur
complet
ri-1
Ri
Additionneur complet 1 bit

ai bi ri-1 ri si
0 0 0 0 0
Table de vérité d’un additionneur 0 0 1 0 1
complet sur 1 bit
0 1 0 0 1
0 1 1 1 0
1 0 0 0 1
1 0 1 1 0
1 1 0 1 0
1 1 1 1 1
Si = Ai .Bi .Ri −1 + Ai .Bi .R i −1 + Ai .B i .R i −1 + Ai .Bi .Ri −1
Ri = Ai Bi Ri −1 + Ai B i Ri −1 + Ai Bi R i −1 + Ai Bi Ri −1
Additionneur complet 1 bit

Si on veut simplifier les équations on obtient :

S i = Ai .Bi .Ri −1 + Ai .Bi .R i −1 + Ai .B i .R i −1 + Ai .Bi .Ri −1


S i = Ai .( Bi .Ri −1 + Bi .R i −1 ) + Ai .( B i .R i −1 + Bi .Ri −1 )
S i = Ai ( Bi  Ri −1 ) + Ai .( Bi  Ri −1 )
S i = Ai  Bi  Ri −1

Ri = Ai Bi Ri −1 + Ai B i Ri −1 + Ai Bi R i −1 + Ai Bi Ri −1
Ri = Ri −1.( Ai .Bi + Ai .B i ) + Ai Bi ( R i −1 + i Ri −1 )
Ri = Ri −1.( Ai  Bi ) + Ai Bi
Schéma d’un additionneur complet
R i = A i .Bi + R i −1.(Bi  A i )
Si = A i  Bi  R i −1

Ai

Bi
Si
Ri-1

Ri
Une UAL 1 bit
En utilisant des Demi Additionneurs
R i = A i .Bi + R i −1.(Bi  A i )
Si = A i  Bi  R i −1
Si on pose X = A i  Bi et Y = A i Bi
On obtient :
R i = Y + R i −1.X
Si = X  R i −1
et si on pose Z = X  R i −1 et T = R i −1.X
On obtient :
Ri = Y + T
Si = Z
• On remarque que X et Y sont les sorties d’un demi additionneur ayant comme
entrées A et B
• On remarque que Z et T sont les sorties d’un demi additionneur ayant comme
entrées X et Ri-1
En utilisant des Demi Additionneurs

X = A i  Bi
Y = A i Bi
Z = X  R i −1
T = R i −1.X
Ri = Y + T AI
Y
RI
Si = Z BI
Demi Add

T
Demi Add
RI-1
Z SI
Additionneur sur 4 bits
 Un additionneur sur 4 bits est un circuit qui permet de faire l’addition de deux
nombres A et B de 4 bits chacun
➢ A(a3a2a1a0)
➢ B(b3b2b1b0)
En plus il tient en compte de la retenue entrante

 En sortie on va avoir le résultat sur 4 bits ainsi que la retenue ( 5 bits en sortie )
 Donc au total le circuit possède 9 entrées et 5 sorties.
 Avec 9 entrées on a 29=512 combinaisons !!!!!!
Comment faire pour représenter la table de vérité ?????
 Il faut trouver une solution plus facile et plus efficace pour concevoir ce circuit
?
Additionneur sur 4 bits
• Lorsque on fait l’addition en binaire , on additionne bit par bit en commençant à
partir du poids fiable et à chaque fois on propage la retenue sortante au bit du rang
supérieur.
L’addition sur un bit peut se faire par un additionneur complet sur 1 bits.

r3 r2 r1 r0= 0
a4 a3 a2 a1
+ b4 b3 b2 b1

r4 s 4 r3 s 3 r2 s 2 r1 s 1

r4 s4 s3 s2 s1 Résultat final
Additionneur 4 bits ( schéma )

R0=0
A4 B4 A3 B3 A2 B2 A1 B1
R3 R2 R1

ADD4 ADD3 ADD2 ADD1

R4 S4 S3 S2 S1

18
Additionneur à retenue anticipée

 L'inconvénient des structures précédentes est le temps nécessaire à la réalisation


de l'addition. Ce temps est en effet conditionné par la propagation de la retenue à
travers tous les additionneurs élémentaires.

 Dans un additionneur à retenue anticipée on évalue en même temps la retenue de


chaque étage. Pour cela on détermine pour chaque étage les quantités Pi et Gi
suivantes:
➢ pi = ai  bi (propagation d'une retenue)
➢ gi = ai.bi (génération d'une retenue)
Additionneur à retenue anticipée

pi= ai  bi (propagation d'une retenue)

gi = ai.bi (génération d'une retenue)

Si = ai  bi  ci = pi  ci

ci = gi-1 + pi-1.gi-2 + pi-1.pi-2.gi-3 +................+ pi-1.pi-2.pi-3....p0.c0


Additionneur à retenue anticipée
pi = a i  bi (propagation d'une retenue)
gi = ai.bi (génération d'une retenue)
La retenue entrante à l'ordre i vaut 1 si :
- soit l'étage i-1 a généré la retenue (gi-1 = 1)
- soit l'étage i-1 a propagé la retenue générée à l'étage i-2 (pi-1=1 et gi-2=1)
- soit les étages i-1 et i-2 ont propagé la retenue générée à l'étage i-3
(pi-1=pi-2=1 et gi-3=1)
..........
- soit tous les étages inférieurs ont propagé la retenue entrante dans
l'additionneur (pi-1=pi-2=...=p0=c0=1).
ci = gi-1 + pi-1.gi-2 + pi-1.pi-2.gi-3 +................+ pi-1.pi-2.pi-3....p0.c0

c1 = g0 + p0.c0
c2 = g1 + p1.g0 + p1.p0.c0
c3 = g2 + p2.g1 + p2.p1.g0 + p2.p1.p0.c0
c4 = g3 + p3.g2 + p3.p2.g1 + p3.p2.p1.g0 + p3.p2.p1.p0.c0
Additionneur à retenue anticipée
b3 a3 b2 a2 b1 a1 b0 a0

g.p. g.p. g.p. g.p.

p3 g3 p2 g2 p1 g1 p0 g0

c4 C.L.U. c0

p3 c3 p2 c2 p1 c1 p0

s3 s2 s1 s0

CLU : Carry Look-ahead Unit Si = pi  ci


Bloc g.p.

pi= ai  bi (propagation d'une retenue)


gi = ai.bi (génération d'une retenue)

ai bi

pi gi
Bloc CLU
ci = gi-1 + pi-1.gi-2 + pi-1.pi-2.gi-3 +................+ pi-1.pi-2.pi-3....p0.c0
p3 g3 p2 g2 p1 g1 p0 g0

c0

c4 c3 c2 c1

Délai : 2 portes
C.L. Adder (n>4)
En pratique : n = 4

Pour n >4 :
Arbre de C.L.A multi-niveau (au détriment de la vitesse)

b11a11 b10a10 b9 a9 b8 a8 b7 a7 b6 a6 b5 a5 b4 a4 b3 a3 b2 a2 b1 a1 b0 a0

c0
c12 c8 c4
Arithmétique II
 Opérations arithmétiques – Multiplication et Division
 Unité de Traitement
MÉMOIRE
PRINCIPALE DD IO IO

BUS SYSTÈME

Cache MMU Unité de Unité de Cache


instructions TLB contrôle traitement données

ALU
Décodeur
Unité
PC flottante

CPU Registres
Multiplication - Nombres entiers
Multiplication de deux nombres entiers de n bits:

Binaire:
1000 x (8)
1001 (9)
1000 +
0000 +
0000 +
1000 +
1001000 (72)

Note: résultat -> 2n bits!


Multiplieur 4 bits
A=A3 A2 A1A0 B=B3 B2 B1 B0

P=A*B A3 A2 A1 A0
* B3 B2 B1 B0
P=P7P6P5P4P3 P2 P1P0
A3 B0 A2B0 A1B0 A0B0 PP1
A3 B1 A2B1 A1B1 A0B1 PP2
Ri Ai-1 A3 B2 A2B2 A1B2 A0B2 PP3
Bj A3 B3 A2B3 A1B3 A0B3 PP4

P7 P6 P5 P4 P3 P2 P1 P0
+

PP1 + PP2 = R1 =>


Ri+1
R1 + PP3 = R2 =>
R2 + PP4 = P
Multiplieur 4 bits
A3 B0 A2B0 A1B0 A0B0 A3 A2 A1 A0
B0
A3 B1 A2B1 A1B1 A0B1 0 A3 A2 A1 A0
A3 B2 A2B2 A1B2 A0B2
B1
A3 B3 A2B3 A1B3 A0B3
+ + + + 0
A3 A2 A1 A0
B2

+ + + +
0
A3 A2 A1 A0
B3

+ + + +
0

P7 P6 P5 P4 P3 P2 P1 P0
Multiplication - Implémentation I
Début

A(n)
1 A[0] 0
B(2n)
PP+B

2n
B 1000 x
A 1001 Décaler A (droite)
+[2n]
1000 +
0000 + Décaler B (gauche)
0000 + P (2n)
1000 +
1001000 Fin? NO
Multiplication - Implémentation I
Début

1 0
0 1001 1 0100 2 0010
A[0]
00001000 00010000 00100000
PP+B

Décaler A >>
Décaler B << +
00001000
Fin? NO 00000000 00001000 00001000

B 1000 x 3 0001 4 0000


A 1001 01000000 10000000
1000 +
0000 +
0000 + +
01001000
1000 + 00001000 01001000
1001000
Multiplication - Implémentation II
P+= moitié de poids Début
fort du registre P A(n)
1 A[0] 0
B(n)

P+  P+ + B
n

B 1000 x
A 1001 Décaler A (droite) +[n]
1000 +
0000 + Décaler P (droite) P (2n)
0000 +
1000 +
1001000 Fin? NO
Multiplication - Implémentation II
Début
0 1001 1 0100 2 0010
1 0
A[0]
1000 1000 1000
P+P++B

Décaler A >>
Décaler P >> +
1000
Fin? NO 00000000 01000000 00100000

B 1000 x 3 0001 4 0000


A 1001 1000 1000
1000 +
0000 +
0000 + +
1001
1000 +
00010000 01001000
1001000
Multiplication - Implémentation III
P+= moitié de poids Début
fort du registre P
1 A[0] 0
B(n)
P+  P+ + B
n
B 1000 x
A 1001 Décaler P|A (droite) +[n]
1000 +
0000 +
0000 + P (2n) A(n)
1000 +
1001000 Fin? NO
Multiplication - Implémentation III
Début

1 0
0 1 2
A[0]
1000 1000 1000
P+P++B

Décaler P|A >>


+
1000
Fin? NO 0000 1001 01000 100 001000 10

B 1000 x 3 4
A 1001 1000 1000
1000 +
0000 +
0000 + +
1001
1000 +
0001000 1 01001000
1001000
Division Binaire
Exemple : 11 / 9
1011 1001
11 9
-1001
20 1 , 2 2 ... 1 --------------- 1 ,0 0 1
20 00100
2 - 1001
0 ---------------
01000
- 1001
0 ----------------
10000
- 1001
1 -----------------
0111
Soustraction 5 bits
Diviseur
A=A3 A2 A1A0 D=D3 D2 D1 D0

1011
S=A/D
0 -01001
10
,
S=S7S6S5S4 S3 S2 S1S0
0 -01001
101
0 -01001
RRRR 1011
Q -1001 1 -01001
RRRR 00100
0 -01001
01000
Si R>D alors Q=1 et R-D
0 -01001
10000
sinon Q=0 et R
1 -01001
01110
1 -01001
Diviseur
R D
0 0 0 0 A3
0 D3 D2 D1 Do
+ -
+ - + - + - + - + -0
Q3
Ci+1 + Ci A2
0 D3 D2 D1 Do
+ - + - + - + - + -0
Q2
A1
Si alors 1 0
0 D3 D2 D1 Do
+ - + - + - + - + -0
R Q1
A0
0 D3 D2 D1 Do
+ - + - + - + - + -0
Q0
0
R D
0 D3 D2 D1 Do
+ - + - + - + - + - + -0
Ci+1 - Si Ci Q-1
0
Si 0 D3 D2 D1 Do
+ - + - + - + - + -0
R Q-2
0
0 D3 D2 D1 Do
+ - + - + - + - + -0
Q-3
Division - Implémentation
| 0101 B est stockée dans la moitié
1100 |01000100
Début
de poids fort du registre B
01000 A est stockée dans le registre R
10001
- 01100
1010 Q(2n) COMP
10100
- 01100 ≥0 R-B <0
1000 B(2n)
2n
RR-B
Décaler Q
Décaler Q
(insérer 0) -[2n]
(insérer 1)

Décaler B (droite) R (2n)

Fin? NO On peut simplifier la machine


comme pour la multiplication
Division - Implémentation
Début
0 00000000 C
1 00000000 C
2 00000000 C
≥0 <0
R-B
11000000 01100000 00110000
RR-B
Q << [0]
Q << [1]

Décaler B >> -
00010100
Fin? NO
01000100 01000100 01000100

3 00000001 C
4 00000010 C
5 00000101 C
| 0101
1100 |01000100 00011000 00001100 00000110
01000
10001
- 01100
1010 -
10100 00001000
- 01100 00010100 00010100 00001000
1000
Division - Nombres signés
Approche « standard »: convertir les nombres négatifs en
positifs, diviser, convertir au négatif si nécessaire.
Pour déterminer le signe des résultats, la relation suivante doit
toujours être vraie:
Dividende = Quotient x Diviseur + Reste
Règle: dividende et reste doivent avoir le même signe!
+7 / +2: quotient = +3, reste = +1;
+7 / -2: quotient = -3, reste = +1;
-7 / +2: quotient = -3, reste = -1;
-7 / -2: quotient = +3, reste = -1;
Note: la valeur absolue reste la même!
Multiplication flottante
Nettement plus compliquée que la multiplication entière:
1.110x1010  9.200 x 10-5

1) Additionner les exposants: 10+(-5) = 5


Notation avec excès: 137 + 122 = 259 ??????
137 + 122 - 127 = 132 = 5 + 127
2) Multiplier les mantisses: 1.110 x 9.200 = 10.212000
3) Normaliser: 10.212000 x 105 = 1.0212000 x 106
4) Arrondir: 1.0212000 x 106 = 1.021 x 106
5) Trouver le signe: +1.021 x 106
Multiplication flottante - Algorithme
Début

Additionner les exposants

Multiplier les mantisses

Normaliser le produit
NON (Sous-)Dépassement? OUI
Arrondir Exception

NON Normalisé? OUI

Ajuster le signe du produit

Vous aimerez peut-être aussi