When writing timing constraints, it is important to keep the constraints simple and specify them on the relevant netlist objects only. Inefficient constraints result in larger runtime and larger memory consumption. Inefficient constraints can also result in a design improperly constrained as timing exceptions can unexpectedly cover more paths than expected and collide with other constraints.
A timing constraint is efficient when the number of objects provided to the constraint is as small as possible to accurately and safely cover the desired timing paths. Most of the time, the full efficiency cannot be obtained as the list of objects are typically built from some pins or cells name patterns. However, the minimum number of objects should always be the target when building the list of objects for a timing exception.
Vivado provides several ways to get feedback on the timing exceptions:
- The methodology check XDCB-1 (report_methodology) reports the timing constraints that reference large collections of objects (over 1000).
- The Report Exception command (report_exceptions) provides coverage and collision information on the timing exceptions that have been defined.
Xilinx recommends that you carefully analyze the following reports:
This report provides the list of scoped timing constraints that a top-level timing constraint partially or totally overrides. However, it does not report a scoped constraint overriden by another scoped constraints (from the same scope or from a different scope). For example, this option can be used to verify that the IP constraints are not overriden by some user's top-level constraints.
This report provides a logical path coverage for each timing exception. The number of objects passed to the timing exception are compared to the number of startpoints and endpoints effectively covered. You should review constraints that have significant differences between the number of objects and the number of startpoints/endpoints.
This report provides the list of timing constraints overridden by other timing constraints (for example, a
set_clock_group). You should review the overridden constraints for correctness or remove the useless constraints.
This report provides the list of startpoints and endpoints that are ignored due to, for example, inexistent paths from those startpoints or to those endpoints.