This article describes how to analyze and debug UltraScale/UltraScale+ issues involving clock partitioning errors.
With global clock networks that can be segmented in UltraScale/UltraScale+ architectures, designs can see contention for clocking resources when a large number of global clocks are needed for a particular clock region.
There are several types of clock partitioning errors, and it is usually helpful to view the resolution suggestion at the end of each individual error.
Messaging - Below are examples of partitioning error messages.
ERROR: [Place 30-835] Clock partitioning failed to resolve contention in clock region X0Y4. Only a maximum of 24 global clock nets can use resources in a clock region, however, there are 27 clocks in this region as listed below.
These clock nets either have user-constrained loads or have IO loads placed by the tool. If the clock sources/loads have constraints, please ensure they are placed close to each other to avoid using routing resources in other regions.
List of nets sourced in this region along with their unmovable loads (first 10 loads):
Delay matching for global Clocks:
ERROR: [Place 30-894] Cannot match clock delays for global clock nets 'net1' and 'net2'. Placer is trying to match clock delays for these clocks for best timing, but this operation failed due to usage of these tracks by other clock nets.
Try reducing the amount of clock resources in your design, by either combining some clock nets or by changing the placement of clock primitives to reduce the distance between the source and loads of each clock net involved in clock region <clock_region_value> and areas with high clock routing utilization.
Analysis - Analyzing the report_clock_utilization output is a good place to start.
While the "Place 30-835" error will give you a list of clocks in the problem clock region, other errors do not.
With place_design errors, the I/O and clock placement information is erased after the failure.
Therefore, using the place_ports command is recommended to analyze the clock utilization.
The place_ports command will keep the I/O and clock placement progress, even after a failure. This allows for further debug of an issue. Below is an example of the command:
report_clock_utilization -file clk_util.rpt
The clk_util.rpt will give you information on the resources currently used.
All Modules - Total Usage Sums of Static and RP modules
Suggestions - Both example messages are an indication of global clock resource contention.
To understand details of the clock utilization report, refer to the "Report Clock Utilization" section in (UG906) Vivado Design Suite User Guide: Design Analysis and Closure Techniques
(UG949) Ultrafast Design Methodology Guide has a detailed section on "Clocking Guidelines"
For more details on UltraScale clocking architecture refer to (UG572)