Forum: FPGA, VHDL & Co. Quartus 2 TCL zur automatischen Generierung der BuildNummer, Version, Timestamp


von Tomy (Gast)


Lesenswert?

Hallo zusammen,

ich habe eine Frage über Quartus2/TCL zum automatischen Generierung des 
Build-Infos. Nach einem Tag Recherchierung nach dem Thema, habe ich was 
interessantes gefunden. Und zwar heißt der Beitrag "Increment Version 
Number in File"
http://www.altera.com/support/examples/tcl/tcl-increment-version.html

Ich habe den TCL-Code in ein .tcl-file kopiert, und in .psf-File den 
Befehl:
#set_global_assignment -name POST_FLOW_SCRIPT_FILE 
"quartus_sh:update_version_number_test.tcl"

hinzugefügt, sowie angepasst.

Weil ich zu wenig Ahnung vom TCL habe, kommt es immer wieder 
Error-Meldung.
Kann jemand bisschen einleuchten, wie man macht?

Mein Wunsch ist, mit TCL kann ich automatisch Build-Infos erzeugen 
lassen:

Vor Kompilieren:

1) Programming-File (.rpd; .Jic; .sof) alle löschen
2) Timetamp, Quartus-Version, Project-Version(vorher als Konstant per 
Hand definiert) in ein .VHD-File aktualisieren
3) alte BuildNummer lesen, inkrementieren, zurückschreiben in .VHD-File

Nach erfolgreicher Kompilieren:

1) Programing-File Name ändern. Weil Quartus die Namenform: 
ProjectName.sof erzeugt, möchte so umschreiben: 
$Datum$ProjectName$V$ProjectVersion$B$BuildNummer.sof
Und dann ProjectName.sof löschen
2) .Jic; .rpd Programmingfile konvertieren

Nach fehlerhaften Kompilieren:

1) BuildNummer lesen, dekrementieren, zurückschreiben in .VHD-File


vielen Dank im Voraus!

Lg Tomy

von Tomy (Gast)


Lesenswert?

ps. Entschuldigung für meine mangelhafte Deutsch..

von Dr. Schnaggels (Gast)


Lesenswert?

Und was genau ist jetzt Dein Problem?

von Tomy (Gast)


Lesenswert?

Dr. Schnaggels schrieb:
> Und was genau ist jetzt Dein Problem?

Danke Dir erst mal für Deine Antwort!:)

Meine Frage ist, für meinen Wunsch oben wie das .tcl-script so ungefähr 
aussieht...

lg Tomy

von Kest (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

mein TCL script anbei (fast 1zu1 von Altera). Dabei wird die SVN 
Revision generiert + Timestamp.

Kest

von Tomy (Gast)


Lesenswert?

Kest schrieb:
> Hallo,
>
> mein TCL script anbei (fast 1zu1 von Altera). Dabei wird die SVN
> Revision generiert + Timestamp.
>
> Kest

Danke für Dein Code, es hilft mir bisschen weiter:)

Wie kann ich die Quartus-Version, Quartus-Build Nummer usw.. in das .TCL 
- File einbinden?

Also, ich sehe in .qsf-File die wichtige Informationen wie:

set_global_assignment -name FAMILY "Cyclone IV E"
set_global_assignment -name DEVICE EP4CE55F23I7
set_global_assignment -name LAST_QUARTUS_VERSION 13.0
set_global_assignment -name DEVICE_FILTER_PIN_COUNT 484
set_global_assignment -name DEVICE_FILTER_SPEED_GRADE 7

und möchte gern diese in den Speicher (Config Flash EPCS) und 
Register-Bank speichern.

Wie kann ich das in .TCL machen?

Danke!

von Jürgen (Gast)


Lesenswert?

Wozu sollen diese Informationen gut sein? Du kannst sowieso keinen 
Bitstream in ein anderes Device laden. Es macht mehr Sinn eine Versions 
ID und ggf. einen Zeitstempel zu speichern. Was hilft dir die Quartus 
Version wenn du nicht weißt welche Source Files verwendet wurden?

Um Informationen in ein VHD-File zu schreiben bietet Altera hier schon 
einige Beispiele auf denen du aufbauen kannst:

Speziell hier ist eigentlich schon alles gemacht:
http://www.altera.com/support/examples/tcl/tcl-version-number.html

Hier steht wie man die Zeit über tcl bekommt:
http://www.altera.com/support/examples/tcl/tcl-date-time-stamp.html



Meine Vorgehensweise war wie folgt: Ich erstelle mir mit tcl ein vhd 
file in dem ich mehrere CONSTANTs über tcl befülle. Diese werden dann 
einem out Port zugewiesen. Die so erhaltene Entity binde ich dann in 
meinem restlichen Design ein und bekomme somit die Build-Information. 
Dies kann ich dann nach Belieben auf Register legen und später auslesen.

von Tomy (Gast)


Lesenswert?

Vielen Dank! :-)

lg Tomy

von Tomy (Gast)


Angehängte Dateien:

Lesenswert?

Hallo, ich bin mal wieder..

Ich hab mir 2-TCL-Files gebastelt.
Die erste wird mit "PRE_FLOW_SCRIPT_FILE" aufgerufen, und die zweite mit 
"POST_FLOW_SCRIPT_FILE" aufgerufen.

