Machine à états
Fait partie de la section Fondamentaux du Journey Verilog de Coddy — leçon 88 sur 90.
Défi
Une machine à états est un circuit qui peut se trouver dans l'un des nombreux états possibles. Pour l'UART, nous avons différents états pour chaque bit : repos (idle), départ (start), bits de données 0-7 et arrêt (stop). Le compteur de bits (cnt) nous indique dans quel état nous nous trouvons. En fonction de cnt, nous décidons de la valeur à envoyer sur la ligne tx.
Vous disposez du compteur de bits de la leçon précédente. Vous devez le modifier pour qu'il fonctionne comme un émetteur UART.
Valeurs de bits à envoyer (pour la lettre 'A')
| cnt | valeur tx |
|---|---|
| 0 | 1 |
| 1 | 0 |
| 2 | 1 |
| 3 | 0 |
| 4 | 0 |
| 5 | 0 |
| 6 | 0 |
| 7 | 0 |
| 8 | 0 |
| 9 | 1 |
| 10 | 1 |
Ce qu'il faut faire
- Ajoutez une entrée nommée
start - Ajoutez un registre de sortie (output reg) nommé
tx - Dans le bloc
initial, régleztx = 1(état de repos haut) - Modifiez la logique du compteur :
- Lorsque
cnt == 0etstart == 1, réglezcnt <= 1(commencer la transmission) - Lorsque
cntest compris entre 1 et 9, incrémentez :cnt <= cnt + 1 - Lorsque
cnt == 10, réinitialisez à0
- Lorsque
Essayez vous-même
module uart_tx (
input clk,
output reg [3:0] cnt
);
initial begin
cnt = 0;
end
always @(posedge clk) begin
cnt <= cnt + 1;
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