Forum: FPGA, VHDL & Co. Versionsnummer / Buildnummer automatisch erzeugen


von Christian A. (noeppkes)


Lesenswert?

Hallo zusammen.

Ich möchte bei jedem erstellen eines Projektes eine "Versionsnummer" 
automatisch hochzählen lassen.
Diese habe ich wie folgt angelegt:
1
constant Version : std_logic_vector (15 downto 0):="0000000000000001"; -- Lfd

Wie könnte man das lösen?
Es soll auf jeden Fall automatisch funktionieren.
Ich habe beim googlen herausgefunden, dass es eventuell mit einem 
TCL-Script funktionieren könnte?
Bin aber für alles offen.
Ein starten eines externen Programmes (welches mit die Versionsnummer 
ändert) wäre auch möglich. Habe jedoch nichts gefunden, wie man ein 
externes Programm starten könnte.

Hintergrund: Ich lesen mit dem Controller diese Nummer aus und kann 
daran erkennen welches FPGA-File geladen ist.

Vielen Dank.

noeppkes ...

von Mladen G. (mgira)


Lesenswert?

Wie baust du das denn?

Mit make bzw. Konsorten, Subversion als SCM ?

Koennte sowas mit autom. ersetzen in Dateien machen, allerdings sollte 
diese Aenderung ins SCM zurueckgeschrieben werden, da einerseits diese 
Aenderung (versionsnummer) ausgeliefert wird und man ja andererseits das 
wieder herstellen koennen moechte.

: Bearbeitet durch User
von noeppkes (Gast)


Lesenswert?

Hallo.

Danke für deine Antwort.
Verstehe nur "Bahnhof".

Ich möchte doch nur irgendwie eine automatische Versionsnummer 
generieren.

Sei es über ein Script das beim "Generate Programming File" ausgeführt 
wird oder durch starten eines externen Programms, welches mir das 
VHDL-File ändert.
Andere Vorschläge werden gerne angenommen.

noeppkes ...

von noeppkes (Gast)


Lesenswert?

Hallo nochmal.

Ausserdem habe ich "noch nichts gebaut", sondern suche nach einem 
Lösungsansatz.

Bisher konnte ich bei "Google" noch nichts finden.

noeppkes ...

von PittyJ (Gast)


Lesenswert?

Ich habe ein Programm geschrieben, was die aktuelle Uhrzeit nimmt, und 
daraus eine VHDL-Source generiert.
Dafür kann man eine Programmiersprache seiner Wahl verwenden.

Alternativ kann man eine Datei auslesen, dort einen Zähler erhöhen und 
damit eine zweite VHDL-Source erzeugen.

Die VHDL-Source wird dann ganz normal mit bei der Synthese verwendet.

Da bei mir alles über Makefiles läuft, kann man wunderbar das Programm 
noch vor der Synthese automatisch ablaufen lassen.

von Andreas H. (ahz)


Lesenswert?

Mladen G. schrieb:
> Wie baust du das denn?
>
> Mit make bzw. Konsorten, Subversion als SCM ?

noeppkes schrieb:
> Danke für deine Antwort.
> Verstehe nur "Bahnhof".

Mladen M. wollte wissen, wie Du das FPGA compilierst. Da kann man 
nämlich Deine Versionsnummergenerierung (was für ein Wort^^) dann 
einfach als Skript mitlaufen lassen.

Hilfreich wäre da dann aber zu wissen, auf welchem Betriebssystem und 
welcher FPGA Umgebung Du arbeitest. Und welche Skriptsprache Du sonst 
benutzt.

Das Vorgehen ist dann eigentlich überschaubar:
Du führst eine Datei mit, in der NUR die Versionsnummer als ZAHL(en) 
drinsteht.
Bei jedem Compile fürhrst Du ein Skript aus, das diese Datei liest, die 
Versionsnummer inkrementiert und dann wieder in diese Datei schreibt.
Zum Schluss schreibt Dein Script eine vhdl datei raus, die Dein
"constant Version : std_logic_vector ..." mit der akuellen 
Versionsnummer enthält.
Diese Datei musst Du natürlich in das Projekt einbinden und 
sicherstellen, dass sie erst NACH dem Scriptlauf compiliert wird.


