介绍
当 FPGA 设计未能达到其时序约束(timing constraints)时,自然要做的就是仔细查看关键路径(critical paths)。此检查是在时序报告(timing report)上进行的,它显示了由沿每条路径(path)的各种逻辑单元(logic elements)引起的时延(delays)。
如果您不是 Intel的 FPGAs的重度用户,那么弄清楚如何获得这份报告可能并不是那么简单。更糟糕的是,您可能会在不知不觉中查看错误的报告。
首先要理清的是 multi-corner 时序分析的概念。通常的做法是通过确保在四种情况下实现时序约束来验证 FPGA的时序(timing)的有效性: 最低和最高温度,结合“慢”和“快”的时序模型。因此,分析是针对四种组合进行的,或者如它们所指的,四种 corners。
因此,在检查关键路径时,务必同时查看所有四 corners 的时序报告。这个事实经常被忽视。例如,TimeQuest 通常只为单 corner生成时序报告。
所以这篇文章描述了如何获得有意义的报告。这些示例与 Quartus Prime 17.1 Lite有关。
我应该提到另外两个相关的帖子: 一篇文章探讨了输入 / output constraints (input / output constraints)和时序报告之间的关系,另一篇文章在 TimeQuest上对 Tcl 脚本进行了一些实验。
重要提示:本页说明了如何获取时序报告以满足 setup 要求。但是,也有生成 hold、 recovery 、 removal的时序报告。这些也可以揭示实现时序约束的失败。
创建 multi-corner 报告: 快速,使用脚本(scripts)
首先,将以下 Tcl 脚本复制到一个文件中,例如 timing.tcl:
create_timing_netlist
read_sdc
update_timing_netlist
foreach_in_collection op [get_available_operating_conditions] {
set_operating_conditions $op
report_timing -setup -npaths 20 -detail full_path -multi_corner \
-panel_name "Critical paths"
}
请注意,时序报告仅限于 setup。
不要让“multi_corner”标志迷惑你: 每次调用 report_timing 都会覆盖一 corner。目前尚不清楚该标志是否有任何作用。
这就是为什么脚本在所有四个选项上都有一 loop (带有 foreach_in_collection),并为每 corner生成一个单独的报告。
现在开始行动:
- 在 Quartus中,展开 Task pane中的 TimeQuest 组,打开 TimeQuest Timing Analyzer。
- 在 TimeQuest Timing Analyzer中,从 menu bar中选择脚本 > Run Tcl Script… (Script > Run Tcl Script…),然后选择 Tcl 脚本(例如 timing.tcl)。
- TimeQuest Timing Analyzer的报告 pane(Report pane)中添加了一个名为“关键路径”的条目。点击 Multi-Corner Summary。路径(paths)及其详细信息的列表现在填充了主要的 panes。
- 要将路径上的所有信息导出到文本文件中,请右键单击 Multi-Corner Summary,然后选择“Export…”。为带有 .rpt 后缀的输出文件选择一个名称。不支持 HTML 报告(它们将为空)。
同一条目中还将有四个单独的报告,每 corner一个。在早期版本的 Quartus上,只会出现这些(即没有 Multi-Corner Summary)。
仅生成 HTML/文本报告
这些工具可以生成整洁的 HTML 报告,阅读起来比 TimeQuest自己的图形用户界面(GUI)舒适得多。但不幸的是,这些报告只涵盖了一 corner 。这个脚本(script)生成四个单独的 HTML 报告,每 corner 一个(它有很多文件, JQuery 脚本文件, CSS 等等。花里胡哨,但不是 multi-corner 报告)。
将以下脚本视为 timing-html.tcl:
#project_open myproj
create_timing_netlist
read_sdc
update_timing_netlist
foreach_in_collection op [get_available_operating_conditions] {
set_operating_conditions $op
report_timing -setup -npaths 20 -detail full_path -multi_corner \
-file "timing_paths_$op.html" \
-panel_name "Critical paths for $op"
}
对于纯文本报告,更改 -file 标志的参数,因此后缀是 .rpt 或 .txt 而不是 .html。
请注意在脚本顶部注释掉的“project_open”命令。如果未注释并且“myproj”被实际项目名称替换,则可以使用普通 shell command line 生成 HTML 报告,如下所示:
$ /path/to/quartus/bin/quartus_sta -t timing-html.tcl
然而,我还没有找到一种方法来生成这样的 multi-corner 报告。
为了在每个实现(implementation)中生成这些报告(推荐),在 QSF 文件中添加如下行:
set_global_assignment -name TIMEQUEST_REPORT_SCRIPT relative/path/to/timing-html.tcl
当 Tcl 脚本包含在这样的 QSF 文件中时,脚本不应使用 project_open。
仅使用图形用户界面
只需点击即可获得 multi-corner 报告:
- 在 Quartus中,展开 Task pane中的 TimeQuest 组,打开 TimeQuest Timing Analyzer。
- 在时序 Analyzer(Timing Analyzer)的 Tasks pane里面,双击“Update Timing 网表”。
- 在同一 pane中,向下滚动到“Custom 报告”并双击“报告 Timing…(Report Timing…)”
- 打开 dialog box 。选择 setup、 hold、 recovery 或 removal。除此之外,接受默认值,然后单击下面的“报告时序(Report Timing)”。
- 在报告 pane中,将添加一个“报告时序”条目。展开此条目并右键单击它。在打开的菜单中,单击“Generate in All Corners”。
- 单击“Multi Corner Summary”组。可能如上所述导出报告。