Managing Clock Frequencies - 2023.2 English

Vitis Unified Software Platform Documentation: Application Acceleration Development (UG1393)

Document ID
Release Date
2023.2 English

The Vitis tools let you create designs using the default clocks defined in a platform, or software scalable clocks, or fixed-frequency clocks generated from MMCMs in the hardware design. This solution is engineered to meet broad design requirements for multi-clocking of and between PL kernels, AI Engine graphs, and platform IP like GTs.

As described in Identifying Platform Clocks, platforms include scalable clocks that can be used at the default frequency, or that XRT can scale to a different specified frequency, or that can also be scaled to meet timing if needed. Platforms also include fixed clocks, that can be used at the default frequency, or that can have additional frequencies generated using MMCMs to divide or multiply the default frequency.

Clock frequencies can be specified using the --freqhz option for AI Engines, for PL kernels, or for linking the System project. When you specify the --freqhz option, the v++ linker examines the frequency relative to the predefined platform clocks, and chooses a clock to use. If the frequency matches one of the predefined clocks, the tool uses that clock. If the frequency is close to a platform clock frequency, the platform clock will be selected, but if there is no clock close to the desired frequency, a clock will be generated by inserting a clock wizard into the design.

During the system linking process you can connect multiple kernels to the platform using different clock frequencies specifying multiple --freqhz options. Each kernel, or unique instance (CU) of the kernel can connect to a specified clock frequency as shown for the --freqhz option syntax in v++ General Options.

v++ -l -t hw –platform <pfm_name> --freqhz=200000000:mm2s \
--freqhz=200000000:s2mm –config system.cfg
Tip: You can view the automation_summary_pre_synthesis.txt produced during the v++ --link command to verify the clock assignments for AI Engine kernels, and PL kernels in the system, as shown in the following figure.

In some cases, the clock frequency can only be achieved in some approximation to the specified --freqhz. In these cases you can specify the --clock.default_tolerance to indicate an acceptable range for the frequency. If the specified clock frequency can not be met within the acceptable tolerance, a warning is issued and the closest default clock is used.

You can refer to the automation_summary_pre_synthesis.txt report to identify the clock frequency used for compilation and linking. This report is generated at pre-synthesis step during linking, so you do not have to wait for the process to finish. In compilation, the specified clock frequency is used, but for linking the clock frequency is determined by the specified value, the clock tolerance, and the available clocks.

Platform clocks also have clock indexes which identify a specific clock ID, rather than simply the clock frequency. A clock ID defines a network path, including startpoints and endpoints in the platform design. To specify clocks in your designs you should generally use the --freqhz option, instead of clock ID. Specify the clock ID (--clock.ID) only when you want a common clock network for all IPs inserted by v++ along the path to this kernel.