When loading timing constraints into memory, the timing engine validates each new constraint and prints messages to flag potential issues. Some constraints partially invalidate the timing database, also known as the timing graph. Others require the timing database to be up-to-date to be properly applied. After the timing database is out of date, subsequent timing updates are needed, for example, to update auto-derivation clocks or to disable certain timing paths in the design.
XDC commands that query clocks or traverse the design to find netlist objects require an up‑to‑date timing database. Interleaving constraints and commands that affect the timing database state can increase runtime because the timing information gets repeatedly invalidated and updated.
open_checkpoint to reduce constraint application time:
| Section | Command | Comment |
|---|---|---|
| 1 |
|
Disable timing and set static values:
|
| 2 |
|
Clock definitions:
|
| 3 |
|
Clock properties:
|
| 4 |
|
I/O delays:
|
| 5 |
|
Timing exceptions:
|
| 6 |
|
Additional timing constraints:
|
Following the recommended order for timing constraints triggers a single timing update and minimizes runtime impact.
Some commands, such as all_fanin,
all_fanout, all_clocks, and all_registers, have
high intrinsic runtime and are best avoided:
-
all_fanin -
all_fanout -
all_clocks -
all_registers
One of the most runtime-intensive combinations is using set_disable_timing with all_fanin or all_fanout. Avoid
patterns like the following:
set_disable_timing –from <pin> -to [all_fanout …]
set_disable_timing –from [all_fanin …] -to <pin>
The following is an example of a non-optimal sequence:
create_clock –name clk1
create_generated_clock –name genclk1 –master_clock [get_clocks -of [get_pins ...]]
set_disable_timing ...
create_clock –name clk2
set_false_path -from [get_clocks -of [get_pins ff1/C]]
set_case_analysis ...
create_clock –name clk3
set_max_delay -to [get_clocks -of [get_pins ff2/C]]
The following is an example of an improved, more runtime-efficient sequence:
set_disable_timing ...
set_case_analysis ...
create_clock –name clk1 create_clock –name clk2
create_clock –name clk3
create_generated_clock –name genclk1 –master_clock [get_clocks -of [get_pins ...]]
set_false_path -from [get_clocks -of [get_pins ff1/C]]
set_max_delay -to [get_clocks -of [get_pins ff2/C]]