← Retour au blogRegistres à décalage

Maîtriser les registres à décalage : de la conversion série au parallèle

Les registres à décalage chaînent des bascules D pour déplacer un bit par impulsion d'horloge. Construisez les variantes SIPO, PISO et PIPO et découvrez leur usage dans les UART et matrices de LED.

DennyDenny
8 min de lecture
Chalkboard feature illustration for “Maîtriser les registres à décalage : de la conversion série au parallèle”

En bref : un registre à décalage est une chaîne de bascules D dont la sortie de chaque étage alimente l’entrée du suivant. À chaque front d’horloge, chaque bit se décale d’une position. Les configurations sont SISO, SIPO — série vers parallèle, utilisé par les pilotes de LED 74HC595 —, PISO — parallèle vers série, employé dans les émetteurs UART — et PIPO.

Un registre à décalage déplace les données dans le matériel à raison d’un bit par cycle d’horloge. Il sert de pont entre transmission série et stockage parallèle. Des structures apparentées apparaissent dans les UART, les pilotes de LED, les sérialiseurs, les désérialiseurs et certains chemins de décalage de processeur, même si les décaleurs performants peuvent plutôt utiliser des réseaux combinatoires de type barrel shifter.

Qu’est-ce exactement qu’un registre à décalage ?

À la base, un registre à décalage est un circuit séquentiel synchrone. Il se compose d’une chaîne de bascules — généralement des D_FLIP_FLOP — raccordées à la manière d’une file où chacun transmet à son voisin. Chaque étage mémorise exactement un bit. À l’arrivée d’une impulsion d’horloge, tous les bits avancent d’une position vers la droite ou la gauche, comme des voyageurs qui se décalent d’un siège dans un train.

Schéma du composant D_FLIP_FLOP

Le composant SHIFT_REGISTER de digisim.io abstrait cette complexité, mais la propagation devient plus visible lorsque vous le construisez avec des unités D_FLIP_FLOP individuelles.

Explorer le composant D_FLIP_FLOP

Fondement mathématique

Le comportement d’un étage du registre obéit à l’équation caractéristique de la D_FLIP_FLOP :

Qnext=DQ_{next} = D

Dans un registre à plusieurs étages, l’entrée DD du nn-ième étage est reliée à la sortie QQ de l’étage (n−1)(n-1). L’état du registre entier à l’instant t+1t+1 s’écrit donc :

Qn(t+1)=Qn−1(t)Q_n(t+1) = Q_{n-1}(t)

C’est cette relation simple qui permet aux données de « circuler » dans le matériel.

Les quatre formes de déplacement des données

Tous les registres à décalage ne sont pas identiques. Selon la manière dont les données entrent et sortent, on distingue quatre catégories principales. Comprendre ces différences est indispensable pour choisir la bonne configuration dans une application donnée.

1. SISO : entrée série, sortie série

Entrée : un bit par cycle d’horloge. Sortie : un bit par cycle d’horloge, avec un retard.

Le SISO est la forme la plus simple. Les données entrent un bit à la fois et ressortent de la même manière à l’autre extrémité. Il se comporte comme un retard numérique en cycles : dans un SISO 4 bits, un bit qui entre maintenant apparaît à la sortie distante après quatre fronts d’horloge actifs. Les registres SISO sont donc utiles pour aligner des flux de commande ou de données déjà synchrones. Un registre à décalage générique ne constitue pas, à lui seul, une solution complète de passage entre domaines d’horloge.

2. SIPO : entrée série, sorties parallèles

Entrée : un bit par cycle d’horloge. Sortie : tous les bits disponibles simultanément.

Le SIPO est la configuration d’« expansion ». Vous lui fournissez un flux série de bits puis, lorsque le registre est plein, vous lisez simultanément toutes les sorties (Q0,Q1,Q2,Q3Q_0, Q_1, Q_2, Q_3). Les dispositifs à entrée série et sorties parallèles servent couramment à augmenter le nombre de sorties numériques, par exemple pour commander plusieurs indicateurs avec moins de broches du contrôleur. Le circuit 74HC595, abordé plus bas, associe un registre à décalage à un registre de stockage de sortie séparé.

