Apprendre › Chapitre 10
Compteurs et registres à décalage : conception pas à pas
7 min de lecture · Équipe bitGateLab
Un compteur est un groupe de bascules qui parcourt une suite fixe d'états à chaque impulsion d'horloge ; un registre est un groupe de bascules qui mémorise ou décale un mot binaire. Ils servent à mesurer des durées, à diviser des fréquences, à convertir des données de série en parallèle et à générer des séquences de commande. Vous devez bien maîtriser les bascules D, JK et T ainsi que leurs tables d'excitation, expliquées dans verrous et bascules.
Compteur asynchrone (à propagation)
La façon la plus simple de compter consiste à enchaîner des bascules T avec T = 1, de sorte que chacune change d'état à chaque front et divise la fréquence par 2. Seule la première reçoit l'horloge du système ; chacune des suivantes prend pour horloge la sortie de la précédente. Avec des bascules déclenchées sur front descendant, on relie le Q d'un étage à l'horloge du suivant et le compteur compte dans le sens croissant ; avec un front montant, il faut utiliser Q pour compter dans le sens croissant (avec Q, il décompterait).
Son défaut est le retard cumulé : l'étage n ne change qu'une fois que tous les précédents ont changé, comme une onde qui parcourt la chaîne. Pendant ce temps, la sortie passe par des valeurs fausses.
Exemple : compteur asynchrone 4 bits avec tCQ = 12 ns par bascule. Il passe de 0111 à 1000.
- Q0 passe de 1 à 0 au bout de 12 ns : la sortie se lit 0110.
- Q1 change au bout de 24 ns : 0100.
- Q2 change au bout de 36 ns : 0000.
- Q3 change au bout de 48 ns : 1000, la valeur correcte.
Pendant 48 ns, la sortie a affiché 0110, 0100 et 0000. Si un circuit décode ces valeurs, il verra de fausses impulsions. Pour toujours lire une valeur stable, la période de l'horloge doit dépasser 48 ns, c'est-à-dire f < 20.8 MHz.
Compteur synchrone
Dans le compteur synchrone, toutes les bascules reçoivent la même horloge, et c'est la logique qui décide lesquelles basculent. Dans un compteur binaire croissant, un bit bascule lorsque tous les bits de poids plus faible valent 1 :
T0 = 1, T1 = Q0, T2 = Q0·Q1, T3 = Q0·Q1·Q2
Toutes les sorties changent ensemble, tCQ après le front. La période minimale ne dépend plus du nombre de bits à travers la chaîne de bascules, mais de tCQ + retard de la AND + tsu.
Compteur modulo N
Un compteur modulo N parcourt N états, puis recommence. Il lui faut au moins ⌈log2 N⌉ bascules. Il y a deux façons de le réaliser.
Avec un reset asynchrone : on prend un compteur binaire et l'on détecte le premier état qui ne doit pas apparaître. Pour un modulo 10, cet état est 1010 ; il suffit d'une NAND de Q3 et Q1 reliée au clear actif à l'état bas, car c'est la première fois que Q3 et Q1 valent 1 en même temps. Cela fonctionne, mais l'état 1010 apparaît pendant quelques nanosecondes et produit une impulsion brève sur les sorties.
Conception synchrone : on écrit la table d'états et l'on calcule les entrées avec la table d'excitation. Il n'y a pas d'états transitoires.
Exemple : compteur synchrone modulo 6 (0 à 5) à bascules T. États Q2 Q1 Q0 ; les états 110 et 111 ne sont pas utilisés et valent X.
| Q2 Q1 Q0 | Suivant | T2 | T1 | T0 |
|---|---|---|---|---|
| 000 | 001 | 0 | 0 | 1 |
| 001 | 010 | 0 | 1 | 1 |
| 010 | 011 | 0 | 0 | 1 |
| 011 | 100 | 1 | 1 | 1 |
| 100 | 101 | 0 | 0 | 1 |
| 101 | 000 | 1 | 0 | 1 |
Chaque T vaut 1 lorsque le bit change. En simplifiant avec les X :
- T0 = 1.
- T1 = Q2·Q0 (couvre 001 et 011 ; pour 101, il vaut 0 car Q2 = 1).
- T2 = Q1·Q0 + Q2·Q0 = Q0·(Q1 + Q2).
Vérifiez les états inutilisés : depuis 110, T2 = 0, T1 = 0, T0 = 1, le compteur va en 111 ; depuis 111, T2 = 1, T1 = 0, T0 = 1, il va en 010. Les deux reviennent dans la séquence : le compteur démarre tout seul, même s'il s'allume dans un état invalide.
Registres à décalage
Un registre à décalage est une chaîne de bascules D : la sortie de chacune attaque l'entrée de la suivante et, à chaque front, tous les bits avancent d'une position. Selon la façon dont les données entrent et sortent, on les classe ainsi :
- SISO (entrée série, sortie série) : retarde un signal de n cycles d'horloge.
- SIPO (entrée série, sortie parallèle) : reçoit les bits un par un et les fournit tous ensemble. Il convertit du série en parallèle.
- PISO (entrée parallèle, sortie série) : charge un mot complet et le sort bit par bit. Chaque bascule a un MUX 2 vers 1 sur son entrée :
Di = CHARGE·Pi + CHARGE·Qi−1. - PIPO (parallèle vers parallèle) : un simple registre de mémorisation.
Exemple : registre SIPO 4 bits, initialement à 0000, avec Q0 ← entrée, Q1 ← Q0, Q2 ← Q1, Q3 ← Q2. On envoie les bits 1, 0, 1, 1 dans cet ordre.
| Front | Bit d'entrée | Q0 Q1 Q2 Q3 |
|---|---|---|
| 1 | 1 | 1 0 0 0 |
| 2 | 0 | 0 1 0 0 |
| 3 | 1 | 1 0 1 0 |
| 4 | 1 | 1 1 0 1 |
Après 4 fronts, lu dans l'ordre Q3 Q2 Q1 Q0, le registre contient 1011 : le premier bit envoyé se retrouve en Q3.
Compteur en anneau et compteur Johnson
Si l'on relie la sortie de la dernière bascule d'un registre à décalage à l'entrée de la première, on obtient un compteur en anneau. On l'initialise avec un seul 1 (par exemple 1000) et ce 1 circule : 1000, 0100, 0010, 0001, 1000. Avec n bascules, il a n états et chaque état est déjà décodé, puisqu'une seule sortie est à 1. Il faut garantir le chargement initial ; s'il démarre en 0000, il y reste pour toujours.
Si, au lieu de Q, on reboucle le Q de la dernière bascule, on obtient le compteur Johnson (ou compteur en anneau torsadé), à 2n états. Pour 4 bits (Q0 Q1 Q2 Q3, avec Q0 ← Q3) :
0000 → 1000 → 1100 → 1110 → 1111 → 0111 → 0011 → 0001 → 0000
Chaque état se distingue avec une AND à deux entrées seulement, en regardant où se trouve la frontière entre les uns et les zéros : par exemple, 1100 est le seul état avec Q1 = 1 et Q2 = 0, et 0000 est le seul avec Q0 = 0 et Q3 = 0.
Erreurs fréquentes
- Décoder les sorties d'un compteur asynchrone avec de la logique combinatoire sans tenir compte des états transitoires.
- Relier Q au lieu de Q entre les étages d'un compteur asynchrone à front montant et obtenir un décompteur.
- Oublier de vérifier où vont les états inutilisés d'un compteur modulo N.
- Démarrer un compteur en anneau sans charger le 1 initial.
- Se tromper dans l'ordre des bits en lisant un registre SIPO : le premier bit entré aboutit à l'extrémité la plus éloignée.
Essayez dans le simulateur
Comparer un compteur asynchrone et un compteur synchrone dans le chronogramme est la meilleure façon de voir l'effet de propagation.
- Placez quatre bascules T avec T = 1, reliez l'horloge à la première et chaînez les autres en compteur asynchrone.
- Reliez les quatre sorties à des voyants et à un afficheur ou à une barre de LED.
- Réalisez à côté le compteur synchrone avec T1 = Q0, T2 = Q0·Q1 et T3 = Q0·Q1·Q2, toutes les bascules ayant la même horloge.
- Ouvrez le chronogramme, laissez tourner l'horloge et observez la transition de 0111 à 1000 dans les deux compteurs.
- Réalisez un registre de quatre bascules D en chaîne, changez l'entrée série avant chaque front et observez comment les bits avancent ; rebouclez ensuite le Q du dernier étage sur le premier et vérifiez les 8 états du Johnson.
Exercices
- Combien de bascules faut-il pour un compteur modulo 12 binaire, en anneau et Johnson ?
Réponse
Binaire : 4 (24 = 16 ≥ 12). En anneau : 12. Johnson : 6 (2 × 6 = 12).
- Quelle porte et quelles sorties utiliseriez-vous pour réaliser un compteur modulo 12 avec un reset asynchrone actif à l'état bas, à partir d'un compteur binaire 4 bits ?
Réponse
12 = 1100. Une NAND de Q3 et Q2 reliée au clear, car c'est la première fois que les deux valent 1.
- Un compteur asynchrone 8 bits utilise des bascules avec tCQ = 10 ns. Quel est le temps d'établissement dans le pire des cas ?
Réponse
8 × 10 = 80 ns, par exemple lors du passage de 01111111 à 10000000.
- Quelle AND à deux entrées décode l'état 0111 du compteur Johnson 4 bits ?
Réponse
Q0·Q1 : c'est le seul état avec Q0 = 0 et Q1 = 1.