Notre objectif est de construire un circuit capable de conserver une information binaire aussi longtemps que souhaité, et de la mettre à jour au moment souhaité. Pris individuellement, les circuits logiques que nous connaissons savent uniquement calculer des sorties en fonction de leurs entrées. L’astuce consiste à construire un circuit qui forme une boucle comme dans le schéma suivant :
Grâce à la propriété , la sortie conserve sa valeur tant que les inverseurs sont alimentés. Cependant, ce circuit ne permet pas de mettre à jour cette valeur.
Certaines portes logiques ont la propriété de se comporter comme un inverseur lorsqu’une de leurs entrées est fixée à une valeur bien choisie. C’est le cas, par exemple, de la porte NON-OU, dont nous rappelons la table de vérité ci-dessous :
→ | |||
---|---|---|---|
0 | 0 | → | 1 |
0 | 1 | → | 0 |
1 | 0 | → | 0 |
1 | 1 | → | 0 |
Réécrivons cette table de vérité pour faire apparaître dans la colonne de sortie :
→ | ||
---|---|---|
0 | → | |
1 | → | 0 |
Ainsi, lorsque nous fixons l’entrée d’une porte NON-OU à 0, elle se comporte comme un inverseur vis-à-vis de l’entrée . Lorsque nous fixons l’entrée à 1, la sortie vaut 0.
En mettant deux portes NON-OU tête-bêche, nous pourrons les utiliser comme deux inverseurs, comme dans le schéma précédent. L’entrée des portes NON-OU sera utilisée pour injecter une nouvelle valeur dans la boucle lorsque nous souhaiterons mémoriser une nouvelle information.
Le circuit représenté ci-dessus s’appelle un verrou RS (en anglais SR latch). Les entrées et sont utilisées de la manière suivante :
Ainsi, les deux premiers cas permettent de donner la valeur de notre choix à . Le troisième cas permet de verrouiller la dernière valeur qui a été affectée.
En fonctionnement normal, la sortie est toujours égale à . La combinaison ne vérifie pas cette propriété et n’est pas utilisée en pratique.
Les entrées et sont nommées d’après leur rôle : « S » comme « Set », utilisé dans le sens de « activer » (mettre à 1) ; « R » comme « Reset », utilisé dans le sens de « réinitialiser » (mettre à 0).
R | S | → | Q | Opération |
---|---|---|---|---|
0 | 0 | → | Maintien | |
0 | 1 | → | 1 | Écriture d’un 1 (Set) |
1 | 0 | → | 0 | Écriture d’un 0 (Reset) |
Voici le symbole d’un verrou RS :
Dans un verrou RS, les entrées et servent à la fois à sélectionner l’opération à effectuer (maintien ou écriture) et à indiquer la valeur à écrire (0 ou 1). Il n’y a pas de séparation entre les commandes et les données.
Dans un verrou D, il existe une entrée (Data) qui indique la valeur de la donnée à écrire et une entrée (Enable) qui autorise la mise à jour de la donnée mémorisée. Son fonctionnement peut être résumé par le tableau suivant :
E | D | → | Q | Opération |
---|---|---|---|---|
0 | – | → | Maintien | |
1 | 0 | → | 0 | Écriture d’un 0 |
1 | 1 | → | 1 | Écriture d’un 1 |
Ou plus simplement :
E | → | Q | Opération |
---|---|---|---|
0 | → | Maintien | |
1 | → | Écriture |
Le symbole d’un verrou D est illustré ci-dessous :
Il est possible de construire un verrou D à partir d’un verrou RS et de quelques portes. Voici une solution possible :
On dit qu’un verrou D est transparent pendant toute la durée où son entrée est active. Pendant cette durée, la sortie suit les variations de (cf les régions colorées sur le chronogramme ci-dessous). Lorsque est à zéro, le verrou ignore les variations de et maintient sa sortie stable.
Dans une bascule D, l’opération d’écriture est un événement ponctuel. La mise à jour de s’effectue à des instants précis identifiés par les fronts d’une entrée de commande appelée horloge et souvent nommée (clock) – on parle de front montant (rising edge) lorsque l’entrée horloge passe de 0 à 1 et de front descendant (falling edge) lorsque l’entrée horloge passe de 1 à 0.
Le chronogramme ci-dessous met en évidence la différence entre une bascule et un verrou D. Ici, les mises à jour de ont lieu sur les fronts montants de .
Par convention, nous représentons le signal d’horloge avec des fronts bien verticaux car nous nous intéressons uniquement aux instants où ces fronts se produisent. Les transitions sur les autres signaux sont représentées avec une pente qui permet de séparer les deux valeurs successives dans le temps.
Le symbole d’une bascule D ressemble à celui d’un verrou D. Le triangle devant l’entrée indique que la bascule met sa sortie à jour sur des fronts de . La bascule représentée ci-dessous réagit à des fronts montants de . On peut ajouter un petit cercle devant l’entrée pour représenter une bascule qui réagit aux fronts descendants.
La bascule D est le composant de mémorisation le plus utilisé dans les circuits numériques récents. Dans la suite de ce chapitre, nous n’utiliserons quasiment pas de verrous.
Il existe différentes techniques pour réaliser une bascule D. Dans l’exemple ci-dessous, nous avons utilisé deux verrous D en cascade. Cette structure est appelée maître-esclave (master-slave).
Quand vaut 0, le verrou maître est transparent pendant que le verrou esclave maintient la sortie stable. Au front montant de , le verrou maître passe en mode maintien et verrouille la valeur de . Pendant toute la durée où vaut 1, le verrou esclave laisse passer la valeur de . Le chronogramme ci-dessous illustre le fonctionnement de ce circuit. Les régions colorées représentent les intervalles de temps où chaque verrou est transparent, en bleu pour le verrou maître et en orange pour le verrou esclave.
La présence d’une double inversion sur l’entrée du verrou esclave peut sembler superflue. Pourquoi ne pas avoir simplement relié à ? Il s’agit d’une précaution qui exploite le fait que l’opération d’inversion prend du temps. Ainsi, le verrou maître passe en mode maintien en premier et le verrou esclave devient transparent légèrement plus tard, à un moment où la valeur de est stabilisée.
Les bascules D possèdent systématiquement les entrées/sorties suivantes :
Typiquement, l’entrée est reliée à un oscillateur qui produit un signal carré. Les fronts d’horloge se succèdent ainsi périodiquement pendant toute la durée où le système est en fonctionnement. Si l’on ne souhaite pas effectuer une mémorisation systématiquement sur tous les fronts d’horloge, on peut utiliser une bascule avec une entrée (Enable). La sortie ne se mettra à jour que sur les fronts d’horloge où vaut 1.
Optionnellement, on trouvera des bascules avec les entrées suivantes :
Les entrées et peuvent être asynchrones ou synchrones. Asynchrones, elles prennent effet immédiatement, comme dans un verrou RS. Synchrones, elles prennent effet sur un front de .
Les entrées de réinitialisation asynchrones permettent d’affecter une valeur à une bascule au démarrage – ou au redémarrage – du circuit.
Pour donner une nouvelle valeur à une bascule au cours du fonctionnement normal du circuit, il faut la présenter sur l’entrée et attendre un front d’horloge.
Pour bien utiliser une bascule D, il faut imaginer qu’elle lit son entrée D à l’instant où le front d’horloge se produit et qu’elle met à jour sa sortie Q juste après le front d’horloge.
En réalité, le bon fonctionnement d’un bascule D nécessite que l’entrée D soit stable pendant une certaine durée avant et après le front d’horloge. La sortie Q est alors mise à jour au bout d’un petit délai après le front d’horloge. La documentation constructeur d’une bascule D fournit généralement les grandeurs suivantes :
Sur le chronogramme ci-dessous, D est stable assez longtemps avant et après le front d’horloge. La donnée représentée en bleu est correctement copiée sur Q après le front d’horloge.
Si D change de valeur à un instant trop proche du front d’horloge, la bascule peut entrer dans un état appelé métastable. Son comportement devient imprévisible. Sa sortie peut mettre un temps anormalement long à se stabiliser sans garantie que la valeur finale sera celle attendue.
Un verrou ou une bascule est un élément de mémorisation qui permet de conserver un bit d’information. La valeur mémorisée est disponible sur une sortie .
Une bascule D possède une entrée de donnée , une entrée horloge et une sortie . Elle mémorise la valeur de son entrée sur des fronts de son entrée horloge.
Une bascule D peut posséder une entrée de validation et des entrées de réinitialisation et . Les entrées de réinitialisation peuvent prendre effet de façon synchrone (sur front d’horloge) ou asynchrone (sans attendre un front d’horloge).