set_clock_groups - 2023.1 English

Vivado Design Suite Tcl Command Reference Guide (UG835)

Document ID
UG835
Release Date
2023-05-16
Version
2023.1 English

Set exclusive or asynchronous clock groups

Syntax

set_clock_groups [‑name <arg>] [‑logically_exclusive]
    [‑physically_exclusive] [‑asynchronous] [‑group <args>] [‑quiet]
    [‑verbose]

Usage

Name Description
[-name] Name for clock grouping
[-logically_exclusive] Specify logically exclusive clock groups
[-physically_exclusive] Specify physically exclusive clock groups
[-asynchronous] Specify asynchronous clock groups
[-group] Clocks List
[-quiet] Ignore command errors
[-verbose] Suspend message limits during command execution

Categories

SDC, XDC

Description

Tip: The XDC > Timing Constraints language templates and the Timing Constraints Wizard in the Vivado® IDE offer timing diagrams and additional details around defining specific timing constraints. You can refer to these sources for additional information.

Define clocks, or groups of clocks, that are exclusive with or asynchronous to other clocks in the design. Exclusive clocks are not active at the same time, and paths between them can be ignored during timing analysis. Asynchronous clocks are clocks with no known phase relationship, which typically happens when they do not share the same primary clock or do not have a common period.

Using this command is similar to defining false path constraints for data paths moving between exclusive or asynchronous clock domains. See the Vivado Design Suite User Guide: Using Constraints (UG903) for more information.

If only one group is specified, the clocks in that group are asynchronous or exclusive to all other clocks in the design, but not to each other. If a new clock is created after the set_clock_groups command, it is asynchronous to that group as well.

This command can also be used for multiple clocks that are derived from a single BUFGMUX as both of the clocks will not be active at the same time.

Note: This command operates silently and does not return direct feedback of its operation.

Arguments

-name <group_name> - (Optional) Name of the clock group to be created. A name will be automatically assigned if one is not specified.

-logically_exclusive - (Optional) The specified clocks are logically exclusive.

Note: -logically_exclusive, -physically_exclusive and -asynchronous are mutually exclusive arguments.

-physically_exclusive - (Optional) The specified clocks are physically exclusive, and cannot exist in the design at the same time.

-asynchronous - (Optional) The specified clocks are asynchronous to one another.

-group <args> - (Optional) The list of clocks to be included in the clock group. Each group of clocks is exclusive with or asynchronous with the clocks specified in all other groups.

Tip: If only one group of clocks is specified, that group is exclusive with or asynchronous to all other clocks in the design. Clocks can be specified by name, or as clock objects returned by the get_clocks command.
-quiet - (Optional) Execute the command quietly, returning no messages from the command. The command also returns TCL_OK regardless of any errors encountered during execution.
Note: Any errors encountered on the command-line, while launching the command, will be returned. Only errors occurring inside the command will be trapped.
-verbose - (Optional) Temporarily override any message limits and return all messages from this command.
Note: Message limits can be defined with the set_msg_config command.

Examples

Group all the elements driven by src_clk and sync_clk into separate clock groups. The clock groups are asynchronous to each other:

set_clock_groups -group src_clk -group sync_clk -asynchronous

The following example includes the generated clocks of the specified clocks, and adds those to the clock group:

set_clock_groups -group [get_clocks -include_generated_clocks src_clk] \
-group [get_clocks -include_generated_clocks sync_clk]  -asynchronous
Note: In the preceding example, src_clk and sync_clk, and all their generated clocks, are asynchronous. Otherwise the generated clocks would be timed against each other and the other master clock.

In this example, the specified clocks are grouped together, and are asynchronous to all other clocks in the design:

set_clock_groups -async -group [get_clocks {J_CLK U_CLK}]