So teilen Sie Register- und Bitfelddefinitionen zwischen einem Gerätetreiber und dem von IT steuereten FPGA

StackOverflow https://stackoverflow.com/questions/1585751

Frage

Gibt es gute, vorhandene Softwaretools zur Verfügung, mit denen C -Header -Dateien mit geeigneten #Definen für Register -Offsets sowie Bit -Definitionen von VHDL geeignet sind? Wenn solche Tools vorhanden sind, welche Einschränkungen für sie auf dem VHDL platzieren und wie die Dinge exportiert werden sollten?

Bisher habe ich diese Tools gefunden, aber sie sind nicht genau das, wonach ich suche:

Basierend auf diesen Tools interessiere ich mich auch, wenn der richtige Workflow darin besteht

War es hilfreich?

Lösung

Ich denke, dass das endgültige, dass Sie Sie nerven, Sie in die richtige Richtung schicken. Und ich würde RedGlyphe darin zustimmen, dass Sie in Betracht ziehen sollten, Ihren Arbeitsfluss ein wenig zu ändern.

Haben Sie darüber nachgedacht, ein "Master -Dokument" für Ihre Steuerregisterinformationen zu haben, und alles automatisch generiert - RTL, TestBench -Code, Treibersoftware -Header und Dokumentation?

Ich habe an Projekten gearbeitet, bei denen die Kontrollinformationen in einer Master -Tabelle aufbewahrt wurden und alles, was wir dadurch benötigten. In einer Familie von Chips hatte ich ein paar Python -Skripte geschrieben, um dieses Zeug aus CSV -Dateien zu generieren, die aus der Tabelle exportiert wurden. Bei einem anderen Projekt enthielt die Tabelle Makros, um die von uns benötigten RTL -Dateien usw. zu generieren.

Das Schreiben interner Skripte ist gut und gut, da Sie die totale Kontrolle über sie haben und wissen, wie sie im Detail funktionieren. Aber denken Sie daran, dass Sie Zeit damit verbringen müssen, diese Skripte zu unterstützen und sie zu aktualisieren, um neue Dinge zu tun. Und überlegen Sie, was passieren würde, wenn derjenige, der diese Skripte geschrieben hat, beschlossen, einen neuen Job zu bekommen - wäre jemand anderes mit den Skripten vertraut genug, um sie zu ändern? Wir erwägen, aus den oben genannten Gründen ein Tool von Drittanbietern zu kaufen.

Ich habe auch an Projekten gearbeitet, die Dokumentation waren und die Header -Dateien aus dem RTL -IT ein Albtraum zurückgestellt wurden. Die Dokumentation blieb normalerweise hinter dem Design zurück, und häufig kontrollierende Felder würden „vermisst“. Ich wäre lieber nicht mehr in ein solches Projekt involviert;)

Andere Tipps

Sie könnten sich ansehen Doxygen, Es unterstützt die VHDL -Sprache und durch Verwendung von Zwischendateien können Sie die Informationen möglicherweise mehr oder weniger einfach extrahieren. Ein Nebenprodukt wäre Ihre RTL-Code-Dokumentation.

Eine andere Möglichkeit besteht darin, einen C -Parser aus den Yacc/Lex -Definitionen zu erstellen. Sie können mehrere finden hier. Von dort aus können Sie die VHDL analysieren, die Informationen extrahieren (Sie müssen bestimmen, wie Sie die Definition Ihrer Register abrufen) und eine C -Header -Datei erstellen müssen. Es ist wahrscheinlich ziemlich kompliziert.

Aber wenn ich Sie wäre, würde ich wirklich anders vorgehen und die Register -Offsets und Felder in einer separaten Datei (z. viel Zeit und wäre aus Sicht der Strömung robuster.

Das würde auch beim Aufbau einer Dokumentation helfen.

Sie können den Prozess natürlich mit einem Makefile/oder in einem Skript automatisieren, das die Datenbank vor der Simulation/Synthese vorbereitet.

Ich stimme Marty zu, es macht Spaß, interne Skripte zu erstellen, um so etwas zu tun, kann aber auf lange Sicht problematisch sein.

Wir haben ein Tool namens idesignSpec erstellt, das als Plugin für Dokumenteneditoren implementiert ist, mit der Sie Register in einem Dokument angeben und C-Header, VHDL, Verilog, OVM, VMM, IP-XACT, HTML, XML, SystemRDL, PDF usw. generieren können . davon.

Mit der TCL -API können Sie benutzerdefinierte Ausgänge generieren. Es kann auch in verschiedenen Eingangsformaten wie XML, IP-XACT, SystemRDL usw. gelesen werden.

Der Vorteil dieses Ansatzes besteht darin, dass Sie eine Spezifikation haben und alles automatisch synchronisiert bleibt.

Derzeit unterstützte Redakteure sind: MS Word 2003 & 2007, OpenOffice, Staroffice und Framemaker.

Sie können weitere Details erhalten http://www.agnisys.com

Hier ist die vollständige Liste der verfügbaren Lösungen:

Firmenname: kommerzielle Tools (Lösung bereitgestellt)

  1. Agnisys: idesignSpec (Plugin für Word/Excel/OpenOffice und Befehlszeilenschnittstelle unter Linux und Windows)
  2. Atrenta: 1Team-Genesis-Register (Desktop-Anwendung)-> Von Synopsys erfasst. Werkzeug nicht verfügbar.
  3. Duolog: Bitweise (Eclipse -basierte Anwendung) -> Von ARM erfasst, ist das Tool noch verfügbar.
  4. PDTI: Spektareg (webbasierte Anwendung) -> Tool nicht mehr verfügbar.
  5. Semifore: CSRCompiler (Befehlszeilenschnittstelle)

Kostenlose/OpenSource -Tools

  1. Veripool: VREGS
  2. ParadigmWorks: Spec2reg

Unsere Designgruppe verwendet SystemRDL, um die Registerdefinitionen für unseren programmierbaren System-on-Chip zu erfassen. Wir verwenden Denali Blueprint mit individuellen Skripten für die verschiedenen Ziele - Generieren Sie die Registerkarte, die PDF -Dokumentation, die Überprüfung, die C -Header -Dateien usw.

Wir verwenden es noch nicht, um die RTL -Quelle zu generieren.

http://www.spiritconsortium.org/releases/systemrdl
http://www.google.com/search?q=systemrdl

Die Antwort könnte etwas spät kommen, aber wir verwenden die kostenlose NETPP -Bibliothek und einige geänderte XSL -Stilblätter, um Dokumentation, VHDL und C -Quelle von einer XML -Quelle zu generieren. Es gibt auch eine VHDL -Simulator -Erweiterung, mit der VHDL- und C -Bibliotheken Daten austauschen können, um eine netzwertige "virtuelle FPGA" zu erstellen. Es heißt GHDLEX, ich erinnere mich nicht genau, wo es ist, aber Sie werden es irgendwo auf der finden http://section5.ch Website unter dem NetPP -Downloadbereich. Es ist ein bisschen schwierig zu verwenden, aber es ist kostenlos.

Die eigentliche Quelle der gemeinsam genutzten Informationen ist Ihr ursprüngliches Design. Daher würde ich das ursprüngliche Design in einem Formular eingeben, das leicht zu verarbeiten ist. Hier sind ein paar Ideen ...


  1. Verwenden Sie Yaml. (Oder seufz, xml oder sogar eine sehr einfache DSL Ihres Designs.) Definieren Sie die Originaldaten. Schreiben Sie Skripte, um es als VHDL und C zu entsorgen. Alle Skriptsprachen unterstützen YAML und es ist so konzipiert, dass sie auch mit Shell -Tools analysiert werden. Sie können sogar vereinfachte VHDL oder C verwenden und ein Skript schreiben, um dies über eine einfache Textumwandlung in das entsprechende C oder VHDL zu verwandeln.

  2. Tun Sie alles im C -Präprozessor. Sie könnten einen Satz Makro schreiben Anrufe Dadurch werden Registerlayouts angegeben. Sie könnten dann eine haben #if oder vielleicht zwei getrennt .h Dateien, die zwei verschiedene Versionen Ihrer Definitionsmakros definieren, die sich in VHDL erweitern und eine, die die gleichen Definitionen in C erweitert.

Spektareg Ermöglicht Ihnen die Register an einem Ort an und erstellen Sie mehrere Ausgänge für verschiedene Umgebungen (z. B. VHDL, C, Verilog).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top