Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> VHDL

Terminer proprement une simulation de banc de test VHDL

Lorsqu'un banc de test VHDL atteint la fin de son exécution prévue, vous voudrez que le simulateur s'arrête proprement et, si possible, rende le contrôle à tout script appelant. Cet article passe en revue les techniques les plus courantes et fiables pour arrêter une simulation sur les principaux simulateurs VHDL, avec des exemples de code pour ModelSim, Vivado et les scripts Tcl.

1. Utiliser la procédure finish (VHDL‑2008)

La routine finish du paquet std.env est le moyen le plus simple de terminer un banc de test qui s'est achevé sans erreurs. Compilez seulement le banc de test en VHDL‑2008 ; le RTL peut rester dans une norme antérieure.

use std.env.finish; ... SEQUENCER_PROC : process begin -- Insérer la logique du banc de test ici wait until stop_condition; report "Calling 'finish'"; finish; end process;

Par défaut, finish demandera à l'interface graphique de confirmer la terminaison. Si vous préférez une sortie automatique — surtout en mode batch — ajoutez l'option -onfinish stop à vsim :

vsim -onfinish stop work.using_finish_tb

En mode batch (vsim -c), le simulateur se termine proprement et le contrôle revient au shell, ce qui est idéal pour les scripts de régression :

jonas@ubuntu:~/stop_tb$ vsim -c -do 'vsim work.using_finish_tb; run -all' # … # ** Note: Calling 'finish' # Time: 1 ms Iteration: 0 Instance: /using_finish_tb # End time: 22:58:31 on Jun 21,2020, Elapsed time: 0:00:00 # Errors: 0, Warnings: 8 jonas@ubuntu:~/stop_tb$

Deux surcharges existent : procedure FINISH; et procedure FINISH (STATUS : INTEGER);. La valeur de statut est dépendante du simulateur, donc s'y fier pour les codes de sortie est déconseillé. Dans ModelSim, vous pouvez définir explicitement le code de sortie du shell avec exit -code <value> dans un script Tcl.

2. Utiliser la procédure stop (VHDL‑2008)

La routine stop met la simulation en pause — utile pour une inspection manuelle ou une reprise ultérieure. Elle se comporte comme un point d'arrêt.

use std.env.stop; ... SEQUENCER_PROC : process begin wait until stop_condition; report "Calling 'stop'"; stop; end process;

Dans un flux piloté par script, stop vous laissera dans un shell Tcl, donc le script bloquera à moins que vous n'émettiez exit manuellement. C'est pourquoi finish est généralement préféré pour les exécutions automatisées.

3. Tirer parti d'un échec d'assertion

Certains concepteurs terminent un banc de test en provoquant délibérément un échec d'assertion. Cette méthode fonctionne dans toutes les versions de VHDL et ne nécessite aucun import supplémentaire :

SEQUENCER_PROC : process begin wait until stop_condition; assert false report "Test: OK" severity failure; end process;

Bien qu'elle garantisse la terminaison du simulateur, la console rapportera un failure même si le test a réussi, ce qui peut induire en erreur les outils de régression automatisés qui traitent les échecs comme des erreurs.

4. Contrôler la terminaison avec des rappels Tcl

Pour un contrôle plus flexible — comme inspecter des signaux ou effectuer un nettoyage — vous pouvez lier un signal VHDL à un rappel Tcl. Le banc de test VHDL signale un booléen stop_condition quand tous les cas de test sont terminés.

signal stop_condition : boolean; begin -- Exemple : bascule après 1 ms stop_condition <= not stop_condition after 1 ms; SEQUENCER_PROC : process begin -- logique du banc de test wait; -- garder le processus dormant end process; 

ModelSim

when {stop_condition} { stop echo "Test: OK" } run -all

Quand stop_condition devient vrai, le rappel s'exécute, affiche un message, et met la simulation en pause. Vous pouvez remplacer stop par exit pour quitter le simulateur immédiatement.

Vivado

set sim_fileset sim_1 launch_simulation -simset [get_filesets $sim_fileset] add_condition -notrace stop_condition { stop puts "Test: OK" } run all

L'indicateur -notrace supprime l'écho des commandes, gardant la sortie console propre.

Recommandation finale

Sur tous les simulateurs majeurs, la procédure finish VHDL‑2008 reste le choix le plus portable et compatible avec les scripts. Elle termine proprement la simulation dans les environnements GUI et batch sans invites interactives persistantes.

Néanmoins, les rappels Tcl offrent de puissantes capacités de débogage quand vous avez besoin de mettre en pause la simulation et d'inspecter ou manipuler des signaux à la volée.

Télécharger les projets exemples

Les utilisateurs de ModelSim peuvent recevoir une archive zip contenant quatre bancs de test illustratifs en soumettant leur adresse e-mail ci-dessous. (Les utilisateurs de Vivado peuvent reproduire les exemples avec un effort minimal.)

VHDL

  1. Créer des listes de chaînes en VHDL : Bonnes pratiques et exemple
  2. Créer un banc de test piloté par Tcl pour un module verrou code VHDL
  3. Implémenter un contrôleur PWM en VHDL : Conception, simulation et démo FPGA
  4. Générer des nombres aléatoires en VHDL : De l'uniforme à OSVVM
  5. Améliorer la vérification matérielle avec un testbench interactif basé sur Tcl
  6. Comment construire un testbench auto-vérifiant en VHDL - Guide pratique
  7. Implémentation d'une liste chainée dynamique en VHDL avec types protégés et pointeurs d'accès
  8. Exploiter les procédures in-process pour un design FSM VHDL plus propre
  9. Vaincre la rouille : 5 stratégies éprouvées pour préserver vos actifs métalliques