Forum: FPGA, VHDL & Co. VHDL Preprocessor


von DerVhdlPreprocessorEntwickler (Gast)


Lesenswert?

Ich bastle gerade im Rahmen eines größeren Projekts an einer Art 
Präprozessor für VHDL auf Basis von Lua, Bison und Flex.

Die Problemstellung war es, stark konfigurierbare VHDL Modelle schreiben 
zu können. Dazu müssen Konfigurationseinstellungen auf einer recht hohen 
Ebene getroffen werden und diese dann irgendwie in das VHDL File 
einfliessen. Dazu sind manchmal relativ aufwändige Rechnungen nötig, die 
in VHDL selbst nicht (einfach) durchzuführen sind.

Die hier vorgeschlagene Lösung ist es, die Berechnungen in einem Lua 
Skript durchzuführen. Die Konfigurationsdaten dazu werden dann aus einem 
weiteren File, evtl. XML gezogen. Das Lua Skript berechnet alles was zu 
berechnen ist und baut mit den Ergebnissen eine Lookup Tabelle für den 
eigentlichen Parser auf. Der Parser geht dann das annotierte VHDL File 
durch und benutzt seine Tabelle für entsprechende Ersetzungen. Es sollen 
aber auch einfache Rechnungen möglich sein, sowie for loops und if-else 
Statements.

Da das ganze so nebenbei entsteht bin ich noch nicht sonderlich weit 
gekommen, ich kann mit einem Lua Skript bereits die Tabelle füttern und 
damit den Parser benutzen, letzterer dürfte aber noch ein paar Probleme 
haben, besonders if-else ist noch nicht drinn. XML o.Ä. habe ich noch 
nicht angefangen. Ich bin Etechniker und kein Informatiker, deswegen tue 
ich mich schwer, auch C++ ist nicht so wirklich meine Stärke, VHDL sagt 
mir eigentlich mehr zu.

Obwohl das ganze Lizenztechnisch eigentlich unkritisch ist (Lua ist MIT, 
Bison und Flex erzeugen Code der frei benutzt werden darf, ohne GPL) bin 
ich am Überlegen ob ich das ganze als Open Source Projekt weiterführen 
soll. Daher ist meine Frage an euch: Hat jemand Interesse an einer 
solchen Software? Würde jemand evtl. mitprogrammieren?

von Michael E. (cuby)


Lesenswert?

Hallo,

interessante Aufgabenstellung - kannst du evtl. ein paar mehr Details zu 
den konkreten Problemen verraten, die du lösen möchtest?

Wir haben uns vor einiger Zeit Gedanken zur Konfigurierbarkeit von 
VHDL-Code gemacht, es fehlte aber immer etwas an ausreichend komplexen 
Problemstellungen, um den Aufwand zu rechtfertigen. Dabei haben wir 
versucht, Techniken aus dem Bereich der Softwaretechnik (konkret 
Aspektorientierung) auf Hardwarebeschreibungssprachen anzuwenden.

Ein paar Links dazu:

Ein frühes Konzeptpaper:
http://www.aosd.net/workshops/acp4is/2008/papers/Engel.pdf

und eine spätere Abschlußarbeit:
http://ess.cs.uni-dortmund.de/Teaching/Theses/2013/BA_Stelzner_2013.pdf

Auf sourceforge gibt es ein VHDL preprocessor-Projekt (vpp), evtl. kann 
dir das einiges an Arbeit ersparen?
http://sourceforge.net/projects/vhdlpp/

-- Michael

: Bearbeitet durch User
von Fpgakuechle K. (Gast)


Lesenswert?

Michael Engel schrieb:

> Dabei haben wir
> versucht, Techniken aus dem Bereich der Softwaretechnik (konkret
> Aspektorientierung) auf Hardwarebeschreibungssprachen anzuwenden.

e ist ine in der Schaltkreisentwicklung eingesetzte Sprache, die 
aspektorientiert ist. Somit als Vorbild geeignet?
http://en.wikipedia.org/wiki/E_%28verification_language%29

MfG,

von Michael E. (cuby)


Lesenswert?

Fpga Kuechle schrieb:
> Michael Engel schrieb:
>
>> Dabei haben wir
>> versucht, Techniken aus dem Bereich der Softwaretechnik (konkret
>> Aspektorientierung) auf Hardwarebeschreibungssprachen anzuwenden.
>
> e ist ine in der Schaltkreisentwicklung eingesetzte Sprache, die
> aspektorientiert ist. Somit als Vorbild geeignet?
> http://en.wikipedia.org/wiki/E_%28verification_language%29

Ja, e hatten wir uns damals auch angeschaut, da waren ein paar 
interessante Details bei - danke für den Tip, das hatte ich nach einigen 
Jahren ausgeblendet... werde mal nachlesen, was sich in dem Bereich in 
den letzten Jahren so getan hat.

von DerVhdlPreprocessorEntwickler (Gast)


Lesenswert?

