Fonctionnement d'un ordinateur/Les bascules : des mémoires de 1 bit
La totalité de l'électronique grand public est basée sur des circuits combinatoires auxquels on ajoute des mémoires. Pour le moment, on sait créer des circuits combinatoires, mais on ne sait pas faire des mémoires. Pourtant, on a déjà tout ce qu'il faut. Il est en effet parfaitement possible de créer des mémoires avec des portes logiques. Toutes les mémoires sont conçues à partir de circuits capables de mémoriser un ou plusieurs bits. Ces circuits sont ce qu'on appelle des bascules, ou latches. Pour une question de simplicité, ce chapitre parlera des circuits capables de mémoriser un bit seulement, pas plusieurs. Nous verrons comment combiner ces bits pour former une mémoire ou des compteurs dans le chapitre suivant.
L'interface d'une bascule
modifierAvant de voir comment sont fabriquées les bascules, nous allons voir quelles sont leurs entrées et leurs sorties. La raison à cela est que des bascules aux entrées-sorties similaires peuvent être construites sur des principes suffisamment différents pour qu'on les voie à part. Si on ne regarde que les entrées-sorties, on peut grosso-modo classer les bascules en quelques grands types principaux : les bascules RS, les bascules JK et les bascules D.
Avant toute chose, faisons quelques précisions. Sur les schéma qui vont suivre, les entrées sont à gauche, les sorties sont à droite. Vous verrez que toutes les bascules qui vont suivre disposent de deux sorties, nommées Q et . La sortie Q fournit le bit qui est mémorisé dans la bascule. C'est sur cette sortie qu'on peut lire le bit mémorisé, le récupérer. La sortie est très similaire, la seule différence étant qu'elle fournit l'inverse de ce bit mémorisé. Par inverse, on veut dire qu'elle fournit un 0 si le bit mémorisé est à 1, un 1 s'il vaut 0. Il est possible de créer des bascules sans sortie , mais nous verrons des exemples avec cette sortie. Si les bascules ont toutes les mêmes sorties, elles se distinguent selon les entrées.
Les bascules D
modifierLes bascules les plus simples sont les bascules D. Elles ont deux entrées appelées D et E : D pour Data, E pour Enable. Le bit à mémoriser est envoyé directement sur l'entrée D. L'entrée Enable permet d'autoriser ou d'interdire les écritures dans la bascule. Il faut que l'entrée Enable passe à 1 pour que l'entrée soit recopiée dans la bascule et mémorisée. Tant que l'entrée Enable reste à 0, le bit mémorisé par la bascule reste le même, le circuit est insensible à l'entrée D.
Les bascules RS
modifierEn second lieu, on trouve les bascules RS, qui possèdent deux entrées. Les deux entrées permettent de placer un 1 ou un 0 dans la bascule. L'entrée R permet de mettre un 1, l'entrée S permet d'y injecter un 0. Pour vous en rappeler, sachez que les entrées de la bascule ne sont nommées ainsi par hasard : R signifie Reset (qui signifie mise à zéro en anglais) et S signifie Set (qui veut dire mise à un en anglais).
Le principe de ces bascules est assez simple :
- si on met un 1 sur l'entrée R et un 0 sur l'entrée S, la bascule mémorise un zéro ;
- si on met un 0 sur l'entrée R et un 1 sur l'entrée S, la bascule mémorise un un ;
- si on met un zéro sur les deux entrées, la sortie Q sera égale à la valeur mémorisée juste avant.
- Si on met un 1 sur les deux entrées, on ne sait pas ce qui arrivera sur ses sorties. Après tout, quelle idée de mettre la bascule à un en même temps qu'on la met à zéro !
Entrée Reset | Entrée Set | Sortie Q |
---|---|---|
0 | 0 | Bit mémorisé par la bascule |
0 | 1 | 1 |
1 | 0 | 0 |
1 | 1 | Dépend de la bascule |
Le comportement obtenu quand on met deux 1 en entrée dépend de la bascule. Il faut dire que cette combinaison demande de mettre le circuit à la fois à 0 (entrée R) et à 1 (entrée S). Sur certaines bascules, appelées bascules à entrées non-dominantes, la combinaison est interdite : elle fait dysfonctionner le circuit et le résultat est imprédictible. Mais sur d'autres bascules dites à entrée R ou S dominante, une entrée sera prioritaire sur l'autre. Sur les bascules à entrée R dominante, l'entrée R surpasse l'entrée S : la bascule est mise à 0 quand les deux entrées sont à 1. A l'inverse, sur les bascules à entrée S dominante, l'entrée S surpasse l'entrée R : la bascule est mise à 1 quand les deux entrées sont à 1.
Les bascules RS inversées
modifierIl existe aussi des bascules RS inversées, où les entrées doivent être mises à 0 pour faire ce qu'on leur demande. Ces bascules fonctionnent différemment de la bascule précédente :
- si on met un 1 sur l'entrée R et un 0 sur l'entrée S, la bascule mémorise un 1 ;
- si on met un 0 sur l'entrée R et un 1 sur l'entrée S, la bascule mémorise un 0 ;
- si on met un 1 sur les deux entrées, la sortie Q sera égale à la valeur mémorisée juste avant ;
- si on met un 0 sur les deux entrées, le résultat est indéterminé.
Entrée /R | Entrée /S | Sortie Q |
---|---|---|
0 | 0 | Interdit |
0 | 1 | 0 |
1 | 0 | 1 |
1 | 1 | Bit mémorisé par la bascule |
Là encore, quand les deux entrées sont à 0, on fait face à trois possibilités, comme sur les bascules RS normales : soit le résultat est indéterminé, soit l'entrée R prédomine, soit l'entrée S prédomine.
Les bascules JK
modifierLes bascules JK peuvent être vues comme des bascules RS améliorées. La seule différence est ce qui se passe quand on envoie un 1 sur les entrées R et S. Sur une bascule RS, le résultat dépend de la bascule, il est indéterminé. Sur les bascules JK, le contenu de la bascule est inversée.
Entrée J | Entrée K | Sortie Q |
---|---|---|
0 | 0 | Bit mémorisé par la bascule |
0 | 1 | 1 |
1 | 0 | 0 |
1 | 1 | inversion du bit mémorisé |
Les bascules JK, RS et RS inversées à entrée Enable
modifierIl est possible de modifier les bascules JK, RS et RS inversées, pour faire permettre d' « activer » ou d' « éteindre » les entrées R et S à volonté. En faisant cela, les entrées R et S ne fonctionnent que si l'on autorise la bascule à prendre en compte ses entrées.
Pour cela, il suffit de rajouter une entrée E à notre circuit. Suivant la valeur de cette entrée, l'écriture dans la bascule sera autorisée ou interdite. Si l'entrée E vaut zéro, alors tout ce qui se passe sur les entrées RS ou JK ne fera rien : la bascule conservera le bit mémorisé, sans le changer. Par contre, si l'entrée E vaut 1, alors les entrées RS ou JK feront ce qu'il faut et la bascule fonctionnera comme une bascule RS/JK normale.
La porte C, une bascule spéciale
modifierEnfin, nous allons voir la porte C, une bascule particulière qui sera utilisée quand nous verrons les circuits et les bus asynchrones. Elle a deux entrées A et B, comme les bascules RS et les bascules D, mais seulement une sortie. Quand les deux entrées sont identiques, la sortie de la bascule correspond à la valeur des entrées (cette valeur est mémorisée). Quand les deux entrées différent, la sortie correspond au bit mémorisé.
Entrée A | Entrée B | Sortie |
---|---|---|
0 | 0 | 0 |
0 | 1 | Bit mémorisé par la bascule |
1 | 0 | Bit mémorisé par la bascule |
1 | 1 | 1 |
L'implémentation des bascules avec des portes logiques
modifierLe principe qui se cache derrière toutes ces bascules est le même. Elles sont organisées autour d'un circuit dont on boucle la sortie sur son entrée. Cela veut dire que sa sortie est connectée à une de ses entrées, les autres entrées étant utilisées pour commander la bascule. Nous allons distinguer l'entrée bouclée et la ou les entrées de commande.
Le circuit doit avoir une particularité bien précise : si l'entrée de commande est à la bonne valeur (0 sur certaines bascules, 1 sur d'autres), l'entrée bouclée est recopiée sur la sortie à l'identique. On dit que le circuit a des entrées potentiellement idempotentes. Ainsi, tant que l'entrée de commande est à la bonne valeur, la bascule sera dans un état stable où la sortie et l'entrée de commande restons à la valeur mémorisée. Le circuit en question peut être une porte logique centrale, qui peut être une porte ET, OU, XOR, NAND, NOR, NXOR, ou un multiplexeur.
Toujours est-il qu'un circuit séquentiel contient toujours au moins une entrée reliée sur une sortie, contrairement aux circuits combinatoires, qui ne contiennent jamais la moindre boucle !
- Dans ce qui suit, nous allons omettre volontairement la sortie , sauf pour les bascules RS.
La bascule D fabriquée avec un multiplexeur
modifierLe cas le plus simple de circuit bouclé est la bascule D conçue à partir d'un multiplexeur. L'idée est très simple. Quand l'entrée Enable est à 0, la sortie du circuit est bouclée sur l'entrée : le bit mémorisé, qui était présent sur la sortie, est alors renvoyé en entrée, formant une boucle. Cette boucle reproduit en permanence le bit mémorisé. Par contre, quand l'entrée Enable vaut 1, la sortie du multiplexeur est reliée à l'entrée D. Ainsi, ce bit est alors renvoyé sur l'autre entrée : les deux entrées du multiplexeur valent le bit envoyé en entrée, mémorisant le bit dans la bascule.
Pour rappel, un multiplexeur peut s'implémenter de différentes manières, comme nous l'avons vu dans le chapitre sur les circuits de sélection. Il est possible de l'implémenter en utilisant seulement des portes logiques, ou alors en utilisant des portes à transmission. Les deux possibilités sont illustrées ci-contre.
Pour un multiplexeur fabriqué sans porte à transmission, boucler sa sortie sur son entrée ne pose aucun problème particulier. Mais en utilisant des portes à transmission, le circuit ne fonctionne pas. Le problème est qu'une porte à transmission est électriquement équivalente à un simple interrupteur, ce qui réduit le circuit à une boucle entre un interrupteur et un fil. Le courant qui circule dans le fil et l'interrupteur se dissipe rapidement du fait de la résistance du fil et disparait en quelques micro- ou millisecondes.
La solution est de rajouter des portes logiques dans la boucle pour régénérer le signal électrique. La solution la plus simple et la plus évidente, est de rajouter une porte OUI, la porte logique qui recopie son entrée sur sa sortie. Et la manière la plus simple de fabriquer une porte OUI est d'utiliser deux portes NON qui se suivent, ce qui donne le circuit ci-dessous. Cela garantit que la boucle est alimentée en courant/tension quand elle est fermée. Son contenu ne s'efface pas avec le temps, mais est automatiquement régénéré par les portes NON. L'ensemble sera stable tant que la boucle est fermée.
L'avantage du circuit précédent est qu'il est plus économe en portes logiques que les autres bascules, même si ce n'est pas évident. Son implémentation utilise moins de transistors, bien qu'on devra en reparler dans un chapitre ultérieur. Un autre avantage est que ce circuit permet d'avoir les deux sorties Q : la sortie Q inversée est prise en sortie de la première porte NON. Une variante du circuit précédent est utilisée dans les mémoires dites SRAM, qui sont utilisées pour les registres du processeur ou ses mémoires caches.
Certaines bascules D ont une entrée R, qui met à zéro le bit mémorisé dans la bascule quand l'entrée R est à 1. Pour cela, elles ajoutent un circuit de mise à zéro, que nous avons déjà vu dans le chapitre sur les opérations bit à bit. Ce circuit de mise à zéro est placé après la seconde porte NON, et sa sortie est bouclée sur l'entrée du circuit. Le circuit obtenu est le suivant :
Le circuit peut se simplement fortement en fusionnant les trois portes situées entre les deux sorties Q, à savoir la porte ET et les deux portes NON qui la précédent. La loi de De Morgan nous dit que l'ensemble est équivalent à une porte NOR, ce qui donne le circuit suivant :
La bascule RS fabriquée avec une porte OU et une porte ET
modifierVoyons maintenant comment implémenter une bascule RS. Son implémentation la plus simple est la bascule RS de type ET-OU, composée de trois portes logiques : une porte ET, une porte OU, et éventuellement une porte NON. Un exemple de porte RS de ce type est le suivant, d'autres manières de connecter le tout qui donnent le même résultat.
Son fonctionnement est simple à expliquer. La porte ET a deux entrées, dont une est bouclée et l'autre est une entrée de commande. Idem pour la porte OU. Les deux portes recopient leur entrée en sortie si on place ce qu'il faut sur l'entrée de commande. Par contre, toute autre valeur modifie le bit inséré dans la bascule.
- Si on place un 0 sur l'entrée de commande de la porte OU, elle recopie l'entrée bouclée sur sa sortie. Par contre, y mettre un 1 donnera un 1 en sortie, peu importe le contenu de l'entrée bouclée. En clair, l'entrée de commande de la porte OU sert d'entrée S à la bascule.
- La porte ET recopie l'entrée bouclée, mais seulement si on place un 1 sur l'entrée de commande. Si on place un 0, elle aura une sortie égale à 0, peu importe l'entrée bouclée. En clair, l'entrée de commande de la porte ET est l'inverse de ce qu'on attend de l'entrée R à la bascule RS. Pour obtenir une véritable entrée R, il est possible d'ajouter une porte NON sur l'entrée /R, sur l'entrée de la porte ET. En faisant cela, on obtient une vraie bascule RS.
Si on essaye de concevoir le circuit, on se retrouve alors face à un choix : est-ce que la sortie Q est la sortie de la porte OU, ou la sortie de la porte ET ? La seule différence sera ce qu'il se passe quand on active les deux entrées à la fois. Si on prend la sortie de la porte ET, l'entrée Reset sera prioritaire sur l'entrée Set quand elles sont toutes les deux à 1. Et inversement, si on prend la sortie de la porte OU, ce sera le signal Set qui sera prioritaire. Voici ci-dessous les tables de vérité correspondantes pour chaque circuit.
Entrée Reset | Entrée Set | Sortie Q | Circuit |
---|---|---|---|
0 | 0 | Bit mémorisé par la bascule | |
1 | 0 | 0 | |
X (0 ou 1) | 1 | 1 |
Entrée Reset | Entrée Set | Sortie Q | Circuit |
---|---|---|---|
0 | 0 | Bit mémorisé par la bascule | |
0 | 1 | 0 | |
1 | X (0 ou 1) | 1 |
Les bascules RS à NOR et à NAND
modifierLe circuit précédent a bien une sortie Q, mais pas de sortie /Q. Pour la rajouter, il suffit simplement d'ajouter une porte NON sur la sortie Q. Mais faire ainsi ne permet pas de profiter de certaines simplifications bien appréciables. Pour cela, au lieu d'ajouter une porte NON, nous allons ajouter deux portes, en amont de la porte OU. En faisant, le circuit devient celui-ci :
On peut alors regrouper des portes logiques consécutives et simplifier le tout, comme indiqué dans le schéma suivant. Le circuit devient donc :
Le résultat est ce qu'on appelle une bascule RS à NOR, qui tire son nom du fait qu'elle est fabriquée exclusivement avec des portes logiques NOR. En réorganisant le circuit, on trouve ceci :
Dans l'exemple précédent, nous avions pris la sortie Q en sortie de la porte ET, mais il est possible de faire pareil avec une bascule RS inversée de type ET/OU. Le résultat est une bascule RS à NAND, qui est une bascule RS inversée à deux sorties (Q et /Q), composée intégralement de portes NAND.
Les bascules peuvent se fabriquer à partir d'autres bascules
modifierIl y a quelques chapitres, nous avons vu qu'il est possible de créer une porte logique en combinant d'autres portes logiques. Et bien sachez qu'il est possible de faire la même chose pour des bascules. On peut par exemple fabriquer une bascule RS à partir d'une bascule D, et réciproquement. Ou encore, on peut fabriquer une bascule D à partir d'une bascule JK, et inversement. Les possibilités sont nombreuses. Et pour cela, il suffit juste d'ajouter un circuit combinatoire qui traduit les entrées de la bascule voulue vers les entrées de la bascule utilisée.
Le passage d'une bascule RS à une bascule RS inversée (et inversement)
modifierIl est possible de créér une bascule RS normale à partir d'une bascule RS inversée en inversant simplement les entrées R et S avec une porte NON. Et inversement, le passage d'une bascule RS normale à une bascule RS inversée se fait de la même manière. Il s'agit d'une méthode simple, qui a la particularité de garder le caractère dominant/non-dominant des entrées.
Il est possible de partir d'une bascule RS inversée/normale non-dominante et d'en faire une bascule RS normale/inversée à entrée R ou S dominante. Pour cela, au lieu d'ajouter deux portes NON en entrée du circuit, on ajoute un petit circuit spécialement conçu. Ce circuit de conversion traduit les signaux d’entrée R et S en signaux /R et /S, (ou inversement).
Prenons l'exemple d'une bascule RS normale à entrée R prioritaire, fabriquée à partir d'une bascule RS à NAND (inversée à entrée non-dominantes). La table de vérité du circuit de conversion des entrées est la suivante. Rappelez-vous que l'on veut que l'entrée R soit prioritaire. Ce qui veut dire que si R est à 1, alors on garantit que le signal /R est actif et que /S est inactif. On a donc :
R | S | |||
---|---|---|---|---|
0 | 0 | 1 | 1 | |
0 | 1 | 1 | 0 | |
1 | 0 | 0 | 1 | |
1 | 1 | 0 | 1 |
L'entrée n'est autre que l'inverse de l'entrée R, ce qui fait qu'une simple porte NON suffit.
L'entrée a pour équation logique :
Le tout donne le circuit suivant :
L'implémentation des bascules RS avec une entrée Enable
modifierPassons maintenant aux bascules RS à entrée Enable. Vous l'avez peut-être senti venir : il est possible de modifier les bascules sans entrée Enable, pour leur en ajouter une. Notamment, il est possible de modifier une bascules RS normale pour lui ajouter une entrée Enable. Pour cela, il suffit d'ajouter un circuit avant les entrées R et S, qui inactivera celles-ci si l'entrée E vaut zéro. La table de vérité de ce circuit est identique à celle d'une simple porte ET.
Les bascules D conçues à partir de bascules RS à entrée Enable
modifierPassons maintenant aux bascules D construites à partir d'une bascule RS à entrée Enable. L'entrée Enable de la bascule D et de la bascule RS sont la même, elles ont exactement le même comportement et la même utilité. Il suffit de prendre une bascule RS à entrée Enable et d'ajouter un circuit qui convertit l'entrée D en Entrées R et S.
Pour une bascule RS normale, on peut remarquer que l'entrée R est toujours égale à l'inverse de D, alors que S est toujours strictement égale à D. Il suffit d'ajouter une porte NON avant l'entrée R d'une bascule RS à entrée Enable, pour obtenir une bascule D.
Il est possible d'améliorer légèrement le circuit précédent, afin de retirer la porte NON, en changeant le câblage du circuit. En effet, la porte NON inverse l'entrée D tout le temps, quelle que soit la valeur de l'entrée Enable. Mais on n'en a besoin que lorsque l'entrée Enable est à 1. On peut donc remplacer la porte NON par une porte qui sort un 0 quand l'entrée D et l'entrée Enable sont à 1, mais qui sort un 1 sinon. Il s'agit ni plus ni moins qu'une porte NAND, et le circuit précédent la contient déjà : c'est celle en haut à gauche. On peut donc prendre sa sortie pour l'envoyer au bon endroit, ce qui donne le circuit suivant :
Il est possible de fabriquer une bascule D avec une bascule RS à ET/OU. Le circuit obtenu est alors identique au circuit obtenu avec un multiplexeur basé sur des portes logiques.
Les bascules JK conçues à partir de bascules RS
modifierIl est possible de construire une bascule JK à partir d'une bascule RS. Ce qui n'est pas étonnant, vu que les bascules RS et JK sont très ressemblantes. Il suffit d'ajouter un circuit qui déduise quoi mettre sur les entrées R et S suivant la valeur sur les entrées J et K. Le circuit en question est composé de deux portes ET, une par entrée.
Il est possible de faire la même chose avec une bascule RS à entrée Enable, qui donne une bascule JK à entrée Enable.