Qu'est-ce qu'un banc de test
Fait partie de la section Fondamentaux du Journey Verilog de Coddy. Leçon 73 sur 90.
Un testbench est un module Verilog spécial utilisé pour tester un autre module. Il fournit des entrées à votre conception et vérifie si les sorties sont correctes.
Pourquoi avons-nous besoin d’un banc de test ?
Lorsque vous construisez un module, vous devez vous assurer qu’il fonctionne correctement. Un banc de test vous permet de :
- Appliquer différentes valeurs d’entrée à votre module
- Observer les sorties
- Vérifiez si les sorties correspondent à ce que vous attendez
- Faites-le automatiquement sans tests manuels
Testbench contre module de conception
| Module de conception | Testbench | |
|---|---|---|
| Objectif | Implémente le matériel | Teste le module de conception |
| Possède des ports ? | Oui (entrées et sorties) | Non (autonome) |
| Synthétisable ? | Oui | Non (simulation uniquement) |
Exemple simple de banc de test
module testbench; // Pas de ports !
// Les entrées et les sorties proviennent du module que nous testons (le DUT).
reg a, b; // reg pour les entrées
wire c; // wire pour la sortie
// Ceci est une instanciation de module — elle crée une copie du module and_gate et la nomme dut
and_gate dut ( // Instancier le DUT
.a(a),
.b(b),
.c(c)
);
// Ceci est un bloc initial qui applique des valeurs de test aux entrées du module en cours de test.
initial begin // Appliquer les valeurs de test
a = 0; b = 0; #10;
a = 0; b = 1; #10;
a = 1; b = 0; #10;
a = 1; b = 1; #10;
$finish;
end
endmodulePoints clés
- Le banc de test n’a aucun port
regest utilisé pour les signaux qui changent (entrées de DUT)wireest utilisé pour les signaux provenant de DUT (sorties)
- Le module testé s’appelle DUT (Design Under Test)
$finishmet fin à la simulation
Nous aborderons la création de stimuli, l’affichage des résultats et d’autres fonctionnalités de banc de test dans les leçons suivantes.
Défi
Un module de porte AND vous est fourni. Votre tâche consiste à ajouter les éléments manquants à son banc de test.
À faire :
Ajoutez les éléments suivants au banc de test :
- Déclarez
regpour les entréesaetb - Déclarez
wirepour la sortiec - Instanciez
and_gatesous le nomdutet connectez les ports
Essayez vous-même
module and_gate (
input a,
input b,
output c
);
assign c = a & b;
endmodule
module testbench;
// Tâche 1 : Déclarer reg pour les entrées a et b
// Tâche 2 : Déclarer wire pour la sortie c
// Tâche 3 : Instancier and_gate avec le nom dut
// Connecter .a(a), .b(b), .c(c)
initial begin
a = 0; b = 0; #10 $display("%d & %d = %d", a, b, c);
a = 0; b = 1; #10 $display("%d & %d = %d", a, b, c);
a = 1; b = 0; #10 $display("%d & %d = %d", a, b, c);
a = 1; b = 1; #10 $display("%d & %d = %d", a, b, c);
$finish;
end
endmoduleCette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Fondamentaux
1Introduction
Qu’est-ce que VerilogMatériel vs logicielVotre premier moduleCommentairesNiveaux d’abstraction de conception4Opérateurs - Partie 1
Opérateurs arithmétiquesOpérateur moduloOpérateurs de comparaisonRécapitulatif - Mathématiques simplesOpérateurs bit à bit7Affectations et portes
Affectation continueAffectation avec opérateursPrimitives de portes intégréesPortes AND, OR et NOTPortes XOR et XNORRécapitulatif - Circuit de portes logiques10Prise de décision
Instruction IfIf - ElseRécapitulatif - Comparateur simpleInstruction CaseCasex et CasezRécapitulatif - Conception d'une 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 RepeatBoucle ForeverInstruction DisableRécapitulatif - Modèles de boucles14Bases du banc de test
Qu'est-ce qu'un banc de testCréer des stimuliAffichage et surveillanceDumpfile et DumpvarsUtiliser les tâches systèmeRécapitulatif - Banc de test complet3Système de numération
Représentation binaireNombres dimensionnésNombres non dimensionnésNombres négatifsValeurs spéciales X et ZRécapitulatif - Formats des nombres6Modules
Structure d’un modulePorts d’entrée et de sortiePorts InoutInstantiation d’un moduleAssociation des ports par nomAssociation des ports par ordreRécapitulatif - Construire un module9Blocs procéduraux
Bloc alwaysBloc initialListe de sensibilitéAffectation bloquanteAffectation non bloquanteRécapitulatif - always vs initial12Projet de multiplexeur
Conception d’un multiplexeur 2 vers 1Conception d’un multiplexeur 4 vers 115Contrôleur de feux de circulation
Définition des étatsLogique de la machine à étatsEntraînez-vous par vous-même : Compilateur Verilog en ligne