Qu'est-ce que Banc de test (testbench) ?

Description destinée à la simulation qui applique des entrées au circuit à vérifier et contrôle l'exactitude des sorties. N'étant pas synthétisée, elle peut utiliser librement délais, instructions d'affichage, etc.

Nom japonais: テストベンチ

« Banc de test (testbench) » apparaît dans 5 questions d'entraînement réparties sur 1 thèmes, dont HDL et vérification.

Domaine: HDL et vérification

Ce que contient un banc de test

Un banc de test est un module HDL de plus haut niveau, généralement sans ports, qui instancie la conception à vérifier (DUT) et l'entoure de tout ce qu'il faut pour l'exercer. Il génère l'horloge, par exemple always #5 clk = ~clk; qui bascule toutes les 5 unités de temps et donne une période de 10 ns avec une unité de 1 ns, applique le reset, pilote les stimuli d'entrée et observe les sorties. Il peut aussi lire des vecteurs de test dans des fichiers, écrire des journaux et enregistrer des chronogrammes. Le DUT est la conception synthétisable ; le banc de test n'existe qu'en simulation.

Constructions réservées à la simulation

Comme un banc de test n'est jamais synthétisé, il peut utiliser des fonctionnalités sans signification matérielle. Les instructions de délai comme #10 font avancer le temps de simulation, $display et les entrées-sorties fichier affichent ou enregistrent des valeurs, et l'opérateur d'égalité stricte === compare littéralement les bits X et Z, ce qui permet à un test de détecter une sortie devenue inconnue. La synthèse ignore ou rejette ces constructions ; elles doivent donc rester hors du RTL. Si elles se glissent dans le code de conception, le comportement en simulation et celui du matériel peuvent diverger d'une manière difficile à déboguer.

Éviter les courses au front d'horloge

Un bogue courant des bancs de test consiste à modifier une entrée du DUT par une affectation bloquante exactement au même instant de simulation que le front montant de l'horloge. Que les bascules du DUT capturent l'ancienne ou la nouvelle valeur dépend alors de l'ordre dans lequel le simulateur exécute les événements, une course dont le résultat peut même différer d'un simulateur à l'autre. Une pratique plus sûre consiste à piloter les entrées sur le front opposé de l'horloge ou un peu après le front actif, à utiliser des affectations non bloquantes, ou à recourir aux clocking blocks de SystemVerilog, qui définissent explicitement les instants d'échantillonnage et de pilotage.

Des chronogrammes aux tests autovérifiants

Pour un petit bloc, l'examen visuel des chronogrammes peut suffire, mais cela ne passe pas à l'échelle. Un banc de test autovérifiant calcule ou recherche le résultat attendu pour chaque entrée, souvent avec un modèle de référence, le compare automatiquement à la sortie du DUT et signale les écarts comme des erreurs. Des milliers de tests peuvent alors s'exécuter sans surveillance, par exemple la nuit en régression. Les projets plus importants s'appuient sur ce principe avec des stimuli aléatoires sous contraintes, des scoreboards et la collecte de couverture, et l'effort de vérification égale ou dépasse souvent celui de la conception.

S'entraîner : questions sur Banc de test (testbench)

Quelle est la définition du banc de test utilisé en vérification HDL ?

  1. AL'équipement d'usine servant à fabriquer le circuit
  2. BUne description destinée à la simulation, qui applique des entrées au circuit vérifié et contrôle la justesse des sorties, sans être synthétisée
  3. CUn instrument mesurant la consommation du circuit
Afficher la réponse et l'explication

Réponse : B. Une description destinée à la simulation, qui applique des entrées au circuit vérifié et contrôle la justesse des sorties, sans être synthétisée

Le banc de test est une description HDL qui instancie le circuit vérifié (DUT), génère et applique horloge, réinitialisation et signaux d'entrée, et observe les sorties. N'étant pas destiné à devenir un circuit, il peut librement utiliser les fonctions de simulation : délais, lectures et écritures de fichiers, commandes d'affichage. Il demande parfois autant d'efforts que la conception, voire davantage.

Dans un banc de test, modifier les entrées du circuit par affectation bloquante au même instant que le front montant d'horloge peut poser problème. Quelle combinaison de raison principale et de remède est correcte ?

  1. ALa valeur capturée, d'avant ou d'après le changement, dépend de l'ordre d'exécution (course) ; on décale légèrement les entrées par rapport au front d'horloge ou on les modifie par affectation non bloquante
  2. BLa fréquence d'horloge baisse automatiquement ; on accélère l'horloge
  3. CL'affectation bloquante est interdite dans les bancs de test ; on utilise uniquement des instructions assign
Afficher la réponse et l'explication

Réponse : A. La valeur capturée, d'avant ou d'après le changement, dépend de l'ordre d'exécution (course) ; on décale légèrement les entrées par rapport au front d'horloge ou on les modifie par affectation non bloquante

Si, au même instant, le banc de test réécrit les entrées et les bascules du circuit les capturent, la valeur capturée sera ancienne ou nouvelle selon l'ordre d'exécution choisi par le simulateur. C'est une course (race) de simulation, dont le résultat peut varier d'un simulateur à l'autre. On l'évite en modifiant les entrées sur le front descendant, en les retardant légèrement, ou en utilisant l'affectation non bloquante ou les clocking blocks de SystemVerilog.

Questions fréquentes

Un banc de test est-il synthétisable ?

Non. Un banc de test est écrit uniquement pour la simulation ; il utilise donc librement délais, instructions d'affichage, entrées-sorties fichier et autres constructions qui ne peuvent pas devenir du matériel.

Qu'est-ce que le DUT dans un banc de test ?

DUT signifie design under test (conception sous test), le module synthétisable que le banc de test instancie, pilote avec des stimuli et vérifie.

Quelle est la différence entre == et === dans un banc de test Verilog ?

L'opérateur == renvoie X si l'un des opérandes contient des bits X ou Z, comme un comparateur matériel. L'opérateur === compare littéralement X et Z et renvoie toujours 0 ou 1 ; les bancs de test l'utilisent donc pour détecter des sorties inconnues.

« Banc de test (testbench) » dans les explications

Questions mentionnant « Banc de test (testbench) » (5)

  1. Quelle est la définition du banc de test utilisé en vérification HDL ?
  2. Quelle est la période de l'horloge générée par la description de banc de test ci-dessus (unité de temps de 1 ns) ?
  3. Dans un banc de test, modifier les entrées du circuit par affectation bloquante au même instant que le front montant d'horloge peut poser problème. Quelle combinaison de raison principale et de remède est correcte ?
  4. Quelle est la caractéristique d'un banc de test autovérifiant ?
  5. Quelle est la différence entre les opérateurs d'égalité « == » et « === » en Verilog ?

Termes associés

PLL (boucle à verrouillage de phase) Affectation bloquante Affectation non bloquante SystemVerilog Verilog Comparateur Boucle combinatoire Codage one-hot Instruction generate Langage de description matérielle

Retour au glossaire