Un ordinateur ne connaît que deux tensions, qu'on appelle 0 et 1. Avec quelques transistors, on fabrique des portes qui combinent ces bits selon les règles de l'algèbre de George Boole ; avec des portes, on construit des circuits qui additionnent, comparent, décodent et aiguillent. Cinq planches pour passer de l'interrupteur au calcul, en vérifiant à chaque étape que le circuit fait exactement ce que dit l'algèbre.
Un circuit combinatoire calcule ses sorties à partir de ses seules entrées présentes, sans mémoire du passé : à chaque combinaison d'entrées correspond une sortie, et la liste complète de ces correspondances est la table de vérité. Avec n entrées, elle a 2n lignes. L'algèbre de Boole note le ET comme un produit (A·B), le OU comme une somme (A + B) et le NON par une barre (A). Elle permet de transformer un circuit en un autre qui fait la même chose avec moins de portes. Les circuits séquentiels, qui mémorisent un état, sont le sujet d'un autre cahier.
| Porte | Notation | Vaut 1 quand… | Transistors CMOS |
|---|---|---|---|
| NON (inverseur) | A | A vaut 0 | 2 |
| ET | A·B | A et B valent 1 | 6 |
| OU | A + B | au moins une entrée vaut 1 | 6 |
| NON-ET | A·B | au moins une entrée vaut 0 | 4 |
| NON-OU | A + B | les deux entrées valent 0 | 4 |
| OU exclusif | A ⊕ B | les entrées sont différentes | 8 à 12 selon la réalisation |
Dans un circuit CMOS, chaque porte comporte deux réseaux d'interrupteurs. Les transistors P, en haut, conduisent quand leur grille est à 0 et relient la sortie à l'alimentation (1). Les transistors N, en bas, conduisent quand leur grille est à 1 et relient la sortie à la masse (0). Les deux réseaux sont construits pour être complémentaires : pour toute combinaison d'entrées, exactement l'un des deux conduit. Il n'y a donc jamais de court-circuit ni de sortie flottante, et la porte ne consomme presque rien au repos. Le NON-ET met ses transistors N en série et ses P en parallèle ; le NON-OU fait l'inverse. Le ET et le OU s'obtiennent en ajoutant un inverseur : ils sont plus coûteux que leurs versions inversées.
Le NON-ET est universel : avec lui seul, on fabrique n'importe quelle fonction logique. Relier ses deux entrées en fait un inverseur ; un NON-ET suivi d'un inverseur donne un ET ; d'après les lois de De Morgan, un NON-ET dont on a inversé les entrées donne un OU, car le complément de A·B vaut A + B. Comme le NON-ET est aussi la porte CMOS la plus simple, des circuits entiers ont été construits avec ce seul modèle de porte : l'ordinateur de guidage des missions Apollo comptait environ 5 600 portes NON-OU à trois entrées, toutes identiques ; le NON-OU est universel lui aussi.
Toute fonction s'écrit comme une somme de mintermes : un ET des quatre variables pour chaque ligne de la table qui vaut 1. C'est juste, mais coûteux. Deux mintermes qui ne diffèrent que par une variable se fondent en un seul terme sans cette variable, car X·A + X·A = X. Le tableau de Karnaugh (1953) range les 16 cases de sorte que deux cases voisines ne diffèrent que d'une variable, y compris d'un bord à l'autre : il suffit de regrouper les 1 voisins par blocs de 2, 4 ou 8. Les cases marquées × sont indifférentes (combinaisons qui n'arrivent jamais) : on peut les inclure dans un groupe si cela l'agrandit. Ici, le regroupement est calculé par la méthode de Quine et McCluskey, qui trouve tous les groupes maximaux puis choisit le plus petit ensemble qui couvre tous les 1.
L'addition binaire se pose comme à l'école : on additionne les deux bits et la retenue venue de la droite, on écrit le bit de somme et on propage une retenue vers la gauche. L'additionneur complet le fait avec cinq portes : P = A ⊕ B indique si la retenue doit être propagée, G = A·B si une retenue est générée ; la somme vaut P ⊕ Ce et la retenue sortante G + P·Ce. En chaînant n additionneurs complets, on additionne deux nombres de n bits. Mais chaque porte met un peu de temps à réagir, un délai de porte, et la retenue doit parfois traverser toute la chaîne : le résultat n'est juste qu'au bout de 2n délais dans le pire cas. Avant, les sorties peuvent changer plusieurs fois : ce sont des aléas. La simulation ci-dessous calcule chaque porte, délai après délai.
Un décodeur qui allume les segments d'un afficheur, un multiplexeur qui choisit une entrée parmi plusieurs et peut réaliser n'importe quelle fonction, et un piège que tout concepteur doit connaître : l'aléa, cette brève impulsion parasite qui naît quand deux chemins d'un même signal n'ont pas la même longueur.
Un chiffre de 0 à 9 arrive sur quatre fils, en binaire (code DCB). L'afficheur a sept segments, nommés de a à g. Il faut donc sept fonctions logiques de quatre variables. Les combinaisons 10 à 15 n'arrivent jamais : ce sont des cases indifférentes, qui permettent de grands regroupements. Chaque équation ci-dessous a été simplifiée par la méthode de la planche 3.
Un multiplexeur 8 vers 1 recopie sur sa sortie celle de ses huit entrées de données D0 à D7 dont le numéro est écrit en binaire sur ses trois entrées de sélection A, B, C. Branchons sur les données les huit valeurs d'une table de vérité : la sortie devient exactement cette fonction de A, B, C. Un seul multiplexeur réalise ainsi n'importe laquelle des 256 fonctions de trois variables ; c'est le principe des tables de correspondance (LUT) des circuits programmables FPGA.
La fonction F = A·B + A·C vaut 1 quand B = C = 1, que A soit à 0 ou à 1. Pourtant, quand A passe de 1 à 0, la porte ET du haut s'éteint aussitôt, alors que celle du bas attend que l'inverseur ait réagi. Pendant ce délai, aucune des deux n'est active, et la sortie tombe brièvement à 0 : c'est un aléa statique. Le tableau de Karnaugh en donne le remède : ajouter le terme redondant B·C, le consensus, qui recouvre la frontière entre les deux groupes et maintient la sortie à 1 pendant la transition.
Planche 1. Chaque transistor est un interrupteur idéal. La sortie est déterminée en cherchant un chemin conducteur entre la sortie et l'alimentation, puis entre la sortie et la masse ; la page vérifie qu'exactement l'un des deux existe pour chaque ligne, et que la valeur obtenue est celle de l'équation.
Planche 2. Le réseau est évalué porte par porte dans l'ordre topologique, pour les quatre combinaisons d'entrées ; la profondeur est le plus long chemin entre une entrée et la sortie.
Planche 3. Les impliquants premiers sont obtenus en fusionnant systématiquement les termes qui ne diffèrent que d'une variable (Quine-McCluskey). Le choix des groupes est une recherche exhaustive de la couverture comptant le moins de termes, puis le moins de littéraux. L'expression obtenue est ensuite réévaluée sur les 16 entrées.
Planche 4. Simulation à délai unitaire : à chaque pas, chaque porte prend la valeur calculée à partir de ses entrées au pas précédent. Le circuit part de l'état stable correspondant aux entrées précédentes. Pour n ≤ 4, toutes les paires (entrées précédentes, nouvelles entrées) sont simulées pour trouver le pire cas.
Planche 5. Aléas : simulation à délais de transport entiers, inverseur de délai réglable, portes ET et OU de délai 1.