Michael Engel schrieb:
> interessante Aufgabenstellung - kannst du evtl. ein paar mehr Details zu
> den konkreten Problemen verraten, die du lösen möchtest?

Es geht darum eine Sammlung von IP Cores zu einem ganzen Themengebiet zu 
erstellen, eine Art Rapid Prototyping Lösung. Allerdings soll der Output 
dann trotzdem verwendbar sein, also natürlich synthetisierbar und auch 
soweit es geht einigermaßen optimiert. Das ist im Grunde eigentlich kein 
Problem, erfordert aber, wie gesagt, einige Vorberechnungen.
Der Nutzer soll also seine Designvorgaben eintippen und dann fällt das 
entsprechende VHDL hinten raus.

Michael Engel schrieb:
> Auf sourceforge gibt es ein VHDL preprocessor-Projekt (vpp), evtl. kann
> dir das einiges an Arbeit ersparen?
> http://sourceforge.net/projects/vhdlpp/

Den habe ich schon gesehen, der Implementiert aber wohl seinen eigenen 
Parser, so dass es Erweiterungen eher schwer macht. Mit Bison wird das 
wohl besser.

von Strubi (Gast)


Lesenswert?

Moin,

schau dir doch mal MyHDL an. Das macht eigentlich alles, was Du oben auf 
der Wunschliste hast, ausser, ich habe was übersehen.
Von VHDL als Quellformat würde ich wegen des überaus mühsamen Parsens 
(ja, hab's mir auch schon angetan) absehen.
Momentan lasse ich mir für die komplexeren SoCs mit konfigurierbarer 
Peripherie einfach die VHDL-Files aus MyHDL bzw. 
XML-Gerätebeschreibungen ausspucken, die generieren gleichzeitig auch 
die Header-Files. Im Prinzip derselbe Arbeitsfluss wie bei Qsys und wie 
die SoC-Builder alle heissen, nur ohne lästige GUI-Klicks :-) (einmal 
"make" tippen...)
Ansonsten ist dein Ansatz nichtsdestotrotz interessant, das Problem nur 
recht alt, und insgesamt eine rechte Knacknuss :-)

von Micha (Gast)


Lesenswert?

Ich mache das für (m)eine Forschungsplattform händisch:

Basierend auf einer Plattformkonfiguration aus XML wird mit einem C++ 
Tool von mir dann VHDL/Verilog/SystemC teilweise erzeugt und auch 
teilweise nur instanziiert.

Das erzeugt mir dann für eine recht komplizierte Architektur sowohl 
Simulation in SystemC als auch synthesefähigen Code....

Bestimmt nicht der Weisheit letzter Schluss, tut aber soweit und ist 
Makefile gesteuert ;)

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

Das Thema ist interessant.

Ich habe ähnliche Probleme ein SOC zusammenzustellen.

Alle IP-Cores haben einen standardisierten Bus zur Kommunikation mit 
einer CPU. So bekomme ich die Peripherie einfach zusammen.
Jetzt bringt jede Peripherie aufgrund ihrer Funktion eigene 
Signalleitungen neu ins Spiel, die bis zum Top Entry durchgeroutet 
werden müssen. Das einfachste Beispiel ist die UART mit den Signalen RX 
und TX.

Für machen habe ich zum Setzen Generic benutzt wie z.B. die I2C 
Taktgeschwindigkeit. Die Generic ziehe ich nicht bis zu Top hoch.
Somit sind wichtige Einstellungen in Unterdateien.
Damit ist die Übersichtlichkeit wieder hin.

Wenn da ein einfachen handhabaren Workflow gäbe, wäre es toll.

von Martin S. (strubi)


Lesenswert?

Hi Rene,

ev. könnte dir IP-XACT was bringen. Siehe auch 
http://www.edautils.com/ip-xact.html. Allerdings widerspricht IP-XACT 
etwas dem KISS (keep it simple and stupid)-Prinzip, die Sache 
amortisiert sich für den Einzelkämpfer kaum. Im Rahmen grösserer 
Projekte und voller SoC-Flexibilität a la Xtensa schon eher. Aber du 
musst typischerweise in die XSLT-Methodik einsteigen, um eine 
vollautomatische Soc-'make menuconfig' mit XACT-Quellen abzudecken. Die 
Sache ist leider bei den Stylesheets noch nicht so recht zu ende 
gedacht, aber es gibt immerhin ein paar nette *Autorentools".
Ansonsten sind in ghdlex 0.051 ein paar Beispiele (netpp/devdesc) 
versteckt.

Gruss,

- Strubi

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

Ich hatte mir schon mal XSLT angeschaut. Wenn es läuft sicher eine 
hifreiceh Variante.  Das wäre eine neue Baustelle für mich.

von Alexander F. (alexf91)


Lesenswert?

Ich habe vor einiger Zeit mal damit experimentiert, C++ Code aus XML 
Beschreibungen zu generieren.
Verwendet habe ich dafür Python und Mako.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.