Quartus® II Tcl 项目自动存档

进行多次编译并在每次编译期间更改不同的设置时,可能很难记住每次编译时的设置和结果是什么。可以通过项目存档保留项目的完整副本,包括编译期间生成的文件。可以在系统命令提示符下使用单个命令对项目进行存档,但创建 Tcl 脚本并添加自动执行此脚本的设置可简化这个过程。

要使脚本在每次编译结束时自动运行,请使用以下脚本,并在项目中添加新的赋值。赋值名称为 POST_FLOW_SCRIPT_FILE。有关此赋值的更多信息,请参阅脚本自动执行示例。假设脚本名为 autoqar.tcl,请在 Quartus II 设置文件 (.qsf) 中添加以下赋值:

set_global_assignment -name POST_FLOW_SCRIPT_FILE quartus_sh:autoqar.tcl

此脚本根据当前日期和时间创建一个文件名。有关更改日期和时间表示格式的信息,请参阅“日期和时间格式化”页面。

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