Hardware-Verifikation mit Tcl-basiertem interaktivem Testbench verbessern
Interaktiver Testbench
Ein interaktiver Testbench ermöglicht die Stimulierung des Device Under Test (DUT) durch einen Bediener während der Simulation – typischerweise durch Eingabe von Befehlen in der Simulator-Konsole. Er ergänzt einen selbstprüfenden Testbench ideal für Ad-hoc-Tests, da Code-Änderungen am automatisierten Testbench entfallen.
Im Labor entdeckte Probleme lassen sich so schnell im Simulator nachstellen, indem die beobachtete Eingabesequenz eingegeben wird.
Tcl-Interaktion mit VHDL
Die meisten VHDL-Simulatoren nutzen Tcl als Konsolensprache. Simulator-spezifische Befehle verhalten sich wie reguläre Tcl-Kommandos, sodass komplexe, weitgehend portable Skripte zur Testbench-Steuerung erstellt werden können.
VHDL-Signale aus Tcl ändern
In ModelSim dient der Befehl force zum Setzen von Signalwerten. Der Schalter -deposit ändert den Wert sofort, erlaubt aber spätere Änderungen durch andere Treiber (VHDL oder Tcl).
Vereinfachte Syntax:
force -deposit <signal_name> <value>
VHDL-Trigger-Prozess
Ein minimaler Testbench mit einem von Tcl gesteuerten Trigger:
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity interactive is
end interactive;
architecture sim of interactive is
signal trigger : std_logic := '0';
begin
process is
begin
wait until trigger = '1';
report "Triggered!";
end process;
end architecture;
Der Prozess erwacht bei Flanke von trigger auf '1' und meldet „Triggered!“. ModelSim-Konsolen-Protokoll:
VSIM 1> run 10 ns; VSIM 2> force -deposit /trigger '1' VSIM 3> run 0 ns; # ** Note: Triggered! # Time: 10 ns Iteration: 0 Instance: /interactive VSIM 4> force -deposit /trigger '0' VSIM 5> run 10 ns;
run 0 ns erzeugt einen Delta-Zyklus, damit der Prozess triggert, ohne Simulationszeit zu verstreichen.
VHDL-Signalwerte in Tcl lesen
Mit examine lassen sich Signalwerte abfragen:
VSIM 6> examine /trigger # 0
In Skripten weist man das Ergebnis einer Variablen zu:
VSIM 7> set triggerVal [examine /trigger] # 0 VSIM 8> puts "triggerVal: $triggerVal" # triggerVal: 0
Simulator nach jedem Test stoppen
Einfacher Ansatz: run <zeit> für feste Reaktionszeiten. Bei variabler Reaktionszeit kann ein VHDL-Assertion den Simulator anhalten und ein Tcl-Callback (onBreak) via ModelSim-when-Befehl auslösen.
Nachteile Tcl-gesteuerter Testbenches
- Geschwindigkeit: Wiederholtes Starten/Stoppen der Simulation für Tcl-Interaktion ist langsamer als rein VHDL-basierte Testbenches (Tcl interpretiert, VHDL kompiliert).
- Portabilität: Simulator-spezifische Befehle (
force,examine,when) sind nicht portabel; äquivalente Befehle anderer Simulatoren verhalten sich oft anders.
Ein Tcl-gesteuerter Testbench ist daher weniger portabel als ein reiner VHDL-Testbench.
Neuer VHDL- und FPGA-Kurs
* Ich erstelle einen neuen VHDL/FPGA-Kurs mit tiefgehender Testbench-Abdeckung. Sie lernen, ein FPGA-Design von Grund auf zu erstellen, selbstprüfende Testbenches zu schreiben und diese in interaktive Testbenches umzuwandeln.
* Aktualisiert am 12. Oktober 2020: Kurs abgeschlossen. Klicken Sie auf das Bild für Details.
Das Kursprojekt: Ein Dot-Matrix-LED-Controller auf dem 49 $ Lattice iCEstick. Am Ende läuft das Design auf einem Breadboard – Tastatureingaben erscheinen auf der LED-Matrix.
Mehr zum Dot-Matrix-VHDL/FPGA-Kurs erfahren!
Start:
Noch offen.
VHDL
- Einführung in VHDL: Ihr erstes AND-Gate bauen
- Umfassender Guide zu VHDL Typkonvertierungen mit Numeric_Std & Std_Logic_Arith
- VHDL Procedure Beispiel: Inkrementieren eines Standard Logic Vectors
- VHDL Records für saubere, wiederverwendbare FIFO-Interfaces nutzen
- Signed vs. Unsigned in VHDL meistern: Praktische Einblicke
- C# using-Anweisungen meistern: Importe, Aliase und statische Direktiven
- String-Listen in VHDL erstellen: Best Practices & Beispiel
- Selbstprüfenden VHDL-Testbench erstellen – Praxisleitfaden
- Interaktiven Laser-Projektor mit Zigbee-Sensoren & Gravio Edge Platform bauen
- Fräsmaschine als Drehmaschine nutzen? Machbar, aber selten sinnvoll