01signal.com

Quartus, timing closure: Obtaining a concise multi-corner timing path report

Introduction

When an FPGA design fails to achieve its timing constraints, the natural thing to do is to take a careful look at the critical paths. This examination is made on a timing report that shows the delays that are caused by various logic elements along each path.

If you’re not a heavy user of Intel’s FPGAs, it may not be so trivial to figure out how to obtain this report. And even worse, you might unknowingly be looking at the wrong report.

The first thing to have sorted out is the concept of multi-corner timing analysis. The common practice is to verify the validity of an FPGA’s timing by ensuring that the timing constraints are achieved in four cases: The minimal and maximal temperature, combined with a timing model that is "slow" and "fast". Hence the analysis is made for four combinations, or as they are referred to, four corners.

It’s therefore important to look at the timing reports at all four corners when examining critical paths. This fact is often overlooked. For example, TimeQuest usually generates a timing report for just a single corner.

So this post describes how to obtain a report that is meaningful. The examples relate to Quartus Prime 17.1 Lite.

I should mention two other related posts: One post that takes a look on the relation between input / output constraints and the timing report, and another post which experiments a bit with Tcl scripting on TimeQuest.

Creating a multi-corner report: Quick, using scripts

First, copy the following Tcl script into a file, say, 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"
}

Don’t let the "multi_corner" flag confuse you: Each call to report_timing covers one corner. It’s not clear if this flag does anything.

That's why the script has a loop on all four options (with foreach_in_collection), and generates a separate report for each corner.

Now to action:

There will also be four separate reports in the same entry, one for each corner. On earlier versions of Quartus, only these will appear (i.e., no Multi-Corner Summary).

Generate HTML / text reports only

The tools can generate neat HTML reports, which are considerably more comfortable to read than TimeQuest’s own GUI. But unfortunately these reports only cover one corner each. This script generates four separate HTML reports, one for each corner (it’s a whole lot of files, JQuery script files, CSS and whatnot. Bells and whistles, but not a multi-corner report).

Consider the following script as 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"
}

For a plain textual report, change the argument of the -file flag, so the suffix is .rpt or .txt instead of .html.

Note the "project_open" command which is commented out at the top of the script. If it’s uncommented and "myproj" is replaced with the actual project name, a plain shell command line can be used to generate the HTML reports with something like:

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

I haven’t however found a way to generate a multi-corner report like this.

In order to have these reports generated in each implementation (which is recommended), add a line like the following to the QSF file:

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

When the Tcl script is included in a QSF file like this, the script should not use project_open.

Using only GUI

A multi-corner report can be obtained with just pointing and clicking:

Copyright © 2021-2023. All rights reserved. (ba53f4ca)