Logique de la machine à états
Fait partie de la section Fondamentaux du Journey Verilog de Coddy — leçon 80 sur 90.
Défi
Dans cette leçon, vous allez ajouter la logique de transition d'état au contrôleur de feux de circulation. La machine à états détermine quand passer d'un état à l'autre.
La logique de la machine à états contrôle quand et comment le feu de circulation change d'état.
Séquence d'États
Vert → Jaune → Rouge → Vert → …
Votre tâche consiste à ajouter la logique de la machine à états au module.
Ce qu'il faut faire :
- Ajoutez un bloc
always @(posedge clk or posedge reset) - Lors de la réinitialisation (reset), réglez
statesur Rouge (2) - Lorsque
nextest à 1, passez à l'état suivant :- Si l'état est Vert (0) : passez à Jaune
- Si l'état est Jaune (1) : passez à Rouge
- Si l'état est Rouge (2) : passez à Vert
Essayez vous-même
module traffic_light (
input clk,
input reset,
input next, // Déclencheur pour changer d'état
output reg red,
output reg yellow,
output reg green
);
reg [1:0] state;
// Affectations de sortie
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
// TODO: Ajouter la logique de la machine d'état (sans temporisation)
// always @(posedge clk or posedge reset) begin
// if (reset) begin
// state <= 2;
// end else if (next) begin
// case (state)
// 0: state <= 1;
// 1: state <= 2;
// 2: state <= 0;
// endcase
// end
// end
endmoduleToutes 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