Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> VHDL

VHDL-Testbench-Simulation sauber beenden

Wenn ein VHDL-Testbench das Ende seiner beabsichtigten Ausführung erreicht, möchte man, dass der Simulator sauber anhält und – falls möglich – die Kontrolle an ein aufrufendes Skript zurückgibt. Dieser Artikel beleuchtet die gängigsten und zuverlässigsten Techniken zum Stoppen einer Simulation in den wichtigsten VHDL-Simulatoren, mit Codebeispielen für ModelSim, Vivado und Tcl-Skripte.

1. finish-Prozedur verwenden (VHDL-2008)

Die finish-Routine aus dem std.env-Paket ist der direkteste Weg, um einen fehlerfrei abgeschlossenen Testbench zu beenden. Kompilieren Sie nur den Testbench in VHDL-2008; das RTL kann in einem früheren Standard verbleiben.

use std.env.finish; ... SEQUENCER_PROC : process begin -- Testbench-Logik hier einfügen wait until stop_condition; report "Calling 'finish'"; finish; end process;

Standardmäßig fordert finish in der GUI zur Bestätigung der Beendigung auf. Bevorzugen Sie automatischen Exit – besonders im Batch-Modus – fügen Sie den -onfinish stop-Switch zu vsim hinzu:

vsim -onfinish stop work.using_finish_tb

Im Batch-Modus (vsim -c) beendet der Simulator sauber und gibt die Kontrolle an die Shell zurück – ideal für Regressionsskripte:

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$

Zwei Überladungen existieren: procedure FINISH; und procedure FINISH (STATUS : INTEGER);. Der Statuswert ist simulatorspezifisch, daher wird davon abgeraten, sich für Exit-Codes darauf zu verlassen. In ModelSim können Sie den Shell-Exit-Code explizit mit exit -code <wert> in einem Tcl-Skript setzen.

2. stop-Prozedur verwenden (VHDL-2008)

Die stop-Routine pausiert die Simulation – nützlich für manuelle Inspektion oder spätere Fortsetzung. Sie verhält sich wie ein Breakpoint.

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

In einem skriptgesteuerten Workflow wirft stop Sie in eine Tcl-Shell, sodass das Skript hängen bleibt, es sei denn, Sie geben manuell exit ein. Deshalb wird finish für automatisierte Läufe generell bevorzugt.

3. Assertion-Fehler gezielt auslösen

Einige Designer beenden einen Testbench, indem sie absichtlich einen Assertion-Fehler provozieren. Diese Methode funktioniert in allen VHDL-Versionen und erfordert keine zusätzlichen Imports:

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

Zwar garantiert dies die Simulator-Beendigung, doch die Konsole meldet einen failure, obwohl der Test erfolgreich war – irreführend für automatisierte Regressionstools, die Failures als Errors werten.

4. Beendigung per Tcl-Callbacks steuern

Für flexiblere Kontrolle – etwa Signale inspizieren oder Cleanup durchführen – können Sie ein VHDL-Signal an einen Tcl-Callback binden. Der VHDL-Testbench signalisiert ein boolesches stop_condition, wenn alle Testfälle abgeschlossen sind.

signal stop_condition : boolean; begin -- Beispiel: Toggle nach 1 ms stop_condition <= not stop_condition after 1 ms; SEQUENCER_PROC : process begin -- testbench logic wait; -- Prozess ruhen lassen end process; 

ModelSim

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

Wenn stop_condition true wird, führt der Callback aus, gibt eine Nachricht aus und pausiert die Simulation. Ersetzen Sie stop durch exit, um den Simulator sofort zu beenden.

Vivado

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

Das -notrace-Flag unterdrückt das Echoen von Befehlen und hält die Konsolenausgabe sauber.

Empfehlung

Über alle gängigen Simulatoren hinweg bleibt die VHDL-2008 finish-Prozedur die portabelste und skriptfreundlichste Wahl. Sie beendet die Simulation sauber in GUI- und Batch-Umgebungen ohne nachgelagerte interaktive Prompts.

Dennoch bieten Tcl-Callbacks mächtige Debugging-Fähigkeiten, wenn Sie die Simulation anhalten und Signale on-the-fly inspizieren oder manipulieren müssen.

Beispielprojekte herunterladen

ModelSim-Nutzer erhalten per E-Mail-Adresse unten ein ZIP-Archiv mit vier illustrativen Testbenches. (Vivado-Nutzer können die Beispiele mit minimalem Aufwand nachbauen.)

VHDL

  1. String-Listen in VHDL erstellen: Best Practices & Beispiel
  2. Tcl-gesteuerter Testbench für ein VHDL Code-Lock-Modul erstellen
  3. PWM-Controller in VHDL implementieren: Design, Simulation & FPGA-Demo
  4. Zufallszahlen in VHDL generieren: Von Uniform zu OSVVM
  5. Hardware-Verifikation mit Tcl-basiertem interaktivem Testbench verbessern
  6. Selbstprüfenden VHDL-Testbench erstellen – Praxisleitfaden
  7. Dynamische verkettete Liste in VHDL mit Protected Types und Access-Pointern
  8. In-Prozess-Prozeduren für saubere VHDL-FSM-Entwürfe nutzen
  9. VHDL-Funktionen meistern: Praktischer Leitfaden für effizientes Design
  10. Rost besiegen: 5 bewährte Strategien zum Erhalt Ihrer Metallwerte