To understand the clocking capacity of a Versal device and the clocking utilization of a design, it is important to know how the clock routes use the dedicated routing resources:
- 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 clock
expansion window is the rectangular area that includes all the clock regions where
the clock net loads are placed. The read-only CLK_EXPANSION_WINDOW property can be
read to determine the clock expansion window for a clock net. Following is an
get_property CLK_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 to reduce clock track resource utilization, improve power efficiency, and reduce 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 located in the same clock region as the clock buffer or when the clock buffer only drives non-clock pins (e.g., high fanout nets).
Because clock routing resources are segmented, 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 how a clock buffer located in clock region X3Y0 reaches its loads placed inside the clock expansion window, which is formed by a rectangle of clock regions from X5Y2 to X6Y3.
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. All clock routing is marked in blue. The clock root is marked in red in the clock region X5Y2. From the clock root in X5Y2, the net transitions onto the vertical distribution and then onto the horizontal distribution to the clock leaf pins. The distribution layer and the leaf clock routing resources in the CLB columns are marked in red.