Un registre est un circuit qui permet de mémoriser plusieurs bits simultanément. Typiquement, on construit un registre en utilisant bascules D qui seront synchronisées sur le même signal d’horloge.
Si ces bascules D possèdent une entrée de validation , elles seront également reliées ensemble pour que toutes les bascules se mettent à jour sur les mêmes fronts d’horloge.
La figure ci-dessous représente un registre de 4 bits, son symbole à gauche et la structure interne à droite.
Dans une période du signal d’horloge, la valeur de la sortie Q est égale à la valeur que son entrée D avait au front d’horloge précédent. Si D ne change pas plus d’une fois pendant chaque période d’horloge, la sortie Q suit les variations de D, mais avec un retard. Un exemple de scénario est représenté sur ce chronogramme :
En mettant en cascade plusieurs bascules, chacune va introduire son propre retard. Ainsi, la sortie Q de la ième bascule reproduit l’entrée D de la première bascule avec fronts d’horloge de retard. Le schéma et le chronogramme ci-dessous représentent la structure et le comportement d’un circuit composé de trois bascules en cascade.
Le circuit que nous venons de représenter s’appelle un registre à décalage. Il doit son nom au fait que la valeur du registre – c’est-à-dire le vecteur formé par les valeurs des sorties Q – se décale d’un bit à chaque front d’horloge. Ce registre est dit à chargement série, c’est-à-dire que pour écrire une valeur dans les trois bascules, il faut présenter les bits un par un sur l’entrée et attendre une période d’horloge entre deux bits successifs.
Dans un registre à décalage à chargement parallèle, il est possible d’écrire dans toutes les bascules simultanément. Une entrée de commande permet de sélectionner le mode chargement ou le mode décalage. Dans l’exemple représenté ci-dessous, ce rôle est joué par l’entrée :
Un compteur est un circuit logique qui produit une séquence prédéfinie de valeurs entières au cours du temps, au rythme d’un signal d’horloge. Ces valeurs entières sont représentées en binaire sur un nombre de bits fixé.
Dans le cas le plus fréquent, on utilise un compteur pour produire une séquence d’entiers dans l’ordre croissant en partant de zéro. On parle de compteur modulo N lorsque le compteur compte jusqu’à une valeur N-1 et revient à zéro ensuite. Un décompteur est un circuit qui produit la même séquence dans l’ordre décroissant.
Le fonctionnement d’un compteur synchrone peut être décrit de la manière suivante :
Construisons un compteur modulo 6. Nous noterons sa valeur courante. La valeur suivante calculée par le circuit sera notée . Voici un algorithme qui détaille ce calcul :
répéter
si k = 5 alors
k* ← 0
sinon
k* ← k + 1
fin si
fin répéter
La boucle répéter
est là pour rappeler qu’un circuit logique est en permanence à l’écoute
de ses entrées et recalcule ses sorties dès qu’il détecte un changement.
Ici, dès que change, une nouvelle valeur de est automatiquement calculée.
La valeur courante du compteur sera mise à jour à chaque front montant d’un signal d’horloge que nous nommerons . devra rester stable entre deux fronts d’horloge pour que le calcul de donne un résultat correct. Nous souhaitons également pouvoir remettre à zéro dès qu’une commande est active.
répéter
si reset = 1 alors
k ← 0
sinon, si front-montant(clk) alors
k ← k*
fin si
fin répéter
À partir de ces algorithmes, nous pouvons commencer à proposer la structure d’un circuit. Tout d’abord, nous représenterons les valeurs de et en binaire sur trois bits. Le calcul de utilisera les composants suivants :
si-alors-sinon
),Pour aller plus loin, nous pouvons proposer une version plus légère de ce circuit. En effet, le calcul de peut être réécrit sous la forme d’une table de vérité :
→ | ||||||
---|---|---|---|---|---|---|
0 | 0 | 0 | → | 0 | 0 | 1 |
0 | 0 | 1 | → | 0 | 1 | 0 |
0 | 1 | 0 | → | 0 | 1 | 1 |
0 | 1 | 1 | → | 1 | 0 | 0 |
1 | 0 | 0 | → | 1 | 0 | 1 |
1 | 0 | 1 | → | 0 | 0 | 0 |
À partir de cette table de vérité, nous proposons les équations suivantes :
Le chronogramme ci-dessous représente un scénario de fonctionnement de ce compteur. Au démarrage, nous faisons l’hypothèse que le compteur est à zéro. À chaque front d’horloge (en orange), la valeur courante est mise à jour. Cette mise à jour déclenche le calcul de la valeur suivante .
Ce calcul n’est pas instantané : le chronogramme représente en violet la durée pendant laquelle les valeurs binaires traversent les portes logiques jusqu’à produire une valeur stable en , et . Pendant cette durée, ces trois signaux peuvent prendre des valeurs transitoires qui sont représentées par les zones hachurées. Pour ne pas surcharger le dessin, nous avons supposé que les trois signaux mettent autant de temps à se stabiliser mais ce n’est pas forcément le cas.
Un tel compteur est dit synchrone car tous les bits qui composent sa valeur sont mis à jour simultanément sur le même front d’horloge. Cette technique de construction de compteurs se distingue des compteurs asynchrones dans lesquels la sortie de chaque bascule sert d’horloge pour la bascule suivante.
Ainsi, dans un compteur asynchrone, les bits de la valeur courante sont mis à jour un par un après le front d’horloge. Si le compteur est connecté à d’autres circuits qui doivent déclencher des actions en fonction de la valeur courante, les états transitoires du compteur peuvent avoir des effets inattendus.
Pour cette raison, l’utilisation de compteurs asynchrone est déconseillée et ne sera pas détaillée dans ce cours.
Le chronogramme peut devenir difficile à lire lorsque le circuit contient des vecteurs avec un grand nombre de bits. Dans ce cas, il est d’usage de regrouper tous les bits d’un vecteur sur une seule ligne. Si ce vecteur représente un nombre entier, le chronogramme sera plus lisible en représentant ce nombre en décimal ou en hexadécimal.
Un registre est un groupe de bascules D qui permet de mémoriser une information représentée sur plusieurs bits. Toutes ses bascules sont synchronisées sur le même signal d’horloge.
Un registre à décalage est un registre dont les bascules sont reliées en cascade. À chaque front d’horloge, la valeur du registre se décale d’un bit.
Un compteur modulo est un circuit logique qui produit la séquence des valeurs entières de zéro à N-1 au rythme d’un signal d’horloge.