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"
}
}