Quartus® II Tcl 示例:脚本自动执行

author-image

作者

从 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 软件使用预定义选项执行的一系列模块。例如,设计编译是一个通常由以下步骤(由所示模块执行)组成的流程:

  1. 分析与综合 (quartus_map)
  2. 拟合器 (quartus_fit)
  3. 汇编器 (quartus_asm)
  4. 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 命令。此要求仅适用于此页面顶部列出的三个赋值运行的脚本。