Quartus 2 TCL zur automatischen Generierung der BuildNummer, Version, Timestamp

Gast #3201751
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
Gast #3202466
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!
Gast #3202539
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.
Gast #3203723
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
Angehängte Dateien:
Gast #3204030
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
Gast #3214636
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
Gast #3218757
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
Gast #3219014
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

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