When writing timing constraints, keep them simple and apply them only to relevant netlist objects. Inefficient constraints increase runtime, consume more memory, and can lead to improperly constrained designs.
Timing exceptions can unintentionally cover more paths than expected and conflict with other constraints. An efficient timing constraint uses the smallest number of objects necessary to accurately and safely cover the intended timing paths.
Full efficiency is not always possible because object lists often use name patterns for pins or cells. Even so, aim to minimize the number of objects in each timing exception.
Vivado provides several ways to evaluate the quality of timing exceptions:
- Run methodology check
XDCB-1withreport_methodology. This reports constraints referencing large collections of objects (over 1,000). - Run
report_exceptionsfor coverage and collision details on defined timing exceptions.
AMD recommends that you carefully analyze the following reports:
- Run
report_exceptions -scope_overrideReports scoped timing constraints partially or fully overridden by top-level constraints. However, it does not report scoped constraints overridden by another scoped constraint. Use this to verify that IP constraints are not overridden by user top‑level constraints.
- Run
report_exceptions –coverageto see timing exception coverage. This report shows logical path coverage for each timing exception. It compares the number of objects passed to the exception with the number of startpoints and endpoints covered. Review constraints where the object count differs significantly from the covered startpoints and endpoints. - Run
report_exceptions –ignoredto list timing constraints overridden by other constraints. For example,set_false_pathoverridden byset_clock_group. Review overridden constraints for correctness or remove any that are unnecessary. - Run
report_exceptions –ignored_objectsto list startpoints and endpoints ignored due to nonexistent paths from or to those objects.