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
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
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!
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.
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
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.
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
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
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
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