It is important to know how the clock routes use the dedicated routing resources. This knowledge is needed to understand the clocking capacity of a Versal device. You also need to understand the clocking utilization of a design.
- From the clock buffer to the clock root, the clock signal goes through one or several segments of vertical and horizontal routing. Each segment must use the same track ID (between 0 and 23).
- At the clock root, the clock signal transitions from the routing track to the
distribution track with the same track ID. To reduce skew, the clock root is usually
in the clock region located in the center of the clock expansion window. The
rectangular area of the clock expansion window includes all the clock regions where
the clock net loads are placed. You can read the read-only CLOCK_EXPANSION_WINDOW
property to determine the clock expansion window for a clock net. Following is an
example:
get_property CLOCK_EXPANSION_WINDOW [get_nets -of [get_pins BUFGCE_inst/O]] => CLOCKREGION_X5Y2:CLOCKREGION_X6Y3 - From the clock root to the CLB columns where the loads are located, the clock signal travels on the vertical distribution (both up and down the device as needed) and then onto the horizontal distribution (both to the left and right as needed).
- The CLB columns are split into two halves, which are located above and below the horizontal distribution resources. Each half of the CLB column contains several leaf clock routing resources that can be reached by any of the horizontal distribution tracks. The leaf clock routing resources in Versal devices allow the MBUFG* primitives to perform leaf-level clock division. This division reduces clock track resource utilization, improves power efficiency, and reduces skew between synchronous clock domains.
In some cases, a clock buffer can directly drive onto the clock distribution track. This usually happens when the clock root is in the same clock region as the clock buffer. It also happens when the clock buffer drives non-clock pins, for example, high fanout nets.
The system segments clock routing resources. Only the routing and distribution segments used to traverse a clock region and to distribute the clock throughout the clock expansion window are consumed.
The following figure shows a clock buffer located in clock region X3Y0. It reaches its loads placed inside the clock expansion window. A rectangle of clock regions from X5Y2 to X6Y3 forms the clock expansion window.
In the following figure, a routed device view shows an example of a global clock that spans most of the device. The clock buffer driving the network is marked in blue in clock region X2Y0 and drives onto the horizontal routing in that clock region through the XPIO banks to X7Y0. The net then transitions from the horizontal routing onto the vertical routing in clock region X5Y1, reaching the clock root in clock region X5Y2.
Blue marks all clock routing. Clock region X5Y2 shows the clock root in red. From the clock root in X5Y2, the net transitions onto the vertical distribution and then onto the horizontal distribution to the clock leaf pins. Red highlights the distribution layer and the leaf clock routing resources in the CLB columns.