Grüße
Andreas

von noeppkes (Gast)


Lesenswert?

Hallo zusammen.

Also: Ich benutze ISE Version 13.2
"Compilieren" tue ich das ganze, indem ich auf "Generate Programming 
File" doppelklicke.

Die Vorgehensweise ist mir eigentlich klar.
File ablegen mit Versionsnummer, einlesen, eines erhöhen, wieder 
speichern und daraus mein kleines VHDL-File erzeugen, welches schon 
vorab eingebunden wurde.

Bei einem Mikrocontrollerprojekt (C-File) habe ich dazu ein kleines 
VB-Programm geschrieben, das mir das C-File genauso wie ihr es 
beschrieben  habt vor dem compilieren ändert. Dort funktioniert es 
problemlos.

Ich habe allerdings nichts gefunden, wie ich ein externes Programm VOR 
dem compilieren vonder ISE aus starten könnte.
Sofern es über ein Script machbar wäre, über welches?
Habe mal TCL in Google gefunden. Das ist, so glaube ich allerdings, nur 
für die Simulation?
Falls es über TCL oder ähnliches geht, dann wäre sicherlich eine kleine 
Hilfe sehr nützlich und vor allen Dingen, wie ich dieses File / Script 
in die ISE einbinde.

Vielen Dank an alle.

noeppkes ...

von noeppkes (Gast)


Lesenswert?

PittyJ schrieb:
> Ich habe ein Programm geschrieben, was die aktuelle Uhrzeit nimmt,
> und
> daraus eine VHDL-Source generiert.
> Dafür kann man eine Programmiersprache seiner Wahl verwenden.
>
> Alternativ kann man eine Datei auslesen, dort einen Zähler erhöhen und
> damit eine zweite VHDL-Source erzeugen.
>
> Die VHDL-Source wird dann ganz normal mit bei der Synthese verwendet.
>
> Da bei mir alles über Makefiles läuft, kann man wunderbar das Programm
> noch vor der Synthese automatisch ablaufen lassen.

Hallo PittyJ.

Das Programm zu schreiben wäre kein Problem nur:
Wie startest du das Programm aus der ISE heraus, wenn ich auf "Generate 
Programming File" doppelklicke?

noeppkes ...

von Christian R. (supachris)


Lesenswert?

Ohne Versionskontrolle bringt das doch alles nichts. Wozu dann die 
aufsteigende Nummer? Ich hab bei mir die SVN Revesion(s) im Design, da 
kann man sich durch das Build-Script die Versionsnummer zusammen bauen 
lassen. Ganz ohne Scripting gehts aber meistens nicht.
Die neueren FPGAs von Xilinx haben im Bitstream so ein User-Register, 
was man mit einem TimeCode laden kann, vielleicht reicht das schon?
http://www.xilinx.com/support/documentation/application_notes/xapp497_usr_access.pdf

von Andreas H. (ahz)


Lesenswert?

noeppkes schrieb:
> Wie startest du das Programm aus der ISE heraus, wenn ich auf "Generate
> Programming File" doppelklicke?

Soweit ich weiss: Garnicht ;-)

Du kannst aber in der ISE unter "Project->Generate TCL script ..." Ein 
gut kommentiertes Runscript erzeugen lassen, wo Du Deine Funktion dann 
einfach dazuschreibst oder ein exteres Skript aufrufen kannst.

Ich weiss allerdings nicht, ob das Skript automatisch benutzt wird wenn 
es existiert (musst Du ausprobieren). Ansonsten kannst Du es aus der ISE 
TCL Console ("View->Panels->TCL console") mit run_process() durchlaufen 
lassen. Ist in dem Skript aber ausführlich beschrieben.

Grüße
Andreas

von noeppkes (Gast)


Lesenswert?

Hallo.

Danke für die Antwort.

Wie könnte so ein Script aussehen?
Wie kann ich aus der Console heraus das Script zum testen starten?

Also manuell will ich das Script nicht starten.
Dann kann ich gleich im VHDL-File die Versionsnummer "von Hand" ändern.
Das sollte schon automatisch gehen.

noeppkes ...

