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

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

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.

Hardware-Verifikation mit Tcl-basiertem interaktivem Testbench verbessern

Mehr zum Dot-Matrix-VHDL/FPGA-Kurs erfahren!

Start:

Noch offen.

VHDL

  1. Einführung in VHDL: Ihr erstes AND-Gate bauen
  2. Umfassender Guide zu VHDL Typkonvertierungen mit Numeric_Std & Std_Logic_Arith
  3. VHDL Procedure Beispiel: Inkrementieren eines Standard Logic Vectors
  4. VHDL Records für saubere, wiederverwendbare FIFO-Interfaces nutzen
  5. Signed vs. Unsigned in VHDL meistern: Praktische Einblicke
  6. C# using-Anweisungen meistern: Importe, Aliase und statische Direktiven
  7. String-Listen in VHDL erstellen: Best Practices & Beispiel
  8. Selbstprüfenden VHDL-Testbench erstellen – Praxisleitfaden
  9. Interaktiven Laser-Projektor mit Zigbee-Sensoren & Gravio Edge Platform bauen
  10. Fräsmaschine als Drehmaschine nutzen? Machbar, aber selten sinnvoll