Le registre à décalage

Imaginez une rangée de 3 lampes numérotées de 1 à 3 qui s'allument l'une après l'autre à condition qu'une lampe ne s'allume que si la lampe précédente est éteinte. Pour faire fonctionner cela, vous pouvez programmer une carte SoC de la famille Arduino ou Raspberry Pi pour commander chaque lampe à travers un programme, comme vous pouvez utiliser un circuit logique de type registre à décalage.

Comme nous le savons, en électronique numérique, l'information est codée en binaire en seulement deux états, appelés aussi bits, soit le :

  • 0 : le courant électrique ne passe pas ou,
  • 1 : le courant électrique passe.

Un registre à décalage est un circuit séquentiel composé de plusieurs cases mémoire alignées, l'une après l'autre. Chaque case de mémoire est représentée par une bascule D, ou son équivalent (comme nous l'avons découvert précédemment, nous pouvons réaliser une bascule D à partir d'une bascule RS ou JK).

Dans un système électronique, un calculateur, un robot ou autre, un registre à décalage est principalement utilisé pour l'une des deux fonctions principales suivantes :

  • élément de mémoire : ce mécanisme permet de mémoriser une information binaire temporairement, conserver une suite de bits en attendant qu'un autre mécanisme termine son calcul, son traitement ou autre. Ce qui nous permet d'effectuer des opérations logiques parallèles.
  • Convertir parallèle ↔ série : un registre à décalage permet de convertir une information transmise en série (un bit à la fois) en une information en parallèle (plusieurs bits simultanément) et inversement puisque en :
    • parallèle : les bits circulent tous en même temps sur plusieurs fils distincts. Un registre de type SIPO permet ainsi de réaliser cette conversion.
    • série : les bits circulent les uns à la suite des autres sur un seul fil. Le registre de type PISO permet de convertir un signal parallèle en série.

Principe de fonctionnement

Un registre à décalage a pour fonction de mémoriser une suite de bits et de la déplacer d'une position vers la droite ou vers la gauche à chaque impulsion d'horloge telle que :

  • chaque case ne peut mémoriser qu'un seul bit à la fois ; donc soit la valeur 0, soit la valeur 1 logique.
  • transmettre l'information binaire tout en la décalant d'une case à l'autre, soit vers la gauche, soit vers la droite.

Logigramme

Prenons le logigramme ci-dessous d'un registre à décalage à 4 bits comme un premier exemple :

Registre à décalage à 4 bits

Comme nous pouvons le confirmer, ce registre est composé uniquement de bascules D. À chaque front montant du signal de l'horloge reçu H, appelé aussi CLK dans certains montages pour la terminologie clock en anglais, nous avons :

  • la bascule B0 recopie la valeur de D reçue sur son entrée D sur Q0,
  • la bascule B1 recopie la valeur de Q0 sur Q1,
  • la bascule B2 recopie la valeur de Q1 sur Q2 et,
  • la bascule B3 recopie la valeur de Q2 sur Q3.

Tableau de fonctionnement

Si nous envoyons un seul burst sur l'entrée D lors du premier front montant du signal d'horloge, soit donc le mot binaire $(1000)_2$, nous observons le décalage de l'information à chaque signal d'horloge reçu à partir du deuxième front montant. Le tableau ci-dessous nous résume cela :

$D$ H $Q_0$ $Q_1$ $Q_2$ $Q_3$ Explication du décalage
1 ↑ 1 0 0 0 le premier bit (1) est chargé vers $Q_0$. Le mot binaire à la sortie du registre est $(0001)_2$
0 ↑ 0 1 0 0 le deuxième bit (0) est envoyé vers $Q_0$ et le bit (1) est poussé vers $Q_1$. Le mot binaire à la sortie du registre est $(0010)_2$
0 ↑ 0 0 1 0 le troisième bit (0) est envoyé vers $Q_0$ et les deux bits précédents sont envoyés vers $Q_1$ et $Q_2$. Le mot binaire à la sortie du registre est maintenant $(0100)_2$.
0 ↑ 0 0 0 1 le quatrième bit (0) est envoyé vers $Q_0$ et les trois bits précédents sont envoyés vers $Q_1$, $Q_2$ et $Q_3$. Le mot binaire à la sortie du registre est maintenant $(1000)_2$.

Si le mot binaire à l'entrée de ce registre à décalage était $(1011)_2$, nous aurons comme suite à la sortie de ce système séquentiel :

$D$ H $Q_0$ $Q_1$ $Q_2$ $Q_3$ Explication du décalage
1 ↑ 1 0 0 0 le premier bit (1) est chargé vers $Q_0$. Le mot binaire à la sortie du registre est $(0001)_2$
0 ↑ 0 1 0 0 le deuxième bit (0) est envoyé vers $Q_0$ et le bit (1) est poussé vers $Q_1$. Le mot binaire à la sortie du registre est $(0010)_2$
1 ↑ 1 0 1 0 le troisième bit (1) est envoyé vers $Q_0$ et les deux bits précédents sont envoyés vers $Q_1$ et $Q_2$. Le mot binaire à la sortie du registre est maintenant $(0101)_2$.
1 ↑ 1 1 0 1 le quatrième bit (1) est envoyé vers $Q_0$ et les trois bits précédents sont envoyés vers $Q_1$, $Q_2$ et $Q_3$. Le mot binaire à la sortie du registre est maintenant $(1011)_2$.

Comme vous le constatez, on injecte toujours le mot binaire du bit ayant le poids le plus fort vers le bit ayant le poids le plus faible, soit donc du MSB au LSB.

Particularité : le bit de poids faible (LSB) en premier

