Können Sie eine Modelsim-Testbench mit externen Stimuli verbinden?

Ich arbeite in einem Team, das sowohl Treibersoftware als auch FPGA-Entwicklung durchführt. Die FPGA-Simulation wird in Modelsim durchgeführt und die Treibersoftware ist in C geschrieben. Um das Integrationsrisiko zu minimieren, würde ich gerne die Interaktion zwischen den beiden Hälften unseres Produkts modellieren können, bevor wir es auf Hardware setzen.

Ich weiß, dass Modelsim eine Testbench unterstützt, mit der Sie Stimuli in Form einer Textdatei mit Zeiten und Werten zur Eingabe bereitstellen können. Ich frage mich, ob Modelsim über einen Modus verfügt, mit dem Sie eine Pipe an eine externe Anwendung (z. B. unseren Treiber) anschließen und eine Art verteilte Simulation ausführen können, bei der die Software Werte in die Testbench übertragen und die Ergebnisse später beobachten kann .

Der Trick, den ich mit einer Textdateieingabe nicht ausführen kann, besteht darin, dass die beiden Hälften des Produkts interagieren. Ich muss die Software Werte in den FPGA-Simulator "schreiben", die Ergebnisse lesen und dann neue Werte in den FPGA schreiben, die von den gelesenen Ergebnissen abhängen. Bei Textdateien müssen die Eingaben unabhängig von der Ausgabe sein.

Ich habe sowohl auf StackExchange als auch auf Google gesucht, aber ich konnte keine Schlüsselwörter finden, um meine Suche ausreichend einzugrenzen, um entweder das gesuchte Verhalten zu identifizieren oder festzustellen, dass es nicht existiert.

Antworten (2)

Externe Steuerung einer ModelSim-Simulation über Unix Named Pipes

Zusammenfassung: In dieser Diplomarbeit stellen wir eine Methode zur Steuerung einer ModelSim-Simulation über ein externes Programm vor. Die Kommunikation zwischen ModelSim und dem externen Programm wird durch die Verwendung von Named Pipes ("FIFOs") bewerkstelligt, die jeder Anwendung als normale Dateien erscheinen. Der Hauptunterschied zwischen der Verwendung von FIFOs und normalen Dateien für die Interprozesskommunikation (IPC) besteht darin, dass eine Anwendung, die versucht, in einen FIFO zu schreiben, angehalten wird, bis eine andere Anwendung versucht, aus dem FIFO zu lesen, und umgekehrt. Dies verbessert die Zuverlässigkeit des IPC. Die Hauptvorteile dieser Methode sind: 1) Da nur generische Dateioperationen verwendet werden, kann die externe Anwendung in nahezu jeder Programmiersprache geschrieben werden; 2) Es gibt dem Verifikationsingenieur die Möglichkeit, Softwarepakete zur Standardvalidierung mit minimalem Umschreiben wiederzuverwenden; 3) Indem mehrere zu testende Geräte (DUT) miteinander kommunizieren, kann eine genauere Simulation des endgültigen Systems erstellt werden; und 4) die Leistung der Gesamtsimulation kann leicht auf einem Single-System Image (SSI)-Cluster oder Multiprozessor-Computer erhöht werden, obwohl die Simulations-Engine von ModelSim nicht multi-threaded ist. Aufgrund der Implementierung von File Input/Output (I/O) für Behavioral VHDL kann ModelSim diese FIFOs nicht direkt lesen oder schreiben. Eine Problemumgehung für diese Einschränkung wird mithilfe des Foreign Language Interface (FLI) von ModelSim demonstriert. Dieses Dokument zeigt auch ein Arbeitsbeispiel dieser Methode, die bei der Überprüfung der nächsten Generation von Gleitkommaroutinen in VHDL verwendet wird. Insbesondere das Open-Source-Softwarepaket IEEE Compliance Checker, das in C++ geschrieben ist,

Und das Problem mit FIFOs, die eine fremde Programmierschnittstelle erfordern, besteht darin, dass VHDL-Datei-I/O nicht ordnungsgemäß mit Blockierungen umgehen kann, bis Daten verfügbar sind.

Leider ist die Dissertation nicht im Internet verfügbar.

Model Sim® Fremdsprachenschnittstelle Version 5.6d , PDF 3,4 MB.

Using ModelSim Foreign Language Interface for c – VHDL Co-Simulation and for Simulator Control on Linux x86 Platform Andre Pool – fli@andrepool.com – Version 1.5 – erstellt im November 2012, letzte Aktualisierung im September 2013 , PDF, 320 KB (und erwähnt niemals FIFOs) .

Using ModelSim Foreign Language Interface for c – VHDL Co-Simulation and for Simulator Control on Linux x86 Platform (The matching github code repository).

Es gibt ein bisschen mehr Open Source, indem die VHPI Foreign-Funktionsaufrufe in ghdl verwendet werden: vhdl/src/sim/ghdlex_mein at master · texane/vhdl · GitHub .

