The Vivado tools can generate a detailed coverage of each valid timing exception applied to the design. All the timing exceptions are reported, including those that are fully overridden or that do not have a path between startpoints and endpoints.
The exceptions coverage report is generated using the -coverage
command line option:
report_exceptions -coverage
The report includes, for each valid timing exception, the following information:
- Constraint position number.
- Number of objects selected by the
-from
/-through
/-to
command line options. - The coverage, expressed as a percentage, between the number of pins reached by the timing exception compared to the number of pins specified by the
-from/-through/-to
command line options.Note: When cells objects are specified, Vivado tools expand the cells into valid pins objects. This cell-to-pin conversion tends to bring the coverage down because typically the timing exception only reaches a subset of pins.
The following figure shows the exceptions coverage report.
When a timing exception does not have a path between the startpoints and endpoints, the coverage report shows 0.0. In the above example, timing exception position 15 does not have a timing path. This matches the result from report_exceptions -ignored
where constraint position 15 is reported as Non-Existent Path.
A coverage reports can assist in writing effective timing exceptions. The following figure shows another example of a coverage report for the following set_multicycle_path
constraint:
set_multicycle_path -setup 2 -from [all_registers] -to [get_cells
cpuEngine/or1200_cpu/or1200_ctrl/ex_insn_reg[*]]
In the example shown in the previous figure, the coverage for the -from
option is only 0.95% for 15901 cells objects returned by all_registers
. The efficiency of the constraint can be improved by refining the list of objects specified for the -from
option to only those objects that have a path to the cells cpuEngine/or1200_cpu/or1200_ctrl/ex_insn_reg[*]
.