3. PISO : entrées parallèles, sortie série

Entrée : tous les bits chargés simultanément. Sortie : un bit par cycle d’horloge.

Le PISO effectue l’opération inverse du SIPO. Il reçoit un « mot » complet — par exemple les 8 bits d’un bus de données — et le sérialise en un flux de bits individuels. Un émetteur UART contient cette fonction générale, entourée d’une logique de tramage, de débit en bauds, de parité, d’état et de mise en mémoire tampon.

4. PIPO : entrées parallèles, sorties parallèles

Entrée : tous les bits chargés simultanément. Sortie : tous les bits disponibles simultanément.

Un PIPO charge et restitue les données en parallèle. Pris isolément, il se comporte comme un registre ordinaire, utile pour capturer un mot sur un front d’horloge. Un registre à décalage « universel » associe le chargement parallèle à des modes de décalage vers la gauche et vers la droite choisis par des signaux de commande. Pour une valeur non signée qui ne déborde pas, un décalage logique d’une position à gauche multiplie par deux ; un décalage logique à droite effectue une division entière par deux. L’arithmétique signée et le dépassement demandent des précautions supplémentaires.

Composant registre à décalage

Spécification technique : table de vérité d’un SIPO 4 bits

Observons le comportement d’un SIPO 4 bits — entrée série, sorties parallèles — sur quatre cycles d’horloge. Supposons que nous introduisions la séquence binaire 10111011, en commençant par son bit de droite.

Impulsion d’horlogeEntrée série (DinD_{in})Q3Q_3Q2Q_2Q1Q_1Q0Q_0
État initial00000
T1T_111000
T2T_211100
T3T_300110
T4T_411011

Remarquez comment le « 1 » introduit à T1T_1 passe de Q3Q_3 à Q2Q_2, puis à Q1Q_1 et enfin à Q0Q_0. C’est le décalage en action.

Piège fréquent : timing et délais de propagation

Tous les étages échantillonnent leurs entrées sur le même front actif. La valeur précédemment mémorisée avance d’une position, car une bascule ne modifie sa sortie qu’après son délai clock-to-Q. Le bon fonctionnement exige à la fois le contrôle de setup au délai maximal et celui de hold au délai minimal.

Trois paramètres sont importants :

  1. Temps de setup (tsetupt_{setup}) : durée minimale pendant laquelle les données doivent rester stables avant le front d’horloge.
  2. Temps de hold (tholdt_{hold}) : durée minimale pendant laquelle les données doivent rester stables après le front d’horloge.
  3. Délai clock-to-Q (tcqt_{cq}) : temps écoulé entre le front actif et le changement de la sortie QQ de l’étage émetteur.

Pour une liaison directe entre deux étages, une condition de hold simplifiée est :

tcq,min+troute,min≥thold+tskew+Uholdt_{cq,min} + t_{route,min} \ge t_{hold} + t_{skew} + U_{hold}

Ici, un tskewt_{skew} positif signifie que l’horloge de l’étage récepteur arrive plus tard, selon la convention employée dans le guide du skew d’horloge. La vérification du setup utilise les délais maximaux clock-to-Q et de routage. L’analyse temporelle statique effectue ces contrôles à partir des délais caractérisés du composant cible ; un visualiseur de formes d’onde fonctionnelles ne permet pas d’établir la fermeture temporelle physique. Consultez setup, hold et métastabilité pour comprendre les contraintes sous-jacentes.

Ouvrir la démonstration du registre à décalage

Vérifier le comportement avec OSCILLOSCOPE_8CH

Lorsque vous construisez un SHIFT_REGISTER_8BIT, regarder les composants OUTPUT_LIGHT ne suffit pas : à haute fréquence, ils clignotent trop vite pour être suivis à l’œil nu.

Pour vérifier réellement votre circuit :

  1. Reliez CLOCK au canal 1 d’OSCILLOSCOPE_8CH.
  2. Reliez l’entrée série au canal 2.
  3. Reliez les sorties parallèles — de Q0Q_0 à Q5Q_5 — aux canaux restants.

