Externe Steuerung einer ModelSim-Simulation über Unix Named Pipes
Abstract: In dieser Arbeit stellen wir eine Methode zur Steuerung einer ModelSim-Simulation über ein externes Programm vor. Die Kommunikation zwischen ModelSim und dem externen Programm erfolgt über Named Pipes ("FIFOs"), die für jede Anwendung als normale Dateien angezeigt werden. Der Hauptunterschied zwischen der Verwendung von FIFOs und normalen Dateien für die Interprozesskommunikation (IPC) besteht darin, dass eine Anwendung, die versucht, in ein 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 Verifizierungsingenieur die Möglichkeit, Softwarepakete zur Standardvalidierung mit minimalem Umschreiben wiederzuverwenden. 3) Durch die Kommunikation mehrerer Prüflinge (DUT) miteinander kann eine genauere Simulation des endgültigen Systems erstellt werden. und 4) Die Leistung der Gesamtsimulation kann auf einem SSI-Cluster (Single-System Image) oder einem Multiprozessor-Computer problemlos gesteigert werden, obwohl die Simulations-Engine von ModelSim nicht über mehrere Threads verfügt. Aufgrund der Implementierung der Dateieingabe / -ausgabe (I / O) für Verhaltens-VHDL kann ModelSim diese FIFOs nicht direkt lesen oder schreiben. Eine Problemumgehung für diese Einschränkung wird mithilfe der Fremdsprachenschnittstelle (FLI) von ModelSim demonstriert. Dieses Dokument zeigt auch ein Arbeitsbeispiel für diese Methode, die bei der Überprüfung der nächsten Generation von Gleitkomma-Routinen in VHDL verwendet wird. Insbesondere das Open-Source-Softwarepaket IEEE Compliance Checker, das in C ++ geschrieben ist,
Das Problem bei FIFOs, die eine fremde Programmierschnittstelle erfordern, besteht darin, dass VHDL-Datei-E / A das Blockieren erst dann ordnungsgemäß verarbeiten können, wenn Daten verfügbar sind.
Leider ist die Arbeit nicht im Internet verfügbar.
Model Sim ® Fremdsprachenschnittstelle Version 5.6d , PDF 3,4 MB.
Verwenden der ModelSim-Fremdsprachenschnittstelle für die c - VHDL-Co-Simulation und für die Simulatorsteuerung auf der Linux x86-Plattform Andre Pool - [email protected] - Version 1.5 - erstellt im November 2012, letzte Aktualisierung September 2013 , PDF, 320 KB (und erwähnt niemals FIFOs) .
Verwenden der ModelSim-Fremdsprachenschnittstelle für die c - VHDL-Co-Simulation und für die Simulatorsteuerung auf der Linux x86-Plattform (das passende Github-Code-Repository).
Es gibt etwas mehr Open Source mit den VHPI Foreign-Funktionsaufrufen in ghdl:
vhdl / src / sim / ghdlex_mein bei master · texane / vhdl · GitHub .
Und wie sieht ein Update von Martin Strubel auf der GHDL_discuss-Liste aus:
http://www.section5.ch/downloads/ghdlex-0.051.tgz mit einem Datum für fifo.c vom 14. April 2014.
FLI würde Sie per Definition an Modelsim binden, ohne sicher zu sein, welchen Status die VHPI-Unterstützung hat (die Teil von IEEE Std 1076-2008, dem VHDL LRM, ist).
Durch die Verwendung eines Socket- oder Datei-FIFO kann der Software- und Hardwareprozess mit unterschiedlichen Raten ausgeführt werden, indem eine Ratenpufferung bereitgestellt wird. Es ist nicht immer notwendig, wenn Ihr Softwaresystem um Größenordnungen schneller ist als die Hardware-Simulation (und das ist es im Allgemeinen).
Es wird versucht, VHDL UNIX (POSIX) -Funktionalität bereitzustellen. Siehe Public Domain VHDL-Pakete , die einen Zeiger auf ein früheres Dokument enthalten. SNUG San Jose 2002 1 C / UNIX-Funktionen für VHDL-Testbenches C / UNIX-Funktionen für VHDL-Testbenches zusammen mit einer Folie Set mit zusätzlichen Hinweisen zu Unix Pipes & rsh . Dies zeigt, wie benannte Pipes geöffnet bleiben. Der gesamte VHDL-Code kann ebenfalls heruntergeladen werden. Ich bin der Meinung, dass dies zum einfachsten Weg führen würde, Ihr Ziel zu erreichen.
Gibt es also etwas in Modelsim, mit dem Sie sich an eine Pipe anschließen können? Wahrscheinlich nicht, umso mehr unter Windows. Kann es gemacht werden? Ja, aber der Weg ist nichts für schwache Nerven. Sie können das eine oder andere Ende blockieren oder möglicherweise beide auf die Verfügbarkeit der 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önnen, um zwischen den beiden Enden zu kommunizieren.
Vielleicht möchten Sie sich Cocotb ansehen . Es handelt sich um eine Python-basierte Co-Simulationsbibliothek. Eines der Entwurfsziele bestand darin, die von Ihnen beschriebene Methodik zu aktivieren und auf einfache Weise unveränderte Produktionssoftware und RTL zu simulieren.
Im Repository gibt es ein Beispiel für das Ausführen eines unveränderten
ping
Befehls für eine Simulation und ein Tutorial, das durch den Code geht.Für User-Space-Treiber, Konfigurationsdienstprogramme usw. haben Sie mehrere Optionen, um Ihre Software unverändert auszuführen :
Wenn sich Ihre Zugriffe auf das Gerät auf einige wenige Funktionen beschränken (z. B. einen Lese- und einen 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.
Wenn Ihre Software speicherabgebildete E / A- 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 ein Netzwerk 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 Host-Schnittstellen gibt.
Cocotb arbeitet mit einer Vielzahl von Simulatoren und VHDL- (über VHPI) oder Verilog / SystemVerilog-Designs (über VPI). Leider implementiert Modelsim kein VHPI, so dass Sie als VHDL-Benutzer mit FLI nicht weiterkommen, was als Schnittstelle bei weitem nicht so nützlich ist. Sie könnten Mentor anstöhnen, um sie davon zu überzeugen, eine branchenübliche Schnittstelle zu implementieren, oder Sie könnten einen anderen Simulator evaluieren, 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 für die Implementierung von VHDL-bezogenen Funktionen benötigen ...
Haftungsausschluss: Ich bin ein Cocotb-Entwickler.
quelle