Quartus® II Tcl Beispiel: Versionsnummer in Datei erhöhen

author-image

Von

Eine Möglichkeit, eine Versionsnummer in Ihrem Projekt beizubehalten, besteht darin, eine Zahl in einer Datei während jeder Kompilierung zu erhöhen. Um diese Aufgabe auszuführen, muss ein Skript die Datei analysieren, um die Nummer zu finden, sie zu erhöhen und dann die Datei mit der neuen Nummer neu zu schreiben. Wenn die Datei kurz ist und neben der Nummer nur wenig anderes enthält, kann das Skript bei jeder Ausführung einfach eine neue Datei von Grund auf neu schreiben. Wenn es sich bei der Datei jedoch um eine lange Designdatei handelt, ist es möglicherweise praktischer, die Zeile mit der Versionsnummer zu bearbeiten, anstatt eine neue Datei von Grund auf neu zu schreiben.

Suchen Sie die Nummer

Das Skript verwendet einen regulären Ausdruck, um die Nummer in der Datei zu finden. Die Zeile mit der Zahl sollte ein eindeutiges Format haben, andernfalls können mehrere Zeilen mit dem regulären Ausdruck übereinstimmen. Eine Möglichkeit, ein einzigartiges Format zu erstellen, ist ein eindeutiger Kommentar in der Zeile mit der Nummer. Der reguläre Ausdruck kann diesen eindeutigen Kommentar enthalten. Das Folgende ist ein Beispiel für eine Zeile in einer Designdatei mit einer Versionsnummernzeile, die einen speziellen Kommentar enthält, und dem entsprechenden regulären Ausdruck Tcl.

Designdateilinie

data_out < = 16'h41; Design-Versionsnummer

Regulärer Ausdruck

regexp {^\s+data_out <= \d+'h([[:xdigit:]]+); \$line stimmen version_number

Das([[:xdigit:]]+)Muster stimmt mit einer hexadezimalen Zahl mit mindestens einer Stelle überein und speichert es in einer Übereinstimmungsvariable mit dem Namen version_number.

Erhöhen Sie die Nummer

Sie können Hexadezimalzahlen in Tcl erhöhen. In Tcl werden Hexadezimalzahlen mit einem 0-fachen führenden Zeichen angegeben. Wenn Ihre Versionsnummer nicht mit 0x beginnt, ist es möglicherweise einfacher, die Nummer auf Basis 10 zu konvertieren, bevor Sie sie erhöhen. Für eine Hexadezimalzahl zeigen die folgenden Befehle ein Beispiel für die Konvertierung einer hexadezimalen Zeichenkette in Basis 10, die erhöhung und die Konvertierung auf Hexadezimale zurück.

stellen Sie hex_value Scan "AA"
$hex_value "%x" ein, decimal_value
decimal_value festlegen new_hex_value
[Format "%X" $decimal_value]
# $new_hex_value ist jetzt "AB"

Datei neu schreiben

Wenn die Design-Datei kurz ist und nur Informationen über die Versionsnummer enthält, können Sie eine Reihe von Puts-Befehlen verwenden, um eine neue Datei mit der erhöhten Nummer zu schreiben.

Wenn die Design-Datei lang ist, ist es in der Regel einfacher, nur die Zeile mit der Versionsnummer zu ändern, da eine harte Kodierung des Dateiinhalts im Tcl-Skript unpraktisch wäre.

Das nachstehende Verfahren analysiert eine Designdatei und aktualisiert die Zeile mit den Versionsinformationen. Zeilen, die nicht mit dem regulären Ausdruck übereinstimmen, werden unverändert in eine neue Datei geschrieben. Die Zeile, die mit dem regulären Ausdruck übereinstimmt, hat die Versionsnummer erhöht und wird dann in die neue Datei geschrieben.

proc update_version_number { input_file output_file} {

    # Wenn die Eingabedatei nicht geöffnet werden kann, geben Sie einen Fehler zurück.
    wenn { [catch {open $input_file} input] } {
        return -code error $input
    } # Wenn die

    Ausgabedatei nicht geöffnet werden kann, geben Sie einen Fehler
    zurück, wenn { [catch {open $output_file w} output] } {
        return -code error $output } #
    die

    Eingabedatei jeweils eine Zeile durchlesen,
    während {-1 != [erhält $input Zeile] } { # Dieser reguläre Ausdruck ist spezifisch für

        die
        Design#-Dateizeile oben
        auf der Webseite. # Sie müssen die Datei entsprechend ändern.
        if { [regexp {^\s+data_out <= \d+'h([[:xdigit:]]+); & $line match version_number] } { # Wandeln Sie die hexadezimale Versionsnummer in basis zehn um und erhöhen Sie sie. scan $version_number "%x" decimal_value incr decimal_value set new_version_number [format "%X" $decimal_value] # Ersetzen der neuen Versionsnummer durch den alten Regsub h${version_number} $line h${new_version_number} zeile } # Schreib die Zeile zu der neuen Datei setzt $output $line } Schließen Sie $input schließen Sie $output   }</pre>

In einem Tcl-Skript können Sie das Verfahren wie im folgenden Beispiel gezeigt aufrufen. Das Beispiel wird unter der Annahme geschrieben, dass Sie das Tcl-Skript an einer Systemeingabeaufforderung ausführen und den Dateinamen angeben, der als Argument für das Skript aktualisiert werden soll.

set file_name [$quartus(args) 0]
gesetzt output_file_name ${file_name}.updated_version_number

if { [catch { update_version_number $file_name $output_file_name } res] } { post_message -type $output_file_name } res] { post_message
    -type critical_warning "Versionsnummer konnte nicht aktualisiert werden: $res"
} else { if {

    [catch { file rename $output_file_name $file_name } res ] } {
        post_message -type critical_warning \
            "Versionsnummer konnte nicht aktualisiert werden:  $res" }
}

Der Inhalt dieser Seite ist eine Kombination aus menschlicher und computerbasierter Übersetzung des originalen, englischsprachigen Inhalts. Dieser Inhalt wird zum besseren Verständnis und nur zur allgemeinen Information bereitgestellt und sollte nicht als vollständig oder fehlerfrei betrachtet werden. Sollte eine Diskrepanz zwischen der englischsprachigen Version dieser Seite und der Übersetzung auftreten, gilt die englische Version. Englische Version dieser Seite anzeigen.