VHDL Preprocessor

Gast #4033030
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?
#4033169
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
#4033196
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.
Gast #4033221
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.
Gast #4037255
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 :-)
Gast #4037390
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 ;)
(Firma: www.dossmatik.de) #4038766
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.
#4043911
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren