Écriture du Testbench
Fait partie de la section Fondamentaux du Journey Verilog de Coddy — leçon 45 sur 90.
Défi
Maintenant, nous devons tester si le demi-additionneur fonctionne correctement. Ajoutez le code de test à l'intérieur du bloc initial.
Important : Avant d'ajouter le test, vous devez modifier les ports du module pour que le test puisse fonctionner correctement.
Ce qu'il faut faire :
Étape 1 : Modifier les déclarations de ports
- Remplacez
input a, bparreg a, b(utilisez le point-virgule) - Remplacez
output sum, carryparwire sum, carry(utilisez le point-virgule) - Supprimez entièrement les ports du module (le module ne doit pas avoir de
( ))
Étape 2 : Ajouter le code de test
- Ajoutez un bloc
initial begin - À l'intérieur du bloc, ajoutez :
$display("a b | sum carry");
a = 0; b = 0; #1 $display("%d %d | %d %d", a, b, sum, carry);
a = 0; b = 1; #1 $display("%d %d | %d %d", a, b, sum, carry);
a = 1; b = 0; #1 $display("%d %d | %d %d", a, b, sum, carry);
a = 1; b = 1; #1 $display("%d %d | %d %d", a, b, sum, carry);
- Ajoutez
$finish;pour terminer le test - Ajoutez
endpour fermer le bloc initial
Essayez vous-même
module half_adder (
input a,
input b,
output sum,
output carry
);
assign sum = a ^ b;
assign carry = a & b;
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