In erster File wird paar Markos definiert, die ich gern in der zweiter 
tcl-file nutze. Zum Beispeil sind die Project-Nummer, Build-Nummer, 
Version

set PROJECT_NO      "90"
set SW_VERSION_H    "5"
set SW_VERSION_L    "7"

In der zweiter Tcl-File mache ich so:

global PROJECT_NO SW_VERSION_H SW_VERSION_L
post_message -type info "PROJECT_NO = $PROJECT_NO"

Aber meckert der Quartus, dass "PROJECT_NO" nicht gefunden!!!


Wie kann ich das machen?

Danke sehr und schönes WE:-)

Lg Tomy

von Jürgen (Gast)


Lesenswert?

Erstelle eine Datei defines.tcl die du von beiden Scripts mittels 
source-Befehl aufrufst. Darin kannst du ganz normal deine Variablen 
setzen und anschließend in beiden Files nutzen.

von Tomy (Gast)


Lesenswert?

Jürgen schrieb:
> Erstelle eine Datei defines.tcl die du von beiden Scripts mittels
> source-Befehl aufrufst. Darin kannst du ganz normal deine Variablen
> setzen und anschließend in beiden Files nutzen.

super, danke:)

Ich hab die automatische Programming File (.jic; .pof) Generierung 
geschafft.

Ich möchte zuerst die alle alte .jic; .pof -Files vor Kompilieren 
löschen. Wie kann ich das machen? Ich finde nur Befehl : file delete 
filename. Also, das heißt muss ich "filename" kennen...

Vielen Dank!

lg Tomy

von Tomy (Gast)


Lesenswert?

Hallo,

so habe ich gemacht, es funktioniert:-)

foreach Progfile [glob -nocomplain *.sof *.jic *.pof *.rdp] {file delete 
-force $Progfile}

schönes WE:-)

lg Tomy

von Tomy (Gast)


Lesenswert?

Hallo, ich bin mal wieder und eine Frage hätte ich noch gern. Zwar kann 
ich die Rechnerinformation mit tcl kriegen, z.b.: 
"Benutzername@rechnername".

Ich hab gegooglt aber keinen Erfolg...

Vielen Dank im voraus!

lg Tomy

von Jürgen (Gast)


Lesenswert?

Lies einfach die Systemvariable für den Benutzernamen.

http://wiki.tcl.tk/15627

von Tomy (Gast)


Lesenswert?

Jürgen schrieb:
> Lies einfach die Systemvariable für den Benutzernamen.
>
> http://wiki.tcl.tk/15627

vielen Dank für deinen Tipp:)

so sieht das aus:

global env ;# Array System Variable
set Myhostname [info hostname]
set MyUserName $env(USERNAME)

Hätte noch eine Frage, und zwar für CRC32-Prüfsum Erstellung von 
.Jic-File nach Kompilieren nutze ich die Software crc32.exe.

Wie kann ich crc32.exe vom TCL aufrufen?

Vielen Dank!

lg Tomy

von Mr.X (Gast)


Lesenswert?

Hallo Tomy,

eine ausführbare Datei wird mittels "exec" ausgeführt.

exec [path]\crc32.exe

von Tomy (Gast)


Lesenswert?

Mr.X schrieb:
> Hallo Tomy,
>
> eine ausführbare Datei wird mittels "exec" ausgeführt.
>
> exec [path]\crc32.exe

Danke!:)

so habe ich gemacht, und es funktioniert

set CRC32res [exec crc32.exe Project.jic]
post_message -type info "\Version.tcl\] $CRC32res"

es liefert in meinem Fall: 0xAFCAF291 (2,097,376)

Wie kann ich dem crc32.exe sagen, das er nur 32-bit CRC liefern soll? 
also als Ergebnis möchte ich gern "AFCAF291" kriegen, nicht noch mit 
Größen und so.

Noch eine Frage über Quartus2 "Smart-Recompile". Wie erkennt man dass 
bei jetziger Kompilierung handelt es sich um ein "Smart-Recompile", 
damit man nicht Build-Nummer in TCL hoch zählt. In meinem konkreten Fall 
habe ich zwei .tcl-files, einer VerPreFlow.tcl, der andere 
VerPostFlow.tcl heißt.

Das VerPreFlow.tcl wird mit einem "PRE_FLOW_SCRIPT_FILE" aufgerufen, 
diese liest BuildNummer aus einem BuildNum.txt, und inkrementiert die. 
Dann wird die neue Buildnummer mit Zeitstamp in eine Version.VHD (als 
.bsf Symbol-file einmal erzeugt, die VHDL Input/Output Port sind aber 
nicht geändert), Registerbank aktualisiert, mit der Hoffnung dass der 
Quartus mit der neuen Buildnummer und Zeitstamp kompiliert. Wenn ich mir 
die BuildNum.txt und Version.vhd nach der erfolgreichen Kompilierung 
ansehe, finde ich die neue gewünschte inkrementierte BuildNummer.

Aber wenn ich mit dem JTAG-Programmer die alte .Jic-file (alte 
BuildNummer) mit der neuer .Jic verifizieren lasse, sind die beide 
identisch!!! Es scheint, die eine Version.VHD nicht mitkompiliert wird!? 
Ich merke auch, dass die Kompilierung sehr schnell dauert, also wegen 
"Smart-Recompile" aktiv ist.

Wie kann ich damit umgehen?

Vielen Dank!

lg Tomy

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.