Temporisation des transitions
Fait partie de la section Fondamentaux du Journey Verilog de Coddy. Leçon 81 sur 90.
Défi
Dans cette leçon, vous allez ajouter la logique du compteur qui contrôle la durée pendant laquelle chaque feu reste allumé. Le compteur décompte d’une valeur prédéfinie jusqu’à zéro, puis déclenche le changement d’état suivant.
Exigences de temporisation
| État | Durée | Valeur du compteur |
|---|---|---|
| Vert | 30 secondes | 30 |
| Jaune | 10 secondes | 10 |
| Rouge | 40 secondes | 40 |
Fonctionnement du compteur
- Lorsqu’un état commence, le compteur est chargé avec la valeur de la durée
- À chaque top d’horloge, le compteur diminue de 1
- Lorsque le compteur atteint 0, il est temps de passer à l’état suivant
Votre tâche consiste à ajouter la logique de compteur manquante à la machine à états. L’entrée next de l’étape précédente n’est plus utilisée : le compteur décide désormais quand l’état change, et le banc de test ne pilote plus next.
À faire :
- Supprimez
input next,de l’en-tête du module et remplacez la conditionelse if (next)par la logique du compteur ci-dessous - Ajoutez une déclaration
reg [5:0] counter(conservez-la si vous l’avez déjà déclarée à la première étape) - Lors de la réinitialisation, définissez
countersur 0 - Lorsque
counter == 0:- Chargez la durée de l’état suivant dans le compteur
- Passez à l’état suivant
- Sinon, décrémentez le compteur de 1 à chaque cycle d’horloge
Essayez vous-même
module traffic_light (
input clk,
input reset,
output reg red,
output reg yellow,
output reg green
);
reg [1:0] state;
// TODO: Déclarer le registre compteur (6 bits)
// Affectations des sorties
always @(*) begin
case (state)
0: begin green = 1; yellow = 0; red = 0; end
1: begin green = 0; yellow = 1; red = 0; end
2: begin green = 0; yellow = 0; red = 1; end
default: begin green = 0; yellow = 0; red = 1; end
endcase
end
// Machine d'états avec temporisation
always @(posedge clk or posedge reset) begin
if (reset) begin
state <= 2; // Démarrer au Rouge
// TODO: Mettre le compteur à 0
end else begin
if (counter == 0) begin
case (state)
0: begin
state <= 1;
// TODO: Charger le compteur pour Yellow (10 secondes)
end
1: begin
state <= 2;
// TODO: Charger le compteur pour Red (40 secondes)
end
2: begin
state <= 0;
// TODO: Charger le compteur pour Green (30 secondes)
end
endcase
end else begin
// TODO: Décrémenter le compteur de 1
end
end
end
endmoduleToutes les leçons de Fondamentaux
1Introduction
Qu’est-ce que VerilogMatériel vs logicielVotre premier moduleCommentairesNiveaux d’abstraction de conception4Opérateurs - Partie 1
Opérateurs arithmétiquesOpérateur moduloOpérateurs de comparaisonRécapitulatif - Mathématiques simplesOpérateurs bit à bit7Affectations et portes
Affectation continueAffectation avec opérateursPrimitives de portes intégréesPortes AND, OR et NOTPortes XOR et XNORRécapitulatif - Circuit de portes logiques10Prise de décision
Instruction IfIf - ElseRécapitulatif - Comparateur simpleInstruction CaseCasex et CasezRécapitulatif - Conception d'une 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 RepeatBoucle ForeverInstruction DisableRécapitulatif - Modèles de boucles3Système de numération
Représentation binaireNombres dimensionnésNombres non dimensionnésNombres négatifsValeurs spéciales X et ZRécapitulatif - Formats des nombres6Modules
Structure d’un modulePorts d’entrée et de sortiePorts InoutInstantiation d’un moduleAssociation des ports par nomAssociation des ports par ordreRécapitulatif - Construire un module9Blocs procéduraux
Bloc alwaysBloc initialListe de sensibilitéAffectation bloquanteAffectation non bloquanteRécapitulatif - always vs initial12Projet de multiplexeur
Conception d’un multiplexeur 2 vers 1Conception d’un multiplexeur 4 vers 115Contrôleur de feux de circulation
Définition des étatsLogique de la machine à étatsEntraînez-vous par vous-même : Compilateur Verilog en ligne