Menu
Coddy logo textTech

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 conceptionBanc de test
ObjectifImplémente le matérielTeste le module de conception
Possède des ports ?Oui (entrées et sorties)Non (autonome)
Synthétisable ?OuiNon (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
endmodule

Points clés

  • Le banc de test (testbench) n'a aucun port
  • reg est utilisé pour les signaux qui changent (entrées vers le DUT)
  • wire est utilisé pour les signaux provenant du DUT (sorties)
  • Le module en cours de test est appelé DUT (Design Under Test)
  • $finish termine 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.

challenge icon

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 :

  1. Déclarez reg pour les entrées a et b
  2. Déclarez wire pour la sortie c
  3. Instanciez and_gate avec le nom dut et 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 reg pour les signaux pilotés dans les blocs initial (entrées du DUT)
  • Utilisez wire pour les signaux provenant du DUT (sorties)
  • $finish met 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
endmodule
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Fondamentaux