J Portes
J Portes
J Portes
87
NON OU ET
Dans la figure 10.1, on voit les trois circuits que nous utilisons comme briques
de base : à gauche, les traits indiquent les entrées du circuit ; à droite, le circuit
produit une sortie.
Nous utilisons la convention anglo-saxonne qui fait dessiner les circuits qui
calculent des fonctions différentes avec des formes spécifiques. Le Non se dessine
avec un petit rond blanc ; le triangle qui le précède rappelle que l’inverseur
amplifie également le signal. Le Et et le Ou que nous montrons ont deux entrées,
mais nous pouvons utiliser les variantes avec un plus grand nombre d’entrées.
88
1
0
a 0
1
1
0
0
1
1
0 1
0
b 0
1 0
1 f
1
0
c 0
1
1
0
0
1
Fig. 10.2 – Le circuit équivalent à la fonction f (a, b, c) = a.b.c + a.b.c + a.b.c.
10.2.3 Le demi-additionneur
a b a+b
0 0 0
0 1 1
1 0 1
1 1 10
Un problème, simple à résoudre, vient de la dernière ligne dans cette table d’ad-
dition : il faut deux chiffres pour représenter la sortie de notre demi-additionneur :
l’un sera le chiffre de droite, que nous noterons s, et l’autre la retenue que nous
noterons r. Nous pouvons compléter notre table avec ces deux valeurs :
a b a+b r s
0 0 0 0 0
0 1 1 0 1
1 0 1 0 1
1 1 10 1 0
89
a
a.b
1
0
0
1
1
0 a.b+a.b
0
1
1
0
0
1 a.b
1
0
0
1
b
a
1
0
0
1
b
a.b
retenue
1/2 add +
r
90
a 1/2 add s s=a+b+r
b 1/2 add s r
r r out
r
add s
r
Fig. 10.4 – Le circuit additionneur complet, qui additionne trois nombres bi-
naires à un chiffre.
Une fois le circuit construit, nous pouvons le considérer comme une brique
supplémentaire qu’on peut ré-utiliser dans des constructions plus complexes.
Désormais, nous représenterons le demi-additionneur comme indiqué en bas de
la figure : un rectangle qui porte l’étiquette 1/2 add, avec ses deux entrées et
ses deux sorties.
Avec un demi additionneur, on peut avoir le sentiment que nous n’avons pas
beaucoup avancé : à partir de deux entrées, nous avons calculé deux sorties. Or
pour faire l’addition de deux nombres nous avons besoin d’additionner trois bits
dans chaque position : le bit de chacun des nombres mais aussi la retenue de la
colonne précédente. Pour cette raison, considérons une table d’addition de trois
valeurs :
a b c a+b+c s r
0 0 0 0 0 0
0 1 0 1 0 1
1 0 0 1 0 1
1 1 0 10 1 0
0 0 1 1 0 1
0 1 1 10 1 0
1 0 1 10 1 0
1 1 1 11 1 1
Une façon simple de construire un tel circuit consiste à utiliser deux demi-
additionneurs (d’où leur nom). Si le premier demi-additionneur produit une
91
0
+ s0
a0 add
r
b0
+ s1
a1 add
r
b1
+ s2
a2 add
r
b2
+ s3
a3 add
r s4
b3
92
dans nos constructions, en le représentant comme sur la droite de la figure, avec
un rectangle étiquetté avec add.
Sur le même modèle, on peut faire des additionneurs pour des nombres sur
n’importe quel nombre de chiffres binaires : il suffit de multiplier le nombre
d’additionneurs 1 bit.
Il existe d’autres circuits plus rapides pour faire des additions, mais celui-ci
présente l’avantage de la simplicité.
Vous vous demandez pourquoi nous avons utilisé, pour additionner les bits
a0 et b0 un additionneur complet, alors qu’un demi-additionneur aurait suffit.
La réponse se trouve dans la section suivante.
a − b = a + (c1 (b) + 1)
a − b = a + c1 (b) + 1
Dans l’additionneur 4 bits que nous venons de construire, nous avons injecté 0
comme une des trois entrées de l’additionneur complet pour les bits de poids
faible. Nous pouvons aussi y injecter 1 quand nous souhaitons faire une sous-
traction.
Cela nous permet de réaliser un circuit soustracteur sur le même modèle que
l’additionneur : il suffit d’inverser chacun des bits du nombre à soustraire et de
placer un 1 dans l’entrée de l’additionneur pour les bits de poids faible. C’est ce
que nous faisons dans la figure 10.6. Cette figure est à comparer avec la figure
10.5.
93
1
+ s0
a0 add
r
b0
+ s1
a1 add
r
b1
+ s2
a2 add
r
b2
+ s3
a3 add
r s4
b3
c x f
0 0 0
0 1 1
1 0 1
1 1 0
Nous présentons ce circuit sur la figure 10.7. Comme d’habitude, nous avons
placé en bas un schéma qui va nous permettre de réutliser ce circuit dans avoir
besoin d’en préciser les détails. Soulignons que nous avons déja rencontré ce
circuit comme une partie du demi-additionneur.
94
c
1
0
0
1
x 11
00
xc + xc
contr
in inv? out
Fig. 10.7 – Un circuit inverseur ? qui inverse ou pas son entrée x suivant la
valeur de c.
Pour obtenir un circuit qui permet de faire à la fois les additions ou les
soustractions, nous remplaçons les inverseurs du soustracteur de la figure 10.6
par le circuit inverseur conditionnel que nous venons de concevoir, comme dans
la figure 10.8 : si le signal de contrôle est à zéro, l’inverseur conditionnel ne
modifie pas le signal et nous avons un additionneur comme dans la figure 10.5 ;
si le signal de contrôle est à 1, les inverseurs conditionnels inversent les signaux
qu’ils reçoivent en entrée et le circuit fonctionne comme le soustracteur de la
figure 10.6.
Nous avons montré en dessous une version sans détails de notre circuit qu’on
peut utiliser comme élément de construction de circuits plus complexes. Pour
simplifier le schéma, plutôt que de dessiner tous les fils pour a, b et s, on ne
dessine qu’un trait et on indique le nombre de fils représenté par ce trait. Nous
avons nommé le signal de contrôle add/sub pour indiquer que la valeur 0 sur
ce fil provoque une addition et la valeur 1 une soustraction : c’est un usage
courant pour nommer les signaux d’une façon qui permette de se souvenir de
leur fonction.
10.5 Le multiplexeur
Nous allons maintenant construire un circuit qui va nous permettre de choi-
sir, entre plusieurs signaux en entrée, lequel nous souhaitons obtenir en sortie.
95
+ ou −
1
0
1
0 0
1
contr
out s s0
b0 in inv? add
r
a0 11
00
00
11
contr
s s1
b1 in inv? out add
r
a1
11
00
contr
out s s2
b2 in inv? add
r
a2
contr
s s3
b3 in inv? out add
r s4
a3
add/sub
a resultat
4 additionneur 4
soustracteur
b retenue
4
96
c c
11
00
00
11
a
Mux ac | bc
b
a
ac | bc
97
c0 c1 c2
11
00
a0
Mux
a1 11
00
Mux
11
00
a2
Mux
a3
11
00
00
11
Mux out
a4
Mux
a5
Mux
a6
Mux
a7
c c
3 n
Mux Mux
in 1 parmi 8 out in 1 parmi 2^n out
8 1 2^n 1
98
En bas à droite de la figure, on a une version plus générale : avec n signaux
de contrôle, on peut choisir un signal par 2n .
Il existe un circuit du même genre que le multiplexeur, qu’on appelle un
décodeur. Voir les exercices.
Nous avons maintenant tous les éléments pour construire une unité arithmé-
tique et logique : la figure 10.11 ne contient que des éléments que nous connais-
sons déja.
Cette ual est susceptible d’effectuer 5 opérations : trois opérations logiques
(Et, Oui, Non) et deux opérations arithmétiques : addition et soustraction. Elle
possède deux entrées, a et b et une retenue entrante, notée rin . Le signal est
présenté en entrée de circuits qui calculent le résultat possible de toutes les
opérations logiques et celui de l’addition ou de la soustraction suivant l’état du
bit de poids fort du contrôle. Ensuite un multiplexeur permet de choisir, parmi
les quatre valeurs calculées, laquelle sera présentée en sortie comme résultat.
Les codes opérations seront donc :
code opération
000 Non a
001 a + b
010 a OU b
011 a ET b
101 a - b
Une ual 1 bit n’est pas très utile, mais on peut combiner des unités de
traitement d’un bit pour traiter le nombre de bits que l’on veut. La figure 10.12
montre une unité de calcul pour des mots de quatre bits, contruite avec quatre
unités de calcul d’un bit. La partie de droite de la figure contient le symbole
qu’on emploie usuellement pour représenter une ual qui traite des nombres de
n bits.
10.7 Résumé
Aux expressions logiques, on peut faire correspondre des circuits qu’on peut
réaliser avec des transistors. Quand les circuits ne contiennent pas de boucles,
on peut aussi faire correspondre une expression logique à chaque circuit. Des
circuits intéressants sont l’additionneur, le multiplexeur, le décodeur. En les
utilisant, on peut contruire une unité arithmétique et logique.
99
r in operation
1
0
a 0
1
11
00 additionneur
00
11 soustracteur
00
11
b 00
11 mux
1 parmi 4 resultat
11
00
00
11
00
11
00
11
r out
3
r in oper
ALU
1 bit r
r out
100
operation
r in oper
a0 ALU
b0 1 bit r r0
r out
r in oper
a1 ALU op
b1 1 bit r r1 3
r out n
a
n
r in oper r
a2 ALU
b2 1 bit r r2 n
r out b
r in oper
a3 ALU
b3 1 bit r r3
r out
101
10.8 Exercices
Exercice 10.1 : Concevoir un circuit à trois entrées et une sortie, dont la
sortie vaudra 1 si une et une seule de ses entrées est à 1.
Exercice 10.2 : Concevoir un circuit qui reçoit un nombre codé sur quatre
bits et renvoie 1 si ce nombre est supérieur ou égal à 10.
Exercice 10.3 : Concevoir un circuit qui reçoit un nombre codé sur quatre
bits et renvoie 1 si ce nombre est divisible par 3.
Exercice 10.4 : (Amusant) Concevoir un circuit, réalisé seulement avec des
Ou, Et et Non, qui réalise un Ou exclusif sans qu’aucun fil ne se croise.
Exercice 10.5 : (Amusant et difficile) Concevoir un circuit à deux entrées a
et b qui utilise des Ou, des Et et un seul circuit Non, dont les deux sorties valent
a et b.
Exercice 10.6 : Chaque fois qu’un signal traverse une porte Non, Et, Ou,
les transistors qui le composent ont besoin d’un peu de temps pour atteindre
un état stable. Supposons que ce temps t est constant, quelle que soit la porte
élémentaire. Calculer le temps nécessaire en fonction de t pour stabiliser la sortie
d’un demi-additionneur, d’un additionneur complet 1 bit, d’un additionneur
complet 8 bits. Trouver une modification simple dans le schéma de l’additionneur
complet qui permette de diminuer ce temps.
Exercice 10.7 : Dessiner un multiplexeur 1 parmi 5.
Exercice 10.8 : Combien faut-il de multplexeurs élémentaires pour contruire
un multiplexeur 1 parmi n quand n n’est pas une puissance de deux ?
Exercice 10.9 : Dessiner un multiplexeur 1 parmi 64 (heureusement qu’on
peut utiliser le multiplexeur 1 parmi 8 ; on peut même définir des multiplexeurs
1 parmi 16 et 1 parmi 32 pour simplifier le travail)
Exercice 10.10 : (à faire) Un circuit décodeur élémentaire possède une entrée
a et deux sorties s0 et s1 : quand a = 0, s0 = 1 et s1 = 0. Quand a = 1 c’est le
contraire. : dessiner un circuit décodeur.
Exercice 10.11 : (à faire) Un décodeur général possède n entrées et 2n
sorties ; si les entrées codent le nombre a en binaire, alors toutes les sorties sont
à 0, sauf la sortie sa qui est à 1. Dessiner le circuit d’un décodeur à quatre
sorties. Dessiner le circuit d’un décodeur à 3 entrées.
Exercice 10.12 : A partir du schéma de l’unité de calcul de la figure 10.11,
déterminer ce qui se produit quand on envoie les codes opération 100, 110 et
111.
Exercice 10.13 : (à ne pas pas faire) Modifier le schéma de l’alu 1 bit pour
permettre les décalages de mots. On peut le faire, grace aux retenues entrante
et sortante, sans modifier le schéma de l’alu 4 bits et en n’utilisant que deux
multiplexeurs 1 parmi 2.
102