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