bitGateLab Digital · Apprendre
Français
Ouvrir le simulateur

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.

  1. Q0 passe de 1 à 0 au bout de 12 ns : la sortie se lit 0110.
  2. Q1 change au bout de 24 ns : 0100.
  3. Q2 change au bout de 36 ns : 0000.
  4. 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 Q0SuivantT2T1T0
000001001
001010011
010011001
011100111
100101001
101000101

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 :

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.

FrontBit d'entréeQ0 Q1 Q2 Q3
111 0 0 0
200 1 0 0
311 0 1 0
411 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.

Pour 4 bascules : un compteur binaire utilise les 16 états, un Johnson en utilise 8 et un compteur en anneau 4. Les états excédentaires du Johnson (8) et de l'anneau (12) doivent être corrigés par de la logique supplémentaire si le circuit risque d'y démarrer.

Erreurs fréquentes

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.

  1. Placez quatre bascules T avec T = 1, reliez l'horloge à la première et chaînez les autres en compteur asynchrone.
  2. Reliez les quatre sorties à des voyants et à un afficheur ou à une barre de LED.
  3. 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.
  4. Ouvrez le chronogramme, laissez tourner l'horloge et observez la transition de 0111 à 1000 dans les deux compteurs.
  5. 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

  1. 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).

  2. 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.

  3. 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.

  4. 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.