Quartus® II Tcl – Automatisches Archivieren von Projekten

author-image

Von

Wenn Sie viele Kompilierungen durchführen und während jeder Kompilierung unterschiedliche Einstellungen ändern, kann es schwierig sein, sich zu merken, welche Einstellungen und Ergebnisse von der Kompilierung bis zur Kompilierung stammen. Durch das Archivieren eines Projekts können Sie eine vollständige Kopie davon beibehalten, einschließlich der Dateien, die während einer Kompilierung generiert wurden. Sie können ein Projekt mit einem einzigen Befehl an einer Systemeingabeaufforderung archivieren, aber das Erstellen eines Tcl-Skripts und hinzufügen einer Einstellung zur Ausführung erleichtert den Vorgang automatisch.

Damit das Skript automatisch am Ende jeder Kompilierung ausgeführt wird, verwenden Sie das folgende Skript und fügen Sie Ihrem Projekt eine neue Zuweisung hinzu. Der Name der Zuweisung ist POST_FLOW_SCRIPT_FILE. Weitere Informationen zu dieser Zuweisung finden Sie in den Beispielen für die automatische Skriptausführung. Unter der Annahme, dass das Skript autoqar.tcl genannt wird, fügen Sie der Quartus II Settings File (.qsf) die folgende Zuweisung hinzu:

set_global_assignment -name POST_FLOW_SCRIPT_FILE quartus_sh:autoqar.tcl

Das Skript erstellt einen Dateinamen basierend auf dem aktuellen Datum und der aktuellen Zeit. Informationen zum Ändern der Datums- und Zeitdarstellung finden Sie auf der Seite Datums- und Zeitformatierung.

# Use these options to control what files get archived.
# -include_outputs: Includes Quartus II output files, including the
#     db directory and programming files
# -include_libraries: Includes system libraries referenced in your
#     project

set options "-include_outputs"
#set options "-include_libraries"
#set options "-include_outputs -include_libraries"

# Subdirectory to put the automatically created qars into
set qar_directory autoqar

# Generates a name for the qar based on the name of the revision
# and the current time.
proc generateQarName { project revision } {

    # time_format_string controls how the qar is named.
    # These values give the value month_dd_yyyy-hh.mm.ss.
    # For example, Jan_28_2004-13.00.05

    set time_format_string "%b_%d_%Y-%H_%M_%S"
    set time_value [clock format [clock seconds] \
      -format $time_format_string]

    # The name of the qar is based on the revision name and the time
    return $revision-$time_value
}

global quartus

set module_or_flow [lindex $quartus(args) 0]
set project [lindex $quartus(args) 1]
set revision [lindex $quartus(args) 2]

# If a qar is made, set this to 1 and attempt to move it later on
set ran_qar 0

# Add any modules or flows to the list in the switch statement
# As is, it'll make a qar after each compile, compile and simulate,
# and incremental fit.
switch -exact -- $module_or_flow {

    compile -
    compile_and_simulate -
    incremental_fitting {

    if { [catch {
        project_open -revision $revision $project
        set qar_name [generateQarName $project $revision]
        project_archive $options $qar_name
        project_close
    } res ] } {
        post_message -type warning $res
    } else {
        set ran_qar 1
    }
    }

}

# If a qar was made, try to move it to the right directory
if { $ran_qar } {

    if { [catch {

    file mkdir $qar_directory
    file copy $qar_name.qar $qar_directory
    file copy $qar_name.qarlog $qar_directory
    file delete $qar_name.qar
    file delete $qar_name.qarlog

    } res ] } {
    post_message -type warning $res
    } else {
         set qname [file join $qar_directory $qar_name]
    post_message "Successfully archived your project in $qname.qar"
    }
}

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.