Registre à décalage
Fait partie de la section Fondamentaux du Journey Verilog de Coddy — leçon 86 sur 90.
Défi
Un registre à décalage décale les données de gauche à droite à chaque front d'horloge. Chaque bit se déplace vers la position suivante.
Comment fonctionne un registre à décalage de 4 bits
Initial: q0=0, q1=0, q2=0, q3=0
Clock 1: q0 = d, q1 = old q0, q2 = old q1, q3 = old q2
Clock 2: q0 = d, q1 = old q0, q2 = old q1, q3 = old q2Après 4 cycles d'horloge, le premier bit d'entrée atteint q3.
Interface du module
| Port | Direction | Largeur | Description |
|---|---|---|---|
clk | input | 1 bit | Signal d'horloge |
reset | input | 1 bit | Réinitialise toutes les sorties à 0 |
d | input | 1 bit | Entrée de données |
q0 | output | 1 bit | Sortie de la première bascule |
q1 | output | 1 bit | Sortie de la deuxième bascule |
q2 | output | 1 bit | Sortie de la troisième bascule |
q3 | output | 1 bit | Sortie de la quatrième bascule |
Votre tâche est de compléter le module ci-dessous.
Ce qu'il faut faire :
- Lors du
reset, mettez toutes les sorties à 0 - À chaque front montant d'horloge, décalez les données de gauche à droite :
q0reçoitdq1reçoit l'ancienq0q2reçoit l'ancienq1q3reçoit l'ancienq2
Essayez vous-même
module shift_register (
input clk,
input reset,
input d,
output reg q0,
output reg q1,
output reg q2,
output reg q3
);
// TODO: Ajouter always @(posedge clk or posedge reset)
// Lors du reset : q0<=0, q1<=0, q2<=0, q3<=0
// Sinon : décalage des données : q0 <= d, q1 <= q0, q2 <= q1, q3 <= q2
endmodule
Toutes les leçons de Fondamentaux
1Introduction
Qu'est-ce que VerilogHardware vs SoftwareNiveaux d'abstraction de conceptionVotre premier moduleCommentaires4Opérateurs - Partie 1
Opérateurs arithmétiquesOpérateur moduloOpérateurs de comparaisonRécapitulatif - Mathématiques simplesOpérateurs bit à bit7Assignation et portes logiques
Assignation continueAssignation avec opérateursPrimitives de portes intégréesPortes AND OR NOTPortes XOR XNORRécapitulatif - Circuit à portes logiques10Prise de décision
Instruction IfIf - ElseRécapitulatif - Comparateur simpleInstruction CaseCasex et CasezRécapitulatif - Conception d'ALU2Types de données
Type WireType RegEntiers et RéelsVecteursTableauxParamètresRécapitulatif - Déclarer des signaux5Opérateurs - Partie 2
Opérateurs logiquesOpérateurs de réductionOpérateurs de décalageOpérateur de concaténationOpérateur conditionnelRécapitulatif - Défi sur les opérateurs11Boucles
Boucle ForBoucle WhileBoucle RépéterBoucle InfinieInstruction DisableRécapitulatif - Modèles de boucles3Système de numération
Représentation binaireNombres avec tailleNombres sans tailleNombres négatifsValeurs spéciales X et ZRécapitulatif - Formats de nombres6Modules
Structure d'un modulePorts d'entrée et de sortiePorts InoutInstanciation de moduleMappage de ports par nomMappage de ports par ordreRécapitulatif - Créer un module9Blocs procéduraux
Bloc AlwaysBloc InitialListe de sensibilitéAffectation bloquanteAffectation non bloquanteRécapitulatif - Always vs Initial12Projet Multiplexeur
Conception d'un Mux 2 vers 1Conception d'un Mux 4 vers 115Contrôleur de feux de circulation
Définition des étatsLogique de la machine à états