Tous les circuits vus jusqu’ici étaient combinatoires : on change les entrées, les sorties suivent, sans mémoire du passé. Mais un ordinateur est surtout de la mémoire — registres, caches, mémoire principale — et même le pipeline doit conserver chaque instruction entre deux étages. Pour retenir un bit, un circuit a besoin d’un ingrédient nouveau : la rétroaction, une sortie reliée à ses propres entrées.
Le verrou SR : deux états stables
Croisez deux portes NOR, la sortie de chacune alimentant l’entrée de l’autre :
| S | R | Q | |
|---|---|---|---|
| 0 | 0 | Q | hold |
| 0 | 1 | 0 | reset |
| 1 | 0 | 1 | set |
| 1 | 1 | 0 | forbidden: Q = Q̄ = 0 |
Two cross-coupled NOR gates: the feedback loop stores one bit. S sets Q to 1, R resets it to 0, and with both at 0 the loop holds its value. To see why S = R = 1 is forbidden: turn auto off, set both to 1 and settle, then lower both before pressing step. Released in the same instant, the two gates race and oscillate forever.
Unit-delay model: every gate takes one step to react. With auto off, toggle switches and press step to watch the change travel gate by gate.
Avec les deux entrées à 0, le circuit a exactement deux états cohérents : Q = 0 (et Q̄ = 1), ou Q = 1 (et Q̄ = 0). La sortie de chaque porte maintient l’autre en place : quel que soit l’état où il se trouve, il y reste. C’est un bit de mémoire.
- Levez brièvement S (set) et Q passe à 1, et y reste après le retour de S à 0.
- Levez brièvement R (reset) et Q passe à 0, et y reste.
- Avec S = R = 0, le verrou conserve ce qui a été positionné en dernier.
S = R = 1 est interdit. Les deux sorties sont forcées à 0, ce qui contredit le fait que Q̄ est l’inverse de Q. Et quand les deux entrées reviennent à 0 au même instant, le verrou n’a aucune raison de préférer un état plutôt que l’autre. Avec auto désactivé, vous pouvez provoquer exactement cela : le simulateur signale une course, les deux portes se poursuivant l’une l’autre. Dans du vrai matériel, le verrou finit par tomber au hasard dans l’un des deux états.
Le verrou D à validation
Deux améliorations rendent le verrou utilisable. Une entrée de validation (enable) décide quand il peut changer, et une seule entrée de donnée D remplace S et R, si bien que la combinaison interdite ne peut plus se produire :
| E | D | Q | |
|---|---|---|---|
| 0 | x | Q | hold |
| 1 | 0 | 0 | transparent |
| 1 | 1 | 1 | transparent |
An SR latch (the two right NANDs, active-low) behind two gating NANDs. While E = 1 the latch is transparent and Q follows D; when E drops, Q keeps the last value. The inverter makes S and R always opposite, so the forbidden state cannot happen.
Unit-delay model: every gate takes one step to react. With auto off, toggle switches and press step to watch the change travel gate by gate.
Tant que E = 1, le verrou est transparent : Q suit D. Quand E retombe à 0, Q conserve la dernière valeur de D. C’est une vraie mémoire d’un bit, mais sensible au niveau : tant que E est haut, tout changement de D passe directement.
L’horloge
Un ordinateur coordonne des millions d’éléments de mémoire avec un seul signal : l’horloge, un signal carré qui alterne entre 0 et 1 à un rythme fixe. Sa période est la durée d’un cycle : 250 ps à 4 GHz, 10 ns à 100 MHz. L’horloge part en général d’un cristal de quartz qui oscille à quelques dizaines de MHz. Sur la puce, une boucle à verrouillage de phase (PLL) multiplie cette fréquence jusqu’au GHz, et un arbre de distribution l’achemine vers chaque coin de la puce avec presque le même timing.
Il faut bien que quelque chose oscille. Reliez un nombre impair de portes inverseuses en boucle, et il n’existe plus aucun état stable :
| EN | OUT |
|---|---|
| 0 | stable |
| 1 | oscillates, period 6 delays |
An odd number of inverting gates in a loop has no stable state. With EN = 1 the signal chases its own tail and the output toggles every 3 gate delays: the simulator detects the repeating state instead of settling. Real chips use this to measure gate speed.
Unit-delay model: every gate takes one step to react. With auto off, toggle switches and press step to watch the change travel gate by gate.
Activez EN. Le signal se court après dans la boucle, et la sortie bascule tous les 3 délais de porte, soit une période de 6. C’est un oscillateur en anneau. Les vraies puces en utilisent dans leurs PLL, et pour mesurer la vitesse de leurs propres transistors. Le même effet est un bug quand il arrive par accident : toute boucle de rétroaction sans état stable oscille.
Pourquoi un verrou ne suffit pas
Imaginez un registre dont la sortie passe par un additionneur puis revient dans le même registre, comme pour add eax, 1. Si le registre était un verrou transparent, alors tant que la validation est haute, la nouvelle valeur ferait la course dans la boucle : retour par l’additionneur, retour dans le verrou, encore et encore, aussi longtemps que la validation reste haute. Le résultat dépendrait de la durée de l’impulsion.
La solution consiste à capturer l’entrée à un instant plutôt que pendant un intervalle.
La bascule D déclenchée sur front
Une bascule (flip-flop) échantillonne D seulement sur un front de l’horloge, en général le front montant, et ignore D le reste du temps. La conception classique met deux verrous D en série avec des validations opposées, un maître et un esclave :
| CLK | D | Q | |
|---|---|---|---|
| ↑ | 0 | 0 | rising edge: capture D |
| ↑ | 1 | 1 | rising edge: capture D |
| 0 | x | Q | hold (master follows D) |
| 1 | x | Q | hold (master closed) |
Two D latches in series with opposite enables. While CLK = 0 the master follows D and the slave holds; when CLK rises the master closes and the slave copies it. Q therefore changes only on the rising edge: this is the storage cell of registers and of every pipeline stage.
Unit-delay model: every gate takes one step to react. With auto off, toggle switches and press step to watch the change travel gate by gate.
Tant que CLK = 0, le maître suit D et l’esclave garde sa valeur. Quand CLK monte, le maître se ferme, figeant la valeur qu’avait D à cet instant, et l’esclave s’ouvre et la recopie sur Q. Tant que CLK = 1, D peut changer librement : le maître est fermé, rien ne passe. Q ne change qu’au front montant. Le texte de Tanenbaum montre aussi une autre façon d’obtenir ce comportement : un petit générateur d’impulsions qui transforme chaque front montant en une impulsion de validation très courte pour un verrou ordinaire.
Les termes sont souvent confondus ; pour être précis : un verrou est déclenché sur niveau (transparent tant qu’il est validé), et une bascule est déclenchée sur front. Dans les schémas, un petit triangle sur l’entrée d’horloge signale une bascule déclenchée sur front.
Les règles de timing
Chaque bascule a trois caractéristiques de timing :
- le temps d’établissement (setup) : D doit être stable un court instant avant le front d’horloge ;
- le temps de maintien (hold) : D doit rester stable un court instant après le front ;
- le délai horloge-sortie (clock-to-Q) : le temps que met la nouvelle valeur à apparaître sur Q après le front.
Entre deux bascules se trouve de la logique combinatoire — un additionneur, un mux, un comparateur. La période d’horloge doit laisser la place à tout cela :
période ≥ délai horloge-sortie + chemin le plus lent dans la logique + temps d’établissement
C’est la règle derrière deux chapitres précédents. Le chemin le plus lent du chemin de données fixe la fréquence d’horloge, et le pipeline l’augmente en insérant des bascules — les registres de pipeline — pour couper les longs chemins en chemins courts. C’est aussi pourquoi l’additionneur à propagation de retenue est trop lent : son chemin est plus long qu’un cycle.
Violez la règle d’établissement ou de maintien et la bascule peut devenir métastable : sa sortie hésite entre 0 et 1 pendant une durée imprévisible avant de se stabiliser. Cela arrive avec des signaux qui échappent au contrôle de l’horloge — un bouton, une autre puce, un autre domaine d’horloge. Les conceptions font passer ces signaux par deux bascules à la suite, un synchroniseur, pour que toute métastabilité ait un cycle entier pour se résoudre avant que le reste du circuit ne voie la valeur.
Des bascules aux registres
Placez n bascules D côte à côte, partageant une même horloge, et vous obtenez un registre de n bits : il capture une valeur de n bits à chaque front montant. Ajoutez devant chaque entrée D un multiplexeur qui choisit entre « la nouvelle valeur » et « ma valeur actuelle », et le registre ne se met à jour que lorsqu’un signal de chargement est actif. Chaque registre du banc de registres, chaque registre de pipeline, et le compteur ordinal lui-même sont construits ainsi. Le chapitre suivant passe des registres aux matrices mémoire.
À retenir
- La rétroaction donne une mémoire à un circuit. Le verrou SR a deux états stables, et S = R = 1 est interdit.
- Un verrou D est transparent quand il est validé et conserve sa valeur sinon : il est déclenché sur niveau.
- L’horloge est un signal carré, produit par un cristal et multiplié par une PLL. Une boucle impaire d’inverseurs oscille.
- Une bascule D (maître-esclave) ne capture D que sur un front d’horloge, ce qui rend sûre la rétroaction à travers de la logique.
- La période d’horloge doit couvrir délai horloge-sortie + délai de la logique + temps d’établissement. Violer l’établissement ou le maintien expose à la métastabilité.
- Un registre, ce sont n bascules qui partagent une horloge.