Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> VHDL

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

  1. Roest overwinnen: 5 bewezen strategieën om uw metaalbezit te behouden
  2. Dynamische string-lijsten in VHDL: Best Practices & Voorbeeld
  3. Een Tcl-gedreven testbench maken voor een VHDL code-lock module
  4. Een PWM-controller implementeren in VHDL: Ontwerp, Simulatie en FPGA-demo
  5. Willekeurige getallen genereren in VHDL: Van Uniform naar OSVVM
  6. Hardwareverificatie verbeteren met een Tcl-gebaseerde interactieve testbench
  7. Een self-checking testbench in VHDL bouwen – Een praktische gids
  8. Een dynamische gelinkte lijst in VHDL implementeren met protected types en access pointers
  9. In-process procedures benutten voor schonere VHDL FSM-ontwerpen
  10. Impure functies in VHDL gebruiken: FSM-leesbaarheid en onderhoudbaarheid verbeteren
  11. VHDL-functies onder de knie krijgen: een praktische gids voor efficiënt ontwerp