Compteur de bits
Fait partie de la section Fondamentaux du Journey Verilog de Coddy — leçon 87 sur 90.
Défi
Dans ce chapitre, vous allez construire un émetteur UART étape par étape. UART signifie Universal Asynchronous Receiver-Transmitter (Émetteur-Récepteur Asynchrone Universel). C'est un protocole matériel simple qui permet à deux appareils de communiquer en utilisant seulement un fil (pour la transmission) et un autre fil (pour la réception).
Pensez-y comme à deux personnes qui se parlent au téléphone — l'une parle (transmet), l'autre écoute (reçoit). L'UART envoie les données un bit à la fois, avec des bits de départ (start) et d'arrêt (stop) pour marquer le début et la fin de chaque octet.
Un émetteur UART envoie 10 bits : un bit de départ (1), des bits de données (8), un bit d'arrêt (1). Pour suivre quel bit nous envoyons, nous avons besoin d'un compteur de bits qui compte de 0 à 10.
Comment fonctionne le compteur de bits
- Commencer à 0
- À chaque cycle d'horloge, ajouter 1
- Lorsqu'il atteint 10, revenir à 0
- Répéter indéfiniment
Dans cette tâche, nous ne le réinitialiserons pas encore : nous allons seulement l'incrémenter.
Ce qu'il faut faire :
- Créez un module appelé
uart_txavec :- Une entrée :
clk - Une sortie :
cnt(4 bits, typereg)
- Une entrée :
- À l'intérieur du module :
- Initialisez
cntà 0 au début à l'intérieur d'un bloc initial - Ajoutez un bloc
always @(posedge clk) - Faites en sorte que
cntaugmente de 1 à chaque front d'horloge
- Initialisez
Essayez vous-même
// À FAIRE : Créer le module uart_tx avec l'entrée clk et la sortie cnt (4 bits)
// À FAIRE : Initialiser cnt à 0 au début à l'intérieur d'un bloc initial
// À FAIRE : Ajouter un bloc always @(posedge clk)
// À FAIRE : Incrémenter cntToutes 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