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.
Important: This page explains how to obtain the timing report for the setup requirement. However, there are also timing reports that are generated hold, recovery and removal. These can also reveal failures to achieve the timing constraints.
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"
}
Note that the timing report is limited to only setup.
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:
- In Quartus, expand the TimeQuest group in the Task pane, and open TimeQuest Timing Analyzer.
- In TimeQuest Timing Analyzer, pick Script > Run Tcl Script… from the menu bar, and select the Tcl script (e.g. timing.tcl).
- An entry named "Critical paths" is added to the TimeQuest Timing Analyzer’s Report pane. Click on Multi-Corner Summary. A list of paths and their details now fill the main panes.
- To export all information on the paths into a textual file, right-click Multi-Corner Summary, and select "Export…". Choose a name for an output file with a .rpt suffix. HTML reports are not supported (they will be empty).
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:
- In Quartus, expand the TimeQuest group in the Task pane, and open TimeQuest Timing Analyzer.
- Inside the Timing Analyzer’s Tasks pane, double-click "Update Timing Netlist".
- In the same pane, scroll down to "Custom Reports" and double-click "Report Timing…"
- A dialog box is opened. Choose setup, hold, recovery or removal. Other than that, accept the defaults, and click "Report Timing" below.
- In the Report pane, an entry saying "Report Timing" will be added. Expand this entry and right-click it. In the menu that opens, click "Generate in All Corners".
- Click on the "Multi Corner Summary" group. Possibly export the report as outlined above.