Logique séquentielle et stabilité
Cours · traitement du signal et logique (MPI), chapitre 4 · CPGE MPI (2e année) · le début du chapitre, la suite sur Adloun
Les circuits étudiés au chapitre précédent — portes ET, OU, NON, NAND, NOR — sont combinatoires : leur sortie ne dépend, à chaque instant, que de la combinaison présente des entrées. Un tel circuit n'a pas de passé ; il recalcule tout à chaque instant et oublie aussitôt. Or l'informatique repose sur une capacité qui échappe à cette logique : se souvenir. Un registre, une mémoire, un compteur doivent conserver une information après que la cause qui l'a produite a disparu. C'est l'objet de la logique séquentielle, où la sortie dépend non seulement des entrées présentes, mais aussi de l'état du circuit, c'est-à-dire de son histoire.
Le mécanisme qui rend cette mémoire possible est la rétroaction : on reboucle une sortie sur une entrée. Cette boucle fait naître la notion de stabilité — un état peut se maintenir de lui-même (état stable) ou basculer spontanément (état instable) — et, selon la façon dont on la dose, elle engendre les trois briques fondamentales de l'électronique numérique : le bistable (deux états stables : la mémoire d'un bit), le monostable (une impulsion calibrée) et l'astable (aucun état stable : un oscillateur, une horloge). Ce chapitre les construit à partir des seules portes logiques, en s'appuyant systématiquement sur la lecture et le tracé de chronogrammes.
4.1 Du combinatoire au séquentiel
4.1.1 Notion d'état et de mémoire
Un circuit logique est combinatoire si, à chaque instant, ses sorties sont entièrement déterminées par les valeurs présentes de ses entrées. Il est séquentiel si ses sorties dépendent aussi de son état interne, mémoire des entrées passées. Un circuit séquentiel possède donc une ou plusieurs variables d'état qui évoluent au cours du temps.
Le contraste se lit sur un exemple. Une porte ET à deux entrées est combinatoire : si l'on connaît et à l'instant , on connaît sans rien savoir du passé. Un interrupteur d'escalier commandé par un bouton-poussoir est, lui, séquentiel : appuyer sur le bouton inverse l'état de la lampe ; la sortie (allumé / éteint) ne dépend pas seulement de l'appui présent, mais du nombre d'appuis antérieurs. La lampe se souvient.
Toute mémoire numérique — de la bascule d'un registre aux milliards de cellules d'une puce — se ramène à un principe unique : maintenir une variable binaire dans l'un de deux états stables tant qu'aucun ordre ne vient l'en déloger. Comprendre un bistable, c'est comprendre le principe de toute la mémoire.
4.1.2 Rétroaction et stabilité
Il y a rétroaction (ou bouclage) lorsqu'une sortie d'un circuit logique est renvoyée, directement ou à travers d'autres portes, sur l'une de ses entrées. La sortie devient alors, en partie, sa propre cause. La rétroaction est positive (ou régénérative) quand la boucle renforce l'état présent : c'est elle qui fait les mémoires ; elle est négative (c'est la contre-réaction) quand la boucle s'oppose à toute variation et ramène le circuit vers un équilibre.
Considérons l'exemple minimal : la sortie d'une porte NON (inverseur) rebouclée sur son entrée. Notons l'état commun entrée-sortie. La porte impose : cette équation n'admet aucune solution logique. Le circuit ne peut se figer ni à ni à ; il n'oscille pas pour autant. La boucle est une contre-réaction : l'inverseur réel se stabilise à une tension intermédiaire, son seuil de basculement, dans la zone où le niveau logique n'est pas défini. Pour obtenir une oscillation, il faut boucler un nombre impair d'inverseurs au moins égal à trois : c'est l'astable, étudié plus loin.
Rebouclons au contraire la sortie d'un tampon (deux inverseurs en série, fonction identité) sur son entrée. L'équation devient , satisfaite aussi bien par que par : le circuit possède deux états stables. Il mémorise.
Un état d'un circuit bouclé est stable s'il se reproduit lui-même : injecté à l'entrée, il ressort identique à la sortie et se maintient indéfiniment sans intervention extérieure. Il est instable si la logique le fait évoluer vers un autre état. Selon le nombre d'états stables, on distingue :
- bistable : deux états stables mémoire d'un bit ;
- monostable : un seul état stable retour automatique après une impulsion ;
- astable : aucun état stable oscillation permanente (horloge).
En logique idéale, une boucle d'un nombre impair d'inverseurs n'a pas de solution, et rien ne dit à quel rythme elle changerait d'état. Ce sont les temps de propagation non nuls des portes réelles — quelques nanosecondes — qui donnent son rythme à l'oscillation d'un anneau d'au moins trois inverseurs. Le temps, absent du modèle booléen, resurgit comme grandeur physique dès qu'on ferme une boucle. La logique séquentielle est intrinsèquement une logique temporelle.
4.2 La bascule RS
4.2.1 Construction à partir de deux portes NOR
La bascule RS (Reset-Set) est le bistable élémentaire. On la réalise en croisant deux portes NOR : la sortie de chacune alimente une entrée de l'autre. Les deux entrées libres sont (Set, mise à ) et (Reset, mise à ) ; les deux sorties, et , sont normalement complémentaires. Attention au câblage : entre dans la porte qui produit , et dans celle qui produit ; ainsi et .
Rappelons la table de la porte NOR : vaut si et seulement si . Analysons les quatre combinaisons de .
- (maintien) : chaque NOR reçoit l'une des sorties. Si , la NOR du bas reçoit et , donc ; la NOR du haut reçoit et , donc . L'état se reproduit : la bascule mémorise. L'état se maintient de même.
- (écriture d'un 1) : la NOR du bas reçoit , donc quel que soit l'état antérieur ; la NOR du haut reçoit alors et , donc . On force .
- (écriture d'un 0) : symétriquement, la NOR du haut reçoit , donc , puis . On force .
- (interdit) : les deux NOR reçoivent un , donc . Les deux sorties valent : elles ne sont plus complémentaires, ce qui viole la convention. Pire, si l'on ramène ensuite et à simultanément, l'état final est imprévisible (course critique). Cette combinaison est proscrite.
En notant l'état après application de et l'état antérieur :
| mémoire (maintien) | |||
| mise à (Set) | |||
| mise à (Reset) | |||
| --- | état interdit |
4.2.2 Variante à portes NAND
On réalise le même bistable avec deux portes NAND croisées ; les entrées actives sont alors actives à l'état bas. On parle de bascule : l'écriture se commande par un , le maintien correspond à , et la combinaison interdite est . Le tableau se déduit du précédent en complémentant les entrées.
| mémoire | |||
| mise à | |||
| mise à | |||
| --- | interdit |
Méthode : Analyser un circuit bouclé
Pour déterminer les états d'un circuit à rétroaction :
- on coupe mentalement la boucle et on nomme la variable d'état ;
- on exprime la sortie de la boucle en fonction de et des entrées à l'aide des tables de vérité des portes ;
- on impose la condition de bouclage (sortie ) : les solutions sont les états stables ;
- on vérifie, pour chaque combinaison d'entrées, quel état est atteint et s'il se maintient.
4.2.3 Chronogramme de la bascule RS
Un chronogramme représente l'évolution temporelle des signaux logiques : chaque signal est un créneau qui ne prend que les niveaux (bas) et (haut), le temps s'écoulant vers la droite. C'est l'outil de lecture privilégié de la logique séquentielle. Voici la réponse d'une bascule RS (version NOR) à une séquence d'impulsions et .
On lit : une impulsion sur fait passer à , qui reste à après la fin de l'impulsion (mémoire) ; une impulsion sur ramène à , qui y reste ; entre deux ordres, conserve sa valeur. La bascule a bien mémorisé le dernier ordre reçu.
Un contact mécanique ne s'établit pas proprement : à la fermeture, il « rebondit » quelques millisecondes, produisant une salve de et de parasites qu'un compteur numérique interpréterait comme plusieurs appuis. En câblant un inverseur mécanique sur une bascule RS à NAND — lame reliée à la masse, chacun des deux contacts relié à l'une des entrées , et, par une résistance de tirage, à , de sorte qu'un contact ouvert impose le niveau et un contact fermé le niveau —, le premier contact valide fait basculer la mémoire ; les rebonds suivants, sur la même entrée, ne changent plus l'état déjà mémorisé.
Démonstration
La bascule est en position mémoire tant qu'aucune entrée n'est activée. Au tout premier rebond qui ferme le contact « Set », passe à : est forcé à . Les rebonds ultérieurs de ce même contact ramènent brièvement à — mais alors , c'est-à-dire la mémoire, et reste à . Aucun rebond de la ligne Set ne peut remettre à : seule une action sur le pourrait. La sortie est donc parfaitement propre : une transition unique au lieu d'une salve.
4.3 Bascule bistable et mémoire
4.3.1 Le bistable comme cellule de mémoire
Un bistable est un circuit séquentiel possédant exactement deux états stables. Placé dans l'un d'eux, il y demeure indéfiniment sans nouvel ordre, tant qu'il reste alimenté ; une impulsion de commande le fait basculer dans l'autre, où il se maintient à nouveau. Un bistable mémorise donc un bit.
La bascule RS est le bistable le plus simple. Ses deux états stables sont et ; la position mémoire les préserve tous deux, tandis que et permettent d'écrire l'un ou l'autre. Une mémoire de bits est simplement un banc de bistables adressés indépendamment : c'est le principe de la mémoire statique (SRAM), où chaque cellule est un bistable à quelques transistors qui conserve sa valeur tant que l'alimentation est maintenue.
Dans un bistable, les deux états et sont stables car la rétroaction est régénérative : la sortie renforce, à travers la boucle, l'état qui l'a produite. Toute petite déviation d'un état stable est ramenée à cet état par l'amplification de la boucle ; l'état intermédiaire , lui, est un équilibre instable que le circuit fuit à la moindre perturbation.
L'analogie mécanique est éclairante : un bistable est une bille dans un double puits (deux creux séparés par une bosse). Les deux creux sont les états stables et ; le sommet de la bosse est l'état instable . Une chiquenaude (l'impulsion ou ) fait passer la bille d'un creux à l'autre, où elle se stabilise. L'astable, lui, correspondrait à un paysage sans creux : la bille roule sans fin.
4.4 Le circuit astable : générer une horloge
4.4.1 Principe : aucun état stable
Un circuit astable ne possède aucun état stable : il bascule spontanément et périodiquement entre ses deux états. Sa sortie est un signal carré permanent, sans entrée de commande. Un astable est donc un oscillateur, source du signal d'horloge qui cadence tout système numérique synchrone.
Le prototype logique de l'astable est l'anneau d'un nombre impair, au moins égal à trois, d'inverseurs bouclés (ring oscillator) : la condition n'est jamais satisfaite, et l'anneau change d'état sans cesse. Un inverseur seul ne suffit pas : on l'a vu, il se fige à son seuil de basculement. La période de l'anneau est fixée par les temps de propagation.
Un anneau de inverseurs ( impair, ), chacun de temps de propagation , oscille avec une période
car une transition doit parcourir deux fois l'anneau (aller en puis retour en ) pour reproduire l'état initial. La fréquence d'horloge est .
Démonstration
Injectons un front à l'entrée du premier inverseur. Après un délai , sa sortie bascule ; après , ce front — inversé fois, donc inversé puisque est impair — revient à l'entrée du premier inverseur avec la valeur opposée à celle de départ. L'entrée bascule donc au bout de , puis rebascule plus tard : la période complète vaut .
En pratique, on n'utilise pas les seuls temps de propagation (trop brefs, quelques , donnant des centaines de peu réglables) : on ralentit délibérément l'oscillation par une constante de temps . C'est le rôle du montage astable à portes ou du célèbre circuit intégré temporisateur, dont la période est fixée par une résistance et un condensateur, , le coefficient dépendant du montage et des seuils de basculement des portes.
Un astable délivre une horloge de rapport cyclique à la fréquence . Sa période vaut ; les niveaux haut et bas durent chacun . Dans un montage où le condensateur se charge et se décharge à travers entre les seuils et (ceux du temporisateur intégré classique), chaque demi-période vaut , d'où . Obtenir demande , par exemple et (une résistance de en série avec un ajustable). Ce coefficient n'est pas universel : avec d'autres seuils, change.
4.5 Le circuit monostable : une impulsion calibrée
4.5.1 Principe : un seul état stable
Un circuit monostable possède un unique état stable, où il repose au repos. Une impulsion de déclenchement le fait basculer dans un état quasi stable qu'il maintient pendant une durée fixée par le circuit (typiquement ), puis il revient de lui-même à l'état stable. Il délivre ainsi une impulsion de durée calibrée, indépendante de la durée du déclenchement.
Le monostable transforme un déclenchement quelconque — un bref pic, un front — en une impulsion propre de largeur maîtrisée. On l'emploie pour temporiser (activer une sortie pendant exactement ), pour mettre en forme un signal, ou pour produire un retard.
On observe la propriété caractéristique : la première et la seconde impulsion de déclenchement ont des durées différentes, mais les deux impulsions de sortie ont la même largeur . Le monostable a calibré la durée.
| Montage | États stables | Sortie | Rôle typique |
|---|---|---|---|
| Bistable | 2 | mémoire d'un bit | mémoire, registre |
| Monostable | 1 | impulsion de durée | temporisation, mise en forme |
| Astable | 0 | créneau permanent | horloge, oscillateur |
Astable et monostable fixent leur(s) durée(s) par une constante de temps ; le bistable, lui, n'a pas de temps propre : il attend indéfiniment un ordre.
4.6 Applications
4.6.1 Convertisseur fréquence-tension
Le monostable fournit une conversion élégante d'une fréquence en une tension. On l'attaque par le signal dont on veut mesurer la fréquence : à chaque front montant, il émet une impulsion calibrée de largeur et d'amplitude fixes. La sortie est donc un train d'impulsions identiques, dont seule la densité varie avec .
Si le monostable émet, à la cadence , des impulsions de hauteur et de largeur (avec ), la valeur moyenne de sa sortie est
proportionnelle à la fréquence . Un filtre passe-bas qui extrait cette valeur moyenne délivre donc une tension image de la fréquence : c'est le convertisseur fréquence-tension.
Démonstration
Sur une période , la sortie vaut pendant puis pendant . Sa valeur moyenne est
car . Tant que les impulsions ne se chevauchent pas (), croît linéairement avec . Un filtre de constante de temps grande devant lisse le train d'impulsions et restitue avec une ondulation résiduelle faible.
Un capteur délivre une impulsion par tour d'un arbre en rotation ; sa fréquence est proportionnelle à la vitesse de rotation. Un monostable (, ) suivi d'un passe-bas fournit . À (soit tours/s), . La tension lue est directement proportionnelle à la vitesse : on a construit un compte-tours analogique.
4.6.2 Oscillateur et base de temps
L'astable est la source de tout séquencement. En divisant par sa fréquence à l'aide de bascules diviseuses montées en compteur — des bascules déclenchées sur un front d'horloge, hors programme : une bascule RS, ou un verrou, ne divise pas —, on obtient une cascade d'horloges de périodes Un astable de (quartz d'horlogerie) divisé fois donne exactement une impulsion par seconde : c'est le cœur d'une montre à quartz. De même, l'horloge d'un microprocesseur est un astable stabilisé par quartz, distribuée à tous les registres pour synchroniser leurs basculements.
4.6.3 Mémoire
Enfin, la première application reste la plus fondamentale : le bistable est la mémoire. Chaque cellule d'une SRAM, chaque bit d'un registre, chaque étage d'un compteur repose sur un bistable qui conserve son état entre deux ordres d'écriture. Toute l'informatique — le stockage d'un programme, la persistance d'une donnée, l'état d'une machine — se ramène, in fine, à la capacité d'un bistable à se souvenir d'un bit tant qu'on ne lui ordonne pas d'en changer.
Capacité numérique : simuler une bascule RS et son chronogramme
On peut vérifier numériquement le comportement d'une bascule RS en propageant l'état bit à bit sur une séquence d'entrées, puis en traçant le chronogramme obtenu.
import numpy as np
import matplotlib.pyplot as plt
def nor(a, b):
return 1 - (a | b)
# sequence temporelle des entrees S et R
S = [0,1,1,0,0,0,0,0,1,0,0]
R = [0,0,0,0,1,1,0,0,0,0,0]
Q, Qb = 0, 1 # etat initial
histQ = []
for s, r in zip(S, R):
# deux iterations pour stabiliser la boucle croisee
for _ in range(2):
Q = nor(r, Qb)
Qb = nor(s, Q)
histQ.append(Q)
t = np.arange(len(S))
plt.step(t, S, where='post', label='S')
plt.step(t, np.array(R)+2, where='post', label='R (+2)')
plt.step(t, np.array(histQ)+4, where='post', label='Q (+4)')
plt.xlabel('temps (pas)'); plt.yticks([]); plt.legend()
plt.title("Chronogramme d'une bascule RS"); plt.show()
La sortie Q passe à à la première impulsion de S, s'y maintient jusqu'à l'impulsion de R, puis y reste à : la mémoire est bien reproduite.
Exercices du chapitre
- L'alarme qui se souvient : de la porte rebouclée à la bascule RS corrigé
- Un inverseur rebouclé ne bat pas : états stables lus sur la caractéristique, et la cellule de mémoire statique corrigé
- Le bouton qui rebondit : chronogramme réel d'une bascule à NAND corrigé
- L'interrupteur crépusculaire : un bistable commandé par une tension corrigé
- Écrire un bit sur ordre : le verrou et la mémoire de n bits corrigé
- L'horloge d'un montage : astable à porte à seuils et circuit RC corrigé