Und was wie ein Update von Martin Strubel auf der GHDL_discuss-Liste aussieht: http://www.section5.ch/downloads/ghdlex-0.051.tgz zeigt ein Datum für fifo.c vom 14. April 2014.

FLI würde Sie per Definition an Modelsim binden, ohne sich über den Status ihrer VHPI-Unterstützung (die Teil von IEEE Std 1076-2008, dem VHDL LRM, ist) sicher zu sein.

Die Verwendung eines Socket- oder Datei-FIFO ermöglicht es dem Software- und Hardwareprozess, mit unterschiedlichen Raten zu laufen, indem eine Ratenpufferung bereitgestellt wird. Es ist nicht immer notwendig, wenn Ihr Softwaresystem um Größenordnungen schneller ist als die Hardwaresimulation (und das ist es im Allgemeinen).

Es gibt Bemühungen, VHDL UNIX (POSIX)-Funktionalität bereitzustellen, siehe Public Domain VHDL-Pakete , die einen Verweis auf ein früheres Dokument SNUG San Jose 2002 1 C/UNIX Functions for VHDL Testbenches C/UNIX Functions for VHDL Testbenches zusammen mit einer Folie enthält set mit zusätzlichen Hinweisen zu Unix-Pipes & rsh . Dies zeigt, wie Named Pipes geöffnet bleiben. Der gesamte VHDL-Code kann ebenfalls heruntergeladen werden. Ich bin der Meinung, dass dies zu Ihrem Ziel am einfachsten führt.

Gibt es also etwas, das in Modelsim gebürtig ist, mit dem Sie sich an eine Pfeife anschließen können? Wahrscheinlich nicht, umso mehr unter Windows. Kann es getan werden? Ja, aber der Weg ist nichts für schwache Nerven. Sie können das eine oder das andere Ende oder möglicherweise beide festklemmen, während Sie auf die Verfügbarkeit von Daten warten.

Eine fremde Programmierschnittstelle ermöglicht es Ihnen theoretisch, einen untergeordneten Prozess für das eine oder andere Ende der „Pipe“ zu erzeugen, was auch bedeutet, dass Sie ein Shared-Memory-Modell verwenden könnten, um zwischen den beiden Enden zu kommunizieren.

Vielen Dank für die wunderbar recherchierte Antwort! „Foreign Language Interface“ war genau der Ausdruck, den ich brauchte, um die Referenzdokumentation zu finden, die ich brauche, ich hätte es nur nie erraten! Frühe Integration ich komme!

Vielleicht möchten Sie sich Cocotb ansehen . Es handelt sich um eine Python-basierte Co-Simulationsbibliothek. Eines der Designziele bestand darin, die von Ihnen beschriebene Methodik zu ermöglichen und unmodifizierte Produktionssoftware und RTL einfach zu simulieren.

Es gibt ein Beispiel im Repository zum Ausführen eines unveränderten pingBefehls für eine Simulation und ein Tutorial , das durch den Code führt.

Für User-Space-Treiber, Konfigurationsprogramme usw. haben Sie mehrere Möglichkeiten, Ihre Software unverändert auszuführen :

  1. Wenn sich Ihre Zugriffe auf das Gerät auf wenige Funktionen beschränken (z. B. ein Lese- und ein Schreibaufruf), können Sie eine Verknüpfung mit einer Simulationsbibliothek herstellen, die blockiert, während der Zugriff auf die Simulation ausgeführt wird. Dies funktioniert sehr gut für die Konfiguration.

  2. Wenn Ihre Software Memory Mapped IO und Dereferenzierungszeiger verwendet, um auf das Gerät zuzugreifen, werden die Dinge etwas komplexer – Sie müssen einen gemeinsam genutzten Speicherbereich mit gesetzten Schutzbits und Trap-Zugriffen erstellen .

Wenn Sie Netzwerke verwenden, können virtuelle Schnittstellen wie TUN/TAP verwendet werden (siehe das oben erwähnte Tutorial ). Ich vermute, dass es ähnliche Optionen für die USB-Übertragung oder andere gängige Hostschnittstellen gibt.

Cocotb arbeitet mit einer Vielzahl von Simulatoren und VHDL- (über VHPI) oder Verilog/SystemVerilog-Designs (über VPI). Leider implementiert Modelsim VHPI nicht, sodass Sie als VHDL-Benutzer auf FLI angewiesen sind, das als Schnittstelle nicht annähernd so nützlich ist. Sie könnten bei Mentor jammern und versuchen, sie davon zu überzeugen, eine Schnittstelle nach Industriestandard zu implementieren, oder Sie könnten einen anderen Simulator testen, der VHPI unterstützt.

Leider scheint es, dass Tool-Anbieter im Allgemeinen nicht besonders am VHDL-Markt interessiert sind, gemessen an der Zeit, die sie benötigen, um VHDL-bezogene Funktionen zu implementieren ...

Haftungsausschluss: Ich bin ein Cocotb-Entwickler.