Qu'est-ce qu'un Testbench
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 d'essai (testbench) ?
Lorsque vous construisez un module, vous devez vous assurer qu'il fonctionne correctement. Un banc d'essai 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
Banc de test (Testbench) vs Module de conception
| Module de conception | Banc de test | |
|---|---|---|
| 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 de banc de test simple
module testbench; // Pas de ports !
// Les entrées et sorties proviennent du module que nous testons (le DUT).
reg a, b; // reg pour les entrées
wire c; // wire pour la sortie
// C'est une instanciation de module — cela crée une copie du module and_gate et le nomme dut
and_gate dut ( // Instancier le DUT
.a(a),
.b(b),
.c(c)
);
// C'est un bloc initial qui applique des valeurs de test aux entrées du module 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 (testbench) n'a aucun port
regest utilisé pour les signaux qui changent (entrées vers le DUT)wireest utilisé pour les signaux provenant du DUT (sorties)
- Le module en cours de test est appelé DUT (Design Under Test)
$finishtermine la simulation
Nous aborderons la création de stimulus, l'affichage des résultats et d'autres fonctionnalités de testbench dans les leçons suivantes.
Défi
On vous donne un module de porte AND. Votre tâche consiste à ajouter les parties manquantes à son banc de test (testbench).
Ce qu'il faut faire :
Ajoutez les parties suivantes au testbench :
- Déclarez
regpour les entréesaetb - Déclarez
wirepour la sortiec - Instanciez
and_gateavec le nomdutet connectez les ports
Aide-mémoire
Un banc de test (testbench) est un module Verilog utilisé pour tester un autre module (le DUT - Design Under Test). Il ne possède aucun port et est réservé à la simulation.
module testbench; // Aucun port !
reg a, b; // reg pour les entrées (signaux qui changent)
wire c; // wire pour les sorties du DUT
and_gate dut ( // Instancier le DUT
.a(a),
.b(b),
.c(c)
);
initial begin // Appliquer les valeurs de test
a = 0; b = 0; #10;
a = 1; b = 1; #10;
$finish; // Fin de la simulation
end
endmodule- Utilisez
regpour les signaux pilotés dans les blocsinitial(entrées du DUT) - Utilisez
wirepour les signaux provenant du DUT (sorties) $finishmet fin à la simulation
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 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 boucles14Les bases du Testbench
Qu'est-ce qu'un TestbenchCréation de stimuliDisplay et MonitorDumpfile et DumpvarsUtilisation des tâches systèmeRécapitulatif - Testbench complet3Systè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