Een VHDL-testbench netjes beëindigen: methoden en best practices
Wanneer een VHDL-testbench het einde van de beoogde uitvoering bereikt, wil je dat de simulator netjes stopt en, indien mogelijk, de controle teruggeeft aan een aanroepend script. Dit artikel bespreekt de meest voorkomende en betrouwbare technieken om een simulatie te stoppen in de grote VHDL-simulators, met codevoorbeelden voor ModelSim, Vivado en Tcl-scripts.
1. De finish Procedure Gebruiken (VHDL‑2008)
De finish routine uit het std.env pakket is de meest directe manier om een testbench die zonder fouten is voltooid, te beëindigen. Compileer alleen de testbench in VHDL‑2008; de RTL mag in een eerdere standaard blijven.
use std.env.finish; ... SEQUENCER_PROC : process begin -- Testbench-logica hier invoegen wait until stop_condition; report "Calling 'finish'"; finish; end process;
Standaard zal finish de GUI vragen om bevestiging van beëindiging. Als je automatische afsluiting wilt — vooral in batch-modus — voeg de -onfinish stop switch toe aan vsim:
vsim -onfinish stop work.using_finish_tb
In batch-modus (vsim -c) sluit de simulator netjes af en keert controle terug naar de shell, ideaal voor regressie-scripts:
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$
Twee overloads bestaan: procedure FINISH; en procedure FINISH (STATUS : INTEGER);. De statuswaarde is simulator-afhankelijk, dus erop vertrouwen voor exit-codes wordt afgeraden. In ModelSim kun je de shell-exitcode expliciet instellen met exit -code <value> in een Tcl-script.
2. De stop Procedure Gebruiken (VHDL‑2008)
De stop routine pauzeert de simulatie — nuttig voor handmatige inspectie of later hervatten. Het gedraagt zich als een breakpoint.
use std.env.stop; ... SEQUENCER_PROC : process begin wait until stop_condition; report "Calling 'stop'"; stop; end process;
In een script-gedreven workflow zal stop je in een Tcl-shell droppen, dus het script zal hangen tenzij je handmatig exit uitgeeft. Daarom is finish over het algemeen te prefereren voor geautomatiseerde runs.
3. Een Assertion Failure Benutten
Sommige ontwerpers beëindigen een testbench door bewust een assertion-failure te veroorzaken. Deze methode werkt in alle VHDL-versies en vereist geen extra imports:
SEQUENCER_PROC : process begin wait until stop_condition; assert false report "Test: OK" severity failure; end process;
Hoewel het gegarandeerd de simulator laat stoppen, zal de console een failure rapporteren zelfs als de test geslaagd is, wat misleidend kan zijn in geautomatiseerde regressie-tools die falen als fouten behandelen.
4. Beëindiging Sturen met Tcl Callbacks
Voor flexibelere controle — zoals signalen inspecteren of opschonen — kun je een VHDL-signaal koppelen aan een Tcl-callback. De VHDL-testbench signaleert een boolean stop_condition wanneer alle testcases klaar zijn.
signal stop_condition : boolean; begin -- Voorbeeld: toggle na 1 ms stop_condition <= not stop_condition after 1 ms; SEQUENCER_PROC : process begin -- testbench-logica wait; -- houd het proces in rust end process;
ModelSim
when {stop_condition} { stop echo "Test: OK" } run -all
Wanneer stop_condition true wordt, voert de callback uit, print een bericht, en pauzeert de simulatie. Je kunt stop vervangen door exit om de simulator direct te verlaten.
Vivado
set sim_fileset sim_1 launch_simulation -simset [get_filesets $sim_fileset] add_condition -notrace stop_condition { stop puts "Test: OK" } run all
De -notrace vlag onderdrukt commando-echoing, wat de console-output schoon houdt.
Eindadvies
Over alle grote simulators heen blijft de VHDL‑2008 finish procedure de meest portable en script-vriendelijke keuze. Het beëindigt de simulatie netjes in zowel GUI- als batch-omgevingen zonder aanhangende interactieve prompts.
Niettemin bieden Tcl-callbacks krachtige debug-mogelijkheden wanneer je de simulatie moet pauzeren en signalen op de vlucht wilt inspecteren of manipuleren.
Voorbeeldprojecten Downloaden
ModelSim-gebruikers kunnen een zip-archief met vier illustrerende testbenches ontvangen door hun e-mailadres hieronder in te voeren. (Vivado-gebruikers kunnen de voorbeelden met minimale moeite repliceren.)
VHDL
- Roest overwinnen: 5 bewezen strategieën om uw metaalbezit te behouden
- Dynamische string-lijsten in VHDL: Best Practices & Voorbeeld
- Een Tcl-gedreven testbench maken voor een VHDL code-lock module
- Een PWM-controller implementeren in VHDL: Ontwerp, Simulatie en FPGA-demo
- Willekeurige getallen genereren in VHDL: Van Uniform naar OSVVM
- Hardwareverificatie verbeteren met een Tcl-gebaseerde interactieve testbench
- Een self-checking testbench in VHDL bouwen – Een praktische gids
- Een dynamische gelinkte lijst in VHDL implementeren met protected types en access pointers
- In-process procedures benutten voor schonere VHDL FSM-ontwerpen
- Impure functies in VHDL gebruiken: FSM-leesbaarheid en onderhoudbaarheid verbeteren
- VHDL-functies onder de knie krijgen: een praktische gids voor efficiënt ontwerp