Dans certains systèmes logiques, on est amené à injecter le mot binaire du LSB au MSB, ce qui donne l'inverse du mot binaire à la sortie du registre. Pour le mot binaire $(1011)_2$ injecté dans l'exemple précédent, si vous commencez par le bit de poids faible (1, 1, 0, 1), vous aurez à la sortie du registre le mot binaire inversé, soit $(Q_3, Q_2, Q_1, Q_0)_2 = (1101)_2$,  après 4 impulsions d'horloge. 

Les différents types

En fonction du mode d'écriture dans un registre et de la lecture de l'information à sa sortie, il existe 4 différents types. Pour un registre, la lecture et l'écriture peuvent se faire en mode série ou en mode parallèle tels que :

  • Serial In - Serial Out, appelé aussi SISO : l'écriture ne se fait que sur la première bascule, l'information entre bit par bit, et l'information sort bit par bit aussi, la lecture se fait sur la dernière bascule du bloc.
  • Serial In - Parallel Out, appelé aussi SIPO : l'écriture ne se fait que sur la première bascule, l'information entre bit par bit, et l'information est récupérée sur les sorties des différentes bascules qui constituent le registre.
  • Parallel In - Serial Out, appelé aussi PISO : l'écriture se fait sur l'ensemble des entrées des différentes bascules du registre et l'information est récupérée bit par bit depuis la dernière bascule du bloc.
  • Parallel In - Parallel Out, appelé aussi PIPO : à chaque cycle d'horloge, l'écriture se fait en parallèle sur l'ensemble des bascules et l'information est récupérée simultanément à partir des différentes sorties de toutes les bascules.

Le registre à 3 bascules (exemple d'application)

Soit le logigramme ci-dessous, composé de 3 bascules D nommées B0, B1 et B2. Chaque bascule est reliée à la sortie $Q_i$ de la bascule précédente et possède une sortie qui affiche la valeur qu'elle mémorise : soit $Q_0$, $Q_1$ et $Q_2$.

Registre à décalage à 3 bits (avec une entrée RAZ)

Comme nous pouvons le constater, ce circuit est piloté par trois entrées de commande telles que :

  • l'entrée D : est l'entrée principale de ce registre. Elle alimentera notre circuit par l'information binaire utilisée, soit 0 ou 1.
  • le signal d'horloge H : est l'entrée de l'horloge pour ce composant séquentiel. Elle permet de synchroniser les décalages. Pour cet exemple, l'horloge agira en marche d'escalier montante (↑). L'information est donc décalée à chaque front montant du signal d'horloge.
  • l'entrée RAZ : pour l'abréviation Remise à Zéro. Cette entrée force la remise à zéro de toutes les bascules lorsqu'elle est activée, RAZ = 1. Ce qui nous donne toutes les sorties de ce système égales à 0 ; soit  $Q_2 = 0$, $Q_1 = 0$ et $Q_0 = 0$.

À chaque front montant, les bascules copient la valeur binaire reçue à leurs entrées vers leurs sorties, ce qui nous permet donc d'écrire ce fonctionnement :

  • la bascule B2 recopie la valeur de $Q_1$ sur sa sortie $Q_2$.
  • la bascule B1 recopie la valeur de $Q_0$ sur sa sortie $Q_1$.
  • la bascule B0 recopie la valeur reçue à son entrée D sur sa sortie $Q_0$.

Pour mémoriser le mot $(110)_2$, soit une information binaire codée sur 3 bits, les bits doivent être saisis un par un (en mode série) via l'entrée D, en commençant par le bit de poids le plus fort, puis les autres bits jusqu'au LSB. Ce qui nous donne pour cet exemple : le 1 de gauche, puis le 1 du milieu, puis le 0 de droite. 

Le déroulement étape par étape du fonctionnement de ce système séquentiel à décalage se résume comme suit :

Étape $D$ RAZ H $Q_0$ $Q_1$ $Q_2$ Explication du décalage
Remise à zéro - 1 - x x x toutes les sorties sont remises à 0 : $Q_2$, $Q_1$ et $Q_0$
→ $D_2$ 1 0 ↑ 1 0 0 le premier bit (1) est chargé vers $Q_0$. Le mot binaire à la sortie du registre est $(001)_2$
→ $D_1$ 1 0 ↑ 1 1 0 le deuxième bit (1) est envoyé vers $Q_0$ et le bit (1) est poussé vers $Q_1$. Le mot binaire à la sortie du registre est $(011)_2$
→ $D_0$ 0 0 ↑ 0 1 1 le troisième bit (0) est envoyé vers $Q_0$ et les deux bits précédents sont envoyés vers $Q_1$ et $Q_2$. Le mot binaire à la sortie du registre est maintenant $(110)_2$.

Ainsi, après trois fronts montants d'horloge, le mot binaire $(110)_2$ est entièrement chargé dans notre registre à décalage et mémorisé sur les trois sorties $Q_0$, $Q_1$ et $Q_2$ de ce registre à décalage de type SIPO 3 bits.

Exemple de circuit logique

Sur le marché des composants électroniques, vous pouvez retrouver le 74HC165, un registre à décalage qui fonctionne selon le protocole Entrées parallèles / Sortie série (PISO : Parallel In, Serial Out) pour vos conceptions Arduino.

Par exemple, si vous connectez 3 registres en cascade, vous pouvez réaliser la lecture de 24 entrées, soit $8 × 3 = 24$ pour les envoyer vers une seule sortie série. Ainsi, vous pouvez lire l'état de 24 capteurs numériques à l'aide d'une seule broche de l'Arduino.


📝 La dernière modification de cette page a été faite le 15 November 2026 par Electro & Robot