Pendant la simulation, la trace doit former un escalier : le bit série échantillonné apparaît dans le premier étage après un front actif, puis avance d’un étage à chaque front suivant. Servez-vous de cette vue pour repérer les erreurs logiques d’ordre des bits, d’activation, de reset et de nombre de cycles. À moins que le modèle n’intègre des délais caractérisés, l’alignement apparent des formes d’onde ne démontre ni ne réfute le respect physique des temps de setup et de hold.

Applications concrètes : de 1978 à aujourd’hui

Les registres à décalage ne sont pas de simples exercices scolaires ; ce sont des composants indispensables de l’industrie électronique.

1. Le 74HC595 et la commande de LED

Le 74HC595 est un registre à décalage 8 bits à entrée série et sorties parallèles, doté d’un registre de stockage distinct. Un contrôleur peut décaler les données, puis actualiser ensemble les huit bits de sortie grâce à un signal de latch. Plusieurs composants peuvent être chaînés, mais le nombre et le type de charges restent limités par le courant de sortie, le courant total du boîtier, la fréquence d’horloge, l’intégrité du signal et les exigences de rafraîchissement. Les grands systèmes à LED nécessitent des pilotes adaptés plutôt qu’une extension directe sans limite.

2. UART/USART aux côtés d’un Intel 8086

L’Intel 8086 ne contenait pas d’UART intégré. Un système pouvait l’associer à un périphérique comme l’USART Intel 8251A. Conceptuellement, le processeur écrit un octet en parallèle dans le périphérique ; la logique d’émission ajoute le tramage et décale les bits sur la ligne série. La logique de réception échantillonne une trame série et rend l’octet reconstitué accessible sur le bus parallèle. Les implémentations UART modernes ajoutent au décalage sous-jacent la génération du débit en bauds, la gestion des bits de début et de fin, des indicateurs d’état et des tampons.

3. Multiplication et division

Saviez-vous que décaler un nombre binaire d’une position vers la gauche revient mathématiquement à le multiplier par 2 ?

10112(1110)≪1=101102(2210)1011_2 (11_{10}) \ll 1 = 10110_2 (22_{10})

Les ALU modernes — unités arithmétiques et logiques — emploient des registres à décalage rapides pour réaliser ces opérations en un seul cycle d’horloge.

Construire votre premier registre à décalage dans digisim.io

Prêt à passer à la pratique ? Suivez ces étapes pour construire un registre SIPO 4 bits :

  1. Placez les étages : déposez quatre composants D_FLIP_FLOP sur le canevas.
  2. Chaînez les données : reliez la sortie QQ de la première bascule à l’entrée DD de la seconde, puis répétez pour tous les étages.
  3. Horloge commune : placez un composant CLOCK et reliez-le à l’entrée d’horloge des quatre bascules. Ce point est essentiel : elles doivent être synchrones.
  4. Entrée et sorties : reliez un INPUT_SWITCH à l’entrée DD de la première bascule et un OUTPUT_LIGHT à chaque sortie QQ.
  5. L’avantage SimCast : utilisez SimCast pour enregistrer le comportement du circuit. Basculez l’interrupteur d’entrée, envoyez une impulsion d’horloge et regardez le « 1 » parcourir les voyants.

Essayer le modèle SIPO 8 bits

Conclusion

Le registre à décalage démontre parfaitement qu’un comportement complexe peut émerger de composants simples. En chaînant quelques bascules, nous obtenons la capacité de convertir des formats de données, de retarder des signaux et d’effectuer des calculs.

Essayez de construire un registre à décalage bidirectionnel 4 bits, capable de décaler vers la gauche ou la droite selon un signal de commande, en associant un SHIFT_REGISTER à un multiplexeur sur l’entrée de données de chaque étage.

Poursuivez avec les modes SISO, SIPO, PISO et PIPO, ou ouvrez la référence du composant bascule D — l’élément de mémorisation de ce modèle pédagogique.

Transformez l’idée en un circuit fonctionnel.