从 Quartus® II 软件 4.0 版开始,可以配置要在编译过程中的各个时间点自动运行的脚本。可以使用此功能自动运行执行自定义报告、进行具体赋值以及执行许多其它任务的脚本。
有三个全局赋值可以控制脚本的自动执行。此处列出了这些全局赋值以及它们运行脚本的时间。
• PRE_FLOW_SCRIPT_FILE - before a flow starts
• POST_MODULE_SCRIPT_FILE - after a module finishes
• POST_FLOW_SCRIPT_FILE - after a flow finishes
4.0 版以及更高版本支持 POST_FLOW_SCRIPT_FILE 和 POST_MODULE_SCRIPT_FILE 赋值,4.1 版以及更高版本支持 PRE_FLOW_SCRIPT_FILE 赋值。
模块是执行流程中一个步骤的 Quartus® II 可执行文件。例如有两个模块,分别为分析与综合 (quartus_map) 以及时序分析 (quartus_tan)。
流程是 Quartus® II 软件使用预定义选项执行的一系列模块。例如,设计编译是一个通常由以下步骤(由所示模块执行)组成的流程:
- 分析与综合 (quartus_map)
- 拟合器 (quartus_fit)
- 汇编器 (quartus_asm)
- Timing Analyzer (quartus_tan)
execute_flow Tcl 命令的帮助中介绍了其它流程。此外,Quartus® II GUI 中的“开始”(“处理”菜单)中的大多数命令与流程相对应。
进行赋值
要进行赋值,从而自动运行脚本,请使用下表进行赋值:
set_global_assignment -name <assignment name> <executable>:<script name>
赋值名称是以下名称的其中之一:
• PRE_FLOW_SCRIPT_FILE
• POST_MODULE_SCRIPT_FILE
• POST_FLOW_SCRIPT_FILE
可执行文件是包含 Tcl 解释器的 Quartus® II 命令行可执行文件的名称。
• quartus_cdb
• quartus_sh
• quartus_sim
• quartus_stp
• quartus_tan
脚本名称是 Tcl 脚本的名称。
脚本执行
Quartus® II 软件执行以下脚本:
<executable> -t <script name> <flow or module name> <project name> <revision name>
在 quartus(args) 变量中传递的第一个参数是正在执行的流程或模块的名称,具体取决于所使用的赋值。第二个参数是项目的名称,第三个参数是修订版本的名称。
使用 POST_MODULE_SCRIPT_FILE 赋值时,指定的脚本会在流程中的每个可执行文件之后自动运行。可以使用与模块名称(传递到脚本的第一个参数)的字符串比较,将脚本处理隔离到某些模块中。
执行示例
此示例展示了如何在整个流程中自动执行脚本。此示例假设有一个名为 top 的项目,其当前修订版本为 rev_1,并且在此项目的 Quartus® II 设置文件 (QSF) 中有以下赋值:
set_global_assignment -name PRE_FLOW_SCRIPT_FILE quartus_sh:first.tcl
set_global_assignment -name POST_MODULE_SCRIPT_FILE quartus_sh:next.tcl
set_global_assignment -name POST_FLOW_SCRIPT_FILE quartus_sh:last.tcl
在编译项目时,PRE_FLOW_SCRIPT_FILE 赋值控制在编译开始之前执行以下命令:
quartus_sh -t first.tcl compile top rev_1
接下来,Quartus® II 软件开始进行编译的分析与综合步骤,此步骤由 quartus_map 可执行文件执行。分析与综合完成后,POST_MODULE_SCRIPT_FILE 赋值触发以下命令的执行:
quartus_sh -t next.tcl quartus_map top rev_1
然后,Quartus® II 软件继续进行编译的拟合器步骤,此步骤由 quartus_fit 可执行文件执行。拟合器完成后,POST_MODULE_SCRIPT_FILE 赋值触发以下命令的执行:
quartus_sh -t next.tcl quartus_fit top rev_1
在编译的其它阶段之后执行相应命令。最后,完成编译后,POST_FLOW_SCRIPT_FILE 赋值触发以下命令的执行:
quartus_sh -t last.tcl compile top rev_1
控制处理
POST_MODULE_SCRIPT_FILE 赋值在每个模块之后触发脚本的执行。由于它是在每个模块之后执行的相同脚本,因此可能需要包括一些将脚本中的处理限于特定模块的条件语句。
例如,如果有一个只想在执行时序分析之后运行的脚本,应该包括与以下示例中类似的条件测试。它检查作为第一个参数传递到脚本的流程或模块名称,并在模块为 quartus_tan 时执行代码。
set module [lindex $quartus(args) 0]
if [string match "quartus_tan" $module] {
# Include commands here that are run
# after timing analysis
post_message "Running after timing analysis"
}
显示消息
由于 Quartus II 软件采用自动运行脚本的方式,需要使用 post_message 命令来显示消息,而非 puts 命令。此要求仅适用于此页面顶部列出的三个赋值运行的脚本。