von noeppkes (Gast)


Lesenswert?

Hallo Christian R.

Ich möchte die Versionsnummer dazu nutzen um feststellen zu können 
welches FPGA-File geladen ist.
In der Entwicklungsphase und auch beim Kunden werden öfters Updates 
durchgeführt.
Daher die Kontrolle über die Versionsnummer, welche als laufende Nummer 
ausgeführt ist.

Jetzt bin ich immer noch nicht schlauer.

noeppkes ...

von Christian R. (supachris)


Lesenswert?

Also zumindest bei Xilinx ISE geht das nicht automatisch in den Flow zu 
integrieren. Die Entwurfs-Werkzeuge für FPGAs sind fast alle spätestens 
in den frühen 90ern stehen geblieben, was morderne Verfahren und 
Hilfsmittel angeht. Merkt man ja auch an der Wahl von TCL als 
Scriptsprache. Gruselig.
Bei Vivado hab ich mal ein tcl_pre gesehen, aber das geht ja nur für die 
7er FPGAs. Du musst dir wohl oder übel ein Script schreiben, das geht in 
nahezu jeder Script-Sprache. Alle Tools, die sich hinter der ISE 
verbergen, werden sowieso über die Command Line aufgerufen. Ich hab dazu 
bat-Dateien, die das alles abarbeiten. Und insgesamt ist das ja nur mit 
Versionskontrolle sinnvoll, aber das ist ja unabhängig davon. Mit 
Klicken zum Bitfile in der ISE ist dann aber nix mehr, auch die Reports 
werden erst mal nicht so toll aufbereitet, das macht die ISE über XML 
Transformation, aber wenig durchsichtig...

von Andreas H. (ahz)


Lesenswert?

Christian R. schrieb:
> Merkt man ja auch an der Wahl von TCL als
> Scriptsprache. Gruselig.

Ehm, naja.
Sowohl Synopsys, Cadence (digital) und Mentor (ModelSim/Questa) benutzen 
TCL als Scriptlanguage. Und damit haben wir einen Großteil des digitalen 
ASIC-Designmarktes abgehakt. Also SOO shlecht ist TCL nun auch nicht ;-)

> Also zumindest bei Xilinx ISE geht das nicht automatisch in den Flow zu
> integrieren.
Doch. Über die TCL Shell. Hatte ich oben schon mal kurz geschrieben. 
Hatte ich da zwar auch noch nie vorher benutzt, ist aber eigentlich 
recht übersichtlich.
Makefiles sind aber sicher die bessere Variante.

Grüße
Andreas

von PittyJ (Gast)


Lesenswert?

noeppkes schrieb:
> PittyJ schrieb:
>>
>> Da bei mir alles über Makefiles läuft, kann man wunderbar das Programm
>> noch vor der Synthese automatisch ablaufen lassen.
>
> Hallo PittyJ.
>
> Das Programm zu schreiben wäre kein Problem nur:
> Wie startest du das Programm aus der ISE heraus, wenn ich auf "Generate
> Programming File" doppelklicke?
>
> noeppkes ...

Wie schon beschrieben verwende ich für Produktiven Code keine Ise oder 
Quartus, sondern benutze Makefiles.
Das hat den Vorteil, dass man eine Übersetzung auch automatisch ablaufen 
lassen kann.

von Christian R. (supachris)


Lesenswert?

Andreas H. schrieb:
> Doch. Über die TCL Shell

Naja, das geht schon, hat aber mehrere Haken. Das generierte TCL File 
muss man halt bei jeder Änderung dann anpassen. Ich hatte mit den 
generierten Files ziemlich viele Probleme, vor allem mit IP Cores.
Benutze daher Batch Scripte, die meist auf einem TeamCity Server 
ablaufen.

Ich sag ja nicht, dass TCL an sich was schlechtes ist. Aber wenn man 
z.B. Python gewohnt ist, ist das einfach nur gruselig. Ich vermeide das 
bisher zu nehmen. Allerdings scheint es jetzt keine ISE mehr zu geben, 
also muss ich wohl demnächst mal auf Vivado umsteigen und dann geht 
nicht mehr viel ohne TCL zu automatisieren.

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.