Des booléens aux circuits
matérielUne porte logique est un composant physique qui calcule un opérateur booléen sur des signaux électriques (0 V / 5 V).
AND, OR, NOT, XOR, NAND, NOR et le demi-additionneur
← Retour au cours Logique booléenne Essayer le simulateur
Une porte logique est un composant physique qui calcule un opérateur booléen sur des signaux électriques (0 V / 5 V).
Additionner deux bits avec deux portes seulement : XOR pour la somme, AND pour la retenue.
Les six portes de la fiche (ET, OU, NON, XOR, NAND, NOR) sont dans la barre d'outils : pose-les, relie-les, observe.
Une porte logique traduit un opérateur booléen en composant électronique : une ou deux entrées, une sortie, calculée quasi instantanément. Un processeur en contient plusieurs milliards, assemblées en circuits.
┌─────┐ ┌─────┐
a ────►│ │ a ────►│ │
│ AND ├────► s │ OR ├────► s
b ────►│ │ b ────►│ │
└─────┘ └─────┘
┌─────┐ ┌─────┐
a ────►│ NON ├────► s a ────►│ │
└─────┘ b ────►│ XOR ├────► s
└─────┘
| a | b | AND | OR | XOR |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 | 1 |
| 1 | 0 | 0 | 1 | 1 |
| 1 | 1 | 1 | 1 | 0 |
NAND = NON (a ET b), NOR = NON (a OU b) — l'inverse exact de AND et OR.
| a | b | NAND | NOR |
|---|---|---|---|
| 0 | 0 | 1 | 1 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 0 |
Propriété remarquable : on peut reconstruire NOT, AND et OR avec des portes NAND uniquement (ex. NON a = a NAND a). C'est pour cela que NAND est dite universelle : un fabricant de puces peut produire un seul type de porte et assembler tous les circuits avec.
Additionner deux bits a et b donne un résultat sur 2 bits : la somme et la retenue.
| a | b | retenue (r) | somme (s) |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 |
| 1 | 0 | 0 | 1 |
| 1 | 1 | 1 | 0 |
La colonne « somme » est exactement la table du XOR, et la colonne « retenue » celle du AND : 2 portes suffisent.
┌─────┐
a ────►│ │
│ XOR ├────► s (somme)
b ────►│ │
└─────┘
┌─────┐
a ────►│ │
│ AND ├────► r (retenue)
b ────►│ │
└─────┘
Pour additionner des nombres de plusieurs bits, on chaîne des additionneurs complets (qui prennent aussi une retenue entrante) — hors programme de Première, mais directement construit à partir des mêmes portes de base.
def demi_additionneur(a, b):
somme = a != b # porte XOR
retenue = a and b # porte AND
return somme, retenue
for a in (False, True):
for b in (False, True):
s, r = demi_additionneur(a, b)
print(f"a={int(a)} b={int(b)} -> retenue={int(r)} somme={int(s)}")
NAND et NOR sont universelles : tout circuit peut être reconstruit avec l'une des deux seules.
Demi-additionneur : somme = XOR, retenue = AND — 2 portes, 2 entrées, 2 sorties.