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 feu de signalisation. La machine à états détermine quand passer d’un état au suivant.
La logique de la machine à états contrôle quand et comment le feu de signalisation change d’état.
séquence des états
Vert → Jaune → Rouge → Vert → …
Votre tâche consiste à ajouter la logique de la machine à états au module.
Dans cette étape, un nouveau signal d’entrée, next, déclenche chaque changement ; le compteur de temporisation sera abordé à l’étape suivante. Conservez tout ce que vous avez écrit à l’étape précédente (le registre state, la déclaration inutilisée de counter et le bloc de sortie always @(*)).
À faire :
- Ajoutez un port d’entrée de 1 bit appelé
nextà l’en-tête du module, aprèsreset:input next,. Le banc de test génère une impulsion sur ce signal pour demander l’état suivant - Ajoutez un bloc
always @(posedge clk or posedge reset) - Lors de la réinitialisation, définissez
statesur Rouge (2) - Lorsque
nextvaut 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 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
// TODO: Ajouter la logique de la machine à états (sans timing)
// 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 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