01signal.com

Quartus 与时序收敛:生成简洁的多边界(multi-corner)时序路径报告

引言

当 FPGA 设计未能满足其时序约束(timing constraints)时,很自然要去仔细查看关键路径(critical path)。这个检查要在一个时序报告上进行,报告会显示路径上各个逻辑元件各自带来的延时。

如果你不是 Intel FPGA 的重度用户,搞清楚到底怎么才能拿到这份报告可能并不简单。更糟的是,你可能会在不知情的情况下,看了一份错误的报告。

首先要理清的概念是多边界时序分析。通常的验证方法是,在四种情况下确保时序约束都能满足,从而确认 FPGA 的时序没有问题:最低温度和最高温度,再分别配合“慢速”和“快速”时序模型。换句话说,分析共覆盖四种组合,也就是常说的四个边界条件(corner)。

因此,在检查关键路径时,必须把四个边界条件下的时序报告都看一遍。这一点经常被忽略。例如,TimeQuest 通常只默认生成单个边界条件的时序报告。

这篇文章就来介绍如何获得真正有意义的报告。示例以 Quartus Prime 17.1 Lite 为准。

我还想提另外两篇相关文章:一篇分析了输入/输出约束与这些时序报告之间的关系;另一篇则在 TimeQuest 上做了一些 Tcl 脚本实验。

重要提示:本文讲解的是如何为建立时间(setup)要求生成时序报告。但除此之外,系统还会为保持时间(hold)、恢复时间(recovery)和移除时间(removal)生成时序报告。这些报告同样有可能暴露出时序约束未能满足的问题。

用脚本快速生成多边界(multi-corner)报告

首先,把下面的 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 只覆盖一个边界条件。目前还不清楚这个选项到底有没有实际作用。

因此,脚本用 foreach_in_collection 循环遍历全部四种条件,为每个边界条件生成单独的报告。

下面开始实际操作:

同一条目下还会有四个单独的报告,分别对应四个边界条件。在更早版本的 Quartus 中,只会有这四个报告(也就是说没有 Multi-Corner Summary)。

只生成 HTML / 文本报告

Quartus 能生成整洁的 HTML 报告,读起来比 TimeQuest 自带的 GUI 舒服得多。但遗憾的是,这类报告每次只能覆盖一个边界条件。下面这个脚本会生成四个独立的 HTML 报告,每个边界条件一个(不过会生成一大堆文件: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 参数的后缀从 .html 改成 .rpt 或 .txt 即可。

注意脚本顶部被注释掉的 project_open 命令。如果去掉注释并把 myproj 换成实际工程名,就可以在纯 shell 命令行里生成 HTML 报告,例如用下面这样的命令:

$ /path/to/quartus/bin/quartus_sta -t timing-html.tcl

不过,我还没有找到用这种方式生成多边界(multi-corner)报告的办法。

为了让每次编译实现后都自动生成这些报告(这也是推荐做法),可以在 QSF 文件中加入下面这样一行:

set_global_assignment -name TIMEQUEST_REPORT_SCRIPT relative/path/to/timing-html.tcl

当 Tcl 脚本以这种方式被 QSF 文件调用时,脚本里不要再使用 project_open。

只用 GUI 操作

只用鼠标点一点,同样能得到多边界(multi-corner)报告:

本页由机器从英文翻译而来。如有疑问,请参阅原文
Copyright © 2021-2026. All rights reserved. (dcc38493)