Un circuit combinatoire oublie tout dès que ses entrées changent. Pour compter, pour attendre, pour se souvenir, il faut boucler la sortie d'une porte sur l'entrée d'une autre : le circuit acquiert alors un état, qui dépend de son passé. Cinq planches pour passer du verrou de deux portes aux mémoires de milliards de bits, en simulant chaque circuit délai après délai.
Deux inverseurs bouclés l'un sur l'autre ont deux états stables : si la sortie du premier vaut 1, celle du second vaut 0, ce qui maintient le premier à 1, et inversement. C'est un bit de mémoire. Tant que l'alimentation est là, il garde sa valeur. Toute la suite consiste à pouvoir écrire dans cette boucle au bon moment, puis à en assembler des milliards. Dans un circuit séquentiel synchrone, une horloge donne le rythme : les bascules ne changent d'état qu'à ses fronts, et entre deux fronts, la logique combinatoire a le temps de calculer l'état suivant.
| Mémoire | Principe | Garde le bit sans alimentation ? | Usage |
|---|---|---|---|
| Bascule, registre | portes bouclées | non | état du processeur, quelques centaines de bits |
| SRAM | deux inverseurs bouclés, 6 transistors | non | mémoires caches, rapides |
| DRAM | charge d'un condensateur, 1 transistor | non, et il faut la rafraîchir | mémoire vive principale, dense |
| Flash | charge piégée dans une grille isolée | oui, pendant des années | clés USB, disques SSD, téléphones |
Croisons deux portes NON-OU : la sortie de chacune entre dans l'autre. Tant que S et R restent à 0, chaque porte se contente d'inverser l'autre, et le verrou garde son état. Une impulsion sur S (set) force Q̅ à 0, donc Q à 1 ; une impulsion sur R (reset) fait l'inverse. Mais l'impulsion doit durer assez longtemps pour que le signal fasse le tour de la boucle : trop brève, elle est oubliée. Et activer S et R ensemble est interdit : les deux sorties tombent à 0, et si on les relâche au même instant, les deux portes repartent ensemble et le verrou oscille, faute de savoir de quel côté tomber. Dans un circuit réel, l'une finit par l'emporter au hasard : c'est la métastabilité.
Le verrou réagit à tout instant ; un système synchrone veut au contraire que chaque bascule prenne sa nouvelle valeur à un instant précis, le front montant de l'horloge. La bascule D maître-esclave enchaîne deux verrous. Le maître est transparent quand l'horloge est basse : il suit l'entrée D. L'esclave est transparent quand l'horloge est haute : il recopie le maître. Au front montant, le maître se fige et l'esclave affiche ce qu'il contenait : Q prend la valeur de D à cet instant, et la garde jusqu'au front suivant. D doit cependant être stable un peu avant le front, le temps de prépositionnement, faute de quoi le maître n'a pas fini de basculer quand il se fige.
Une bascule qui s'inverse à chaque front divise la fréquence par deux. Dans le compteur asynchrone, chaque bascule est commandée par la précédente : c'est le plus simple, mais le changement se propage de bit en bit, et pendant ce temps la sortie affiche des valeurs fausses. Passer de 7 (0111) à 8 (1000) fait défiler 0110, 0100 et 0000. Pour compter jusqu'à 9 seulement, on remet tout à zéro dès que 10 apparaît : la valeur 10 existe donc brièvement. Dans le compteur synchrone, toutes les bascules reçoivent la même horloge, et une logique combinatoire calcule l'état suivant à l'avance : tous les bits changent ensemble, au prix de quelques portes de plus.
Un registre à décalage aligne n bascules D, chacune recopiant la précédente à chaque front : les bits avancent d'une case par coup d'horloge. On s'en sert pour convertir un message série, reçu bit par bit sur un seul fil, en un mot parallèle, et inversement. Rebouclons maintenant l'entrée sur un OU exclusif de quelques sorties, les prises : on obtient un registre à rétroaction linéaire (LFSR). Avec des prises bien choisies, celles d'un polynôme primitif, il parcourt les 2n − 1 états non nuls avant de revenir au départ, en produisant une suite de bits qui a toutes les apparences du hasard. On l'utilise pour brouiller les signaux, tester les circuits, générer du bruit ou calculer des codes de contrôle (CRC).
Une mémoire est un immense tableau de bits. Trois questions se posent : comment désigner une case parmi des milliards, comment garder un bit quand il est stocké sous forme d'une charge qui fuit, et comment se protéger des bits qui basculent par accident, sous l'effet d'une particule cosmique ou d'une cellule défaillante.
Les bits sont rangés en lignes, ou mots. Une adresse de a bits entre dans un décodeur, qui active exactement une ligne parmi 2a : chaque bit d'adresse en plus double la capacité. À l'écriture, les bits du mot sont envoyés sur les colonnes et recopiés dans les cellules de la ligne active ; à la lecture, la ligne active pose son contenu sur les colonnes. L'animation écrit des mots dans une petite mémoire de 16 mots de 8 bits, puis les relit.
Une cellule de DRAM stocke son bit comme une charge dans un minuscule condensateur, de l'ordre de 25 femtofarads, isolé par un seul transistor. La charge fuit : la tension décroît comme e−t/τ, et le bit devient illisible quand elle passe sous le seuil de lecture, ici la moitié de la tension écrite. Il faut donc relire et réécrire chaque ligne périodiquement : c'est le rafraîchissement, toutes les 64 ms dans les mémoires usuelles. Les constantes de temps varient beaucoup d'une cellule à l'autre (loi log-normale) ; ce sont les plus fuyantes qui fixent la période.
Le code de Hamming (1950) ajoute 3 bits de parité à 4 bits de données. Chaque bit de parité surveille un groupe différent de positions. Si un bit bascule, les parités fausses forment, écrites en binaire, la position du bit fautif : le syndrome. Il suffit de l'inverser pour corriger l'erreur. Une erreur simple est toujours corrigée ; deux erreurs dans le même mot, en revanche, trompent le code. Cliquez sur un bit du mot codé pour simuler une erreur.
Planches 1 et 2. Simulation à délai unitaire : à chaque pas, chaque porte prend la valeur calculée à partir de ses entrées au pas précédent. Les durées minimales sont trouvées en rejouant la scène avec toutes les durées possibles. La bascule D comporte 2 inverseurs et 8 portes NON-ET.
Planche 3. Bascules de délai 1, porte de détection du modulo de délai 1, remise à zéro asynchrone (compteur asynchrone) ou chargement synchrone de 0 (compteur synchrone). La simulation porte sur 2M + 2 périodes d'horloge ; la valeur lue juste avant chaque front est comparée à la suite 0, 1, …, M − 1, 0, …
Planche 4. Registre de Fibonacci : le bit entrant est le OU exclusif des bits aux prises choisies. La période est comptée en faisant tourner le registre depuis l'état 1 jusqu'à ce qu'il y revienne. Les prises maximales proposées sont celles de polynômes primitifs connus.
Planche 5. DRAM : constantes de temps log-normales de médiane 2 s, graine fixe. Hamming : positions 1 à 7, parités aux positions 1, 2 et 4 ; erreurs indépendantes de probabilité p sur chaque bit ; un mot est compté faux si les 4 données décodées diffèrent des données d'origine.