Reporting the Timing Exceptions Coverage - 2025.2 English - UG906

Vivado Design Suite User Guide: Design Analysis and Closure Techniques (UG906)

Document ID
UG906
Release Date
2025-12-10
Version
2025.2 English

Use the -coverage option with the report_exceptions command to generate a detailed coverage report 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.

report_exceptions -coverage

For each valid timing exception, the report shows the following:

  • Constraint position number
  • Number of objects selected by the -from, -through, and -to options
  • Coverage percentage, which compares the number of pins affected by the constraint to the total number of pins specified
    Note: If you use cells (instead of pins) in your -from, -through, or -to options, Vivado expands those to pins. This expansion often reduces the reported coverage, because not all pins within the cells are tageted by the exception.

The following figure shows the exceptions coverage report.

Figure 1. Exceptions Coverage Report

When a timing exception has no valid path between the specified startpoints and endpoints, the coverage report shows 0.0%. For example, if constraint position 15 shows 0.0% coverage, it indicates that no path exists. This matches what you see in the report_exceptions -ignored report, where the same constraint appears as a Non-Existent Path.

You can use the coverage report to improve how you write timing exceptions. For instance, consider the following constraint:
set_multicycle_path -setup 2 -from [all_registers] -to [get_cells 
cpuEngine/or1200_cpu/or1200_ctrl/ex_insn_reg[*]]

If the coverage for the -from option is only 0.95%, even though all_registers returns 15,901 cells, it means that only a small subset of those registers have paths to the destination.

To improve efficiency and clarity, refine the -from list to include only the registers that have paths to ex_insn_reg[*]. This prevents over-constraint and improves the accuracy of your timing exceptions.

Figure 2. Multicycle Path Coverage

In the example shown, the -from option returns 15,901 cell objects using all_registers, but the coverage is only 0.95%. This low percentage indicates that most of the specified registers do not have timing paths to the cpuEngine/or1200_cpu/or1200_ctrl/ex_insn_reg[*] cells.

To improve the efficiency of this constraint, refine the -from list to include only the registers that actually have paths to the destination cells. This reduces unnecessary coverage and results in a more accurate and effective timing exception.