Quartus® II Tcl Erhalten Sie die Subversion Revisionsnummer

author-image

Von

Dieses Beispielskript zeigt, wie Sie auf eine Versionskontrolle Software-Versionsnummer für Ihr Projekt zugreifen können. Sie können die Versionsnummer in eine Designdatei schreiben, die in Ihrem FPGA-Design kompiliert wird. Mit zusätzlicher Designlogik kann die Versionsnummer vom FPGA gemeldet werden. Diese Informationen können beim Debugging sehr nützlich sein, insbesondere wenn Sie zwischen mehreren Programmierdateien wechseln. Anhand der Versionsnummer im FPGA können Sie ganz einfach herausfinden, welche Version des Designs auf der FPGA ausgeführt wird.

Dieses Beispiel verwendet die Subversion-Revisionsnummer für Ihr Projekt. Sie verwendet den Befehl svn info, um Informationen zu der angegebenen Datei zu erhalten. Der Befehl svn info informiert Sie über Elemente in Ihrer Arbeitskopie und enthält eine Zeile mit der Revisionsnummer im folgenden Formular:

Version: <Revision-Nummer>

Dieses Beispiel verwendet zwei Verfahren, um den Befehl svn info auszuführen und die Ausgabe zu analysieren, um die Revisionsnummer zu erhalten. Das get_subversion_revision-Verfahren startet den Befehl svn info. Rufen Sie das Verfahren mit dem Dateinamen an, den Sie mit dem Befehl svn info verwenden müssen. Das Verfahren wird mit einem Fehler zurückgegeben, wenn der Befehl nicht ausgeführt werden konnte. Andernfalls gibt das Verfahren nichts zurück, setzt aber bestimmte globale Variablen. Wenn der svn info Befehl timediert ist, ist der Wert der globalen Variable done -1. Wenn die Revisionsnummer gefunden wurde, ist der Wert der globalen Variable done 1 und die Revisionsnummer befindet sich in der revision_number globalen Variable. Sie können die Revisionsnummer in einer Nachricht, wie in diesem Beispiel, anzeigen oder in eine Designdatei schreiben.

Das get_version_info-Verfahren ist eine Hilfeprozedere, die die Befehlsausgabe einer Zeile nach dem anderen analysiert. Es enthält einen regulären Ausdruck, der mit der Revisionsnummer-Zeile übereinstimmt und die Revisionsnummer extrahiert.

proc get_subversion_revision { file_name } {

    global done

    # Die maximale Anzahl von Sekunden, die auf den Befehl svn info # warten
    müssen, um timeout_seconds
    30 # zu

    vervollständigen. Der Befehl svn info mit dateiname, der ausgeführt wird,
    setzt cmd "svn info ${file_name}"

    # Versuch, die Versionsinformationen zu erhalten.
    # Wenn der Befehl nicht ausgeführt werden kann, geben Sie einen Fehler zurück.
    # Andernfalls richten Sie ein Dateiereignis ein, um die Befehlsausgabe zu verarbeiten.
    if { [catch {open "|$cmd"} input] } {
        return -code error $input
    } else {

        fileevent $input readable [list get_revision_info $input ]

        # Einrichten eines Timeouts, damit der Prozess nicht hängen kann, wenn das
        #Repository nicht läuft.
        Timeout einstellen [nach [ expr { $timeout_seconds * 1000 } ] \
            [list set done -1] ]

        # Fahren Sie erst fort, bis die Revisionsnummer gefunden ist, # oder der Vorgang
        ausgeht. Abbrechen Sie das Timeout sowieso.
        vwait nach
        Cancel $timeout
    } } proc get_revision_info
{

inp } { global done revision_number  if {

    [eof $inp] } {
        catch {close $inp}
        set done 1 }
    elseif { $done } {
        gets $inp line } else { gets $inp line # Verwenden Sie einen
        regulären Ausdruck, um die Zeile mit der
        Revisionsnummer # abzugleichen.
        wenn { [regexp {^Revision:\s+(\d+)\s*$} $line match revision_number] } {
            set done 1
        } } } set
0 set revision_number ""

# Der Dateiname ist in der Regel Ihre Projektdatei
  
  


.qpf
set file_name [$quartus(args) 0]

if { [catch { get_subversion_revision $file_name } msg] }
    {post_message -type critical_warning "Couldn't run command to get\
        revision number. $msg"
} else { if {

    -1 == $done } {
        post_message -type critical_warning "Timeout getting revision number." }
    elseif { [string equal "" $revision_number] } {
        post_message type critical_warning \
            "Die Revisionsnummer konnte in der Ausgabe von svn info $file_name nicht gefunden
    werden." } else { post_message
        "Revision für $file_name ist $revision_number"
    }
}

Sie können das Skript an einer System-Eingabeaufforderung mit dem folgenden Befehl ausführen (vorausgesetzt, das Skript befindet sich in einer Datei namens svn_revision.tcl):

quartus_sh -t svn_revision.tcl mye.qpf

Das Skript erstellt eine solche Nachricht, um die Version anzuzeigen:

Info: Revision für mysupport.qpf ist 417

Sie können eine Nachricht mit der Revisionsnummer in der globalen Variable revision_numberanzeigen, wie in diesem Beispiel, oder sie in eine Designdatei schreiben.

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.