Use a limited number of timing exceptions and keep them simple whenever possible. Otherwise, you face the following challenges:
- Using many exceptions significantly increases the implementation compile time, especially when attaching them to a large number of netlist objects.
- Constraints debugging becomes extremely complicated when several exceptions cover the same paths.
- Presence of constraints on a signal can hamper the optimization of that signal. Therefore, including unnecessary exceptions or unnecessary points in exception commands can hamper optimization.
Following is an example of timing exceptions that can negatively impact the run time:
set_false_path -from [get_ports din] -to [all_registers]
- If the
dinport does not have an input delay, it is not constrained. So there is no need to add a false path. - If the
dinport feeds only to sequential elements, there is no need to specify the false path to the sequential cells explicitly. You can write this constraint more efficiently:set_false_path -from [get_ports din] - If the false path is needed, but only a few paths exist from the
dinport to any sequential cell in the design, then it can be more specific (all_registerscan potentially return thousands of cells, depending upon the number of registers used in the design):set_false_path -from [get_ports din] -to [get_cells blockA/config_reg[*]]