Banc de test
Fait partie de la section Fondamentaux du Journey Verilog de Coddy — leçon 90 sur 90.
Défi
Un testbench fournit des entrées à votre conception et crée un fichier de forme d'onde. Il ne possède pas de ports propres.
Votre tâche
Créez un testbench qui :
- Déclare des
regpourclk,start, etdata_in(8 bits) - Déclare un
wirepourtxet unwire [3:0]pourcnt - Instancie le module
uart_tx, en connectant tous les ports :.clk,.start,.data_in,.tx,.cnt - Génère une horloge (bascule toutes les 5 unités de temps)
- À l'intérieur d'un bloc
initial:- Crée un fichier de forme d'onde nommé
"uart.vcd"en utilisant$dumpfileet$dumpvars - Définit
clk = 0,start = 1,data_in = 8'b01000001au temps 0 - Relâche
startaprès 10 unités de temps (start = 0) - S'exécute pendant 200 unités de temps
- Crée un fichier de forme d'onde nommé
Après avoir exécuté le testbench, ouvrez la forme d'onde pour vérifier le signal tx.
Essayez vous-même
module uart_tx (
input clk,
input start,
input [7:0] data_in,
output reg tx,
output reg [3:0] cnt
);
reg [9:0] shift_reg;
initial begin
cnt = 0;
tx = 1;
shift_reg = 0;
end
always @(posedge clk) begin
if (cnt == 0 && start) begin
shift_reg <= {1'b1, data_in, 1'b0};
cnt <= 1;
end
else if (cnt > 0 && cnt < 9) begin
tx <= shift_reg[0];
shift_reg <= shift_reg >> 1;
cnt <= cnt + 1;
end
else if (cnt == 9) begin
tx <= shift_reg[0];
shift_reg <= shift_reg >> 1;
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