Conception de l'émetteur
Fait partie de la section Fondamentaux du Journey Verilog de Coddy — leçon 89 sur 90.
Défi
Dans cette leçon, vous allez terminer l'émetteur UART en ajoutant le registre à décalage pour envoyer n'importe quel octet, et pas seulement la lettre fixe 'A'.
Le registre à décalage charge la trame complète (bit de stop + 8 bits de données + bit de start) et la décale bit par bit vers la sortie.
Format de la Trame
| Stop (1) | Données (8 bits) | Start (0) |
|---|---|---|
| 1 | data_in | 0 |
Par exemple, si data_in = 8'b01000001 (lettre 'A'), le registre à décalage devient : 1 01000001 0
Votre Tâche
On vous donne la machine à états de la leçon précédente (qui transmet un octet fixe). Vous devez la modifier pour envoyer n'importe quel octet provenant de l'entrée data_in.
Ce qu'il faut faire :
- Ajoutez une
input [7:0]nomméedata_inà la liste des ports (à l'intérieur des parenthèses) - Ajoutez un
regde 10 bits nomméshift_regen dehors des parenthèses (à l'intérieur du corps du module, car c'est un signal interne) - Lorsque
cnt == 0etstart == 1:- Chargez
shift_regavec{1'b1, data_in, 1'b0}
- Chargez
- Lorsque
cntest compris entre 1 et 8 :- Envoyez
tx <= shift_reg[0] - Décalez vers la droite :
shift_reg <= shift_reg >> 1
- Envoyez
- Lorsque
cnt == 9:- Envoyez
tx <= shift_reg[0] - Décalez vers la droite :
shift_reg <= shift_reg >> 1
- Envoyez
Essayez vous-même
module uart_tx (
input clk,
input start, // NOUVEAU : signal start pour commencer la transmission
output reg tx, // NOUVEAU : ligne de sortie série
output reg [3:0] cnt // Garder comme sortie pour les tests
);
initial begin
cnt = 0;
tx = 1; // NOUVEAU : mettre tx à l'état HAUT (état de repos)
end
always @(posedge clk) begin
// NOUVEAU : Logique du compteur avec condition de démarrage
if (cnt == 0 && start) begin // NOUVEAU : commencer la transmission
cnt <= 1;
end
else if (cnt > 0 && cnt < 9) begin // NOUVEAU : compter pendant la transmission
cnt <= cnt + 1;
end
else if (cnt == 9) begin // NOUVEAU : réinitialiser après le dernier bit
cnt <= 0;
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