So teilen Sie Register- und Bitfelddefinitionen zwischen einem Gerätetreiber und dem von ihm gesteuerten FPGA

8

Gibt es irgendwelche guten, vorhandenen Softwaretools, die beim Erzeugen von C-Header-Dateien mit geeigneten #Definitionen für Register-Offsets sowie Bit-Definitionen von VHDL helfen? Wenn solche Tools vorhanden sind, welche Beschränkungen sie für die VHDL haben und wie sollen Dinge, die exportiert werden sollen, benannt werden?

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

Basierend auf diesen Werkzeugen bin ich auch daran interessiert, ob der richtige Arbeitsablauf sowohl das C als auch das VHDL erzeugt, anstatt direkt von VHDL (vielleicht mit zusätzlichen Tags in den Kommentaren) zu C zu gehen.

    
Tim Kryger 18.10.2009, 19:10
quelle

7 Antworten

2

Ich denke, dass das Finale, das dich nervte, dich in die richtige Richtung schickt. Und ich stimme RedGlyph darin zu, dass Sie überlegen sollten, Ihren Arbeitsfluss ein wenig zu ändern.

Haben Sie darüber nachgedacht, ein "Master-Dokument" für Ihre Kontrollregisterinformationen zu haben und daraus automatisch alles generiert - RTL, Testbench-Code, Treiber-Software-Header und Dokumentation?

Ich habe an Projekten gearbeitet, bei denen die Kontrollinformationen in einer Master-Tabelle gespeichert wurden und alles, was wir benötigten, daraus generiert wurde. Bei 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 RTL-Dateien usw. zu generieren, die wir brauchten.

Inhouse-Skripte zu schreiben ist alles in Ordnung und gut, da Sie die totale Kontrolle über sie haben und wissen, wie sie im Detail arbeiten. 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 hätte, sich entschieden hätte, einen neuen Job zu bekommen - wäre jemand anders mit den Skripten vertraut, um sie zu ändern? Wir erwägen den Kauf eines Drittanbieter-Tools aus den oben genannten Gründen.

Ich habe auch an Projekten gearbeitet, bei denen die Dokumentation und die Header-Dateien von der RTL zurück portiert wurden - das war ein Albtraum. Die Dokumentation blieb in der Regel hinter dem Design zurück, und häufig würden Kontrollfelder "verloren gehen". Ich wäre lieber nicht wieder in ein solches Projekt involviert;)

    
Marty 19.10.2009, 21:55
quelle
5

Sie können sich Doxygen ansehen, es unterstützt die VHDL-Sprache und unter Verwendung von Zwischendateien, die Sie möglicherweise sind in der Lage, die Informationen mehr oder weniger leicht zu extrahieren. Ein Nebenprodukt wäre Ihre RTL-Code-Dokumentation.

Eine andere Möglichkeit ist es, einen C-Parser aus den Yacc / Lex-Definitionen zu erstellen, Sie können mehrere finden hier . Von dort aus können Sie das VHDL analysieren, die Informationen extrahieren (Sie müssen bestimmen, wie die Definition Ihrer Register abgerufen wird) und eine C-Headerdatei erstellen. 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 (zum Beispiel in XML) definieren und ein kleines Skript schreiben, um sowohl C-Header als auch ein VHDL-Paket zu generieren Sparen Sie viel Zeit und wären aus Sicht des Flow robuster.

Das würde auch beim Erstellen von Dokumentationen helfen.

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

    
RedGlyph 18.10.2009 20:07
quelle
3

Ich stimme Marty zu, die Erstellung eigener Skripte macht Spaß, kann aber auf lange Sicht problematisch sein.

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

Sie können benutzerdefinierte Ausgaben mit der TCL-API generieren. Es kann in verschiedenen Eingabeformaten wie XML, IP-XACT, SystemRDL usw. lesen.

Der Vorteil dieses Ansatzes ist, dass Sie eine Spezifikation haben und alles automatisch synchron bleibt.

Derzeit unterstützte Editoren sind: MS Word 2003 & amp; 2007, OpenOffice, StarOffice und FrameMaker.

Weitere Informationen erhalten Sie unter Ссылка

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

Firmenname: Kommerzielle Werkzeuge (Lösung wird mitgeliefert)

  1. Agnisys: IDesignSpec (Plugin für Word / Excel / OpenOffice und Kommandozeilenschnittstelle unter Linux und Windows)
  2. Atrenta: 1Team-Genesis-Register (Desktop-Anwendung) - & gt; Erworben von Synopsys. Werkzeug nicht verfügbar.
  3. Duolog: BitWise (Eclipse-basierte Anwendung) - & gt; Erworben von ARM, Werkzeug ist noch verfügbar.
  4. PDTi: SpetaReg (webbasierte Anwendung) - & gt; Werkzeug nicht mehr verfügbar.
  5. Semifore: CSRCompiler (Befehlszeilenschnittstelle)

Freie / OpenSource-Werkzeuge

  1. Veripool: VRegs
  2. ParadigmWorks: Spec2Reg
Anupam Bakshi 14.07.2010 11:14
quelle
2

Unsere Designgruppe verwendet SystemRDL, um die Registerdefinitionen für unser programmierbares System-on-Chip zu erfassen. Wir verwenden Denali Blueprint mit angepassten Skripten für die verschiedenen Ziele - generieren Sie die Registerkarte, PDF-Dokumentation, Verifizierung, C-Header-Dateien, etc.

Wir benutzen es noch nicht, um die RTL-Quelle zu erzeugen.

Zypern
Ссылка

    
Nathan 16.12.2009 09:44
quelle
1

Die Antwort könnte etwas spät kommen, aber wir verwenden die freie netpp-Bibliothek und einige modifizierte XSL-Stylesheets, um Dokumentationen, VHDL- und C-Quellen aus einer XML-Quelle zu erzeugen. Es gibt auch eine VHDL-Simulator-Erweiterung, mit der VHDL- und C-Bibliotheken Daten austauschen können, um ein netzwerkfähiges "virtuelles FPGA" zu erstellen. Es heißt ghdlex, ich kann mich nicht genau erinnern, wo es ist, aber Sie finden es irgendwo auf der Ссылка Website unter dem Netpp-Download-Bereich. Es ist ein bisschen schwierig zu benutzen, aber gut, es ist kostenlos ..

    
guignol 03.02.2013 15:03
quelle
0

Die wahre Quelle der geteilten Informationen ist Ihr ursprüngliches Design, also würde ich das ursprüngliche Design in einer Form eingeben, die leicht zu verarbeiten ist. Hier sind ein paar Ideen ...

  1. Verwenden Sie YAML. (Oder seufzen Sie, XML oder sogar ein sehr einfaches DSL Ihres Designs.) Definieren Sie die Originaldaten. Schreiben Sie Skripts, um sie als VHDL und C zu speichern. Alle Skriptsprachen unterstützen YAML und wurden auch mit Shell-Tools analysiert. Sie könnten sogar vereinfachtes VHDL oder C verwenden und ein Skript schreiben, um das über eine einfache Textumwandlung in das entsprechende C oder VHDL umzuwandeln.

  2. Mach alles im C-Präprozessor . Sie könnten eine Reihe von Makro -Aufrufen schreiben, die Registerlayouts angeben. Sie könnten dann eine #if oder vielleicht zwei separate .h -Dateien haben, die zwei verschiedene Versionen Ihrer Definitionsmakros definieren, eines, das in VHDL expandiert und eines, das dieselben Definitionen in C erweitert.

DigitalRoss 18.10.2009 20:38
quelle
0

Spectareg ermöglicht es Ihnen, die Register an einer Stelle anzugeben und mehrere Ausgänge für verschiedene Umgebungen zu erstellen (z. B. VHDL, C, Verilog)

    
Martin Thompson 05.02.2013 14:14
quelle