set_bus_skew - 2023.2 English

Vivado Design Suite Tcl Command Reference Guide (UG835)

Document ID
UG835
Release Date
2023-10-18
Version
2023.2 English

Define bus skew

Syntax

set_bus_skew [‑from <args>] [‑rise_from <args>] [‑fall_from <args>]
    [‑to <args>] [‑rise_to <args>] [‑fall_to <args>] [‑through <args>]
    [‑rise_through <args>] [‑fall_through <args>] [‑quiet] [‑verbose]
    <value>

Usage

Name Description
[-from] List of path startpoints
[-rise_from] Apply to paths rising from the list of startpoints
[-fall_from] Apply to paths falling from the list of startpoints
[-to] List of path endpoints
[-rise_to] Apply to paths with rise transition at the list of endpoints
[-fall_to] Apply to paths with fall transition at the list of endpoints
[-through] List of through pins, cells or nets
[-rise_through] Apply to paths rising through pins, cells or nets
[-fall_through] Apply to paths falling through pins, cells or nets
[-quiet] Ignore command errors
[-verbose] Suspend message limits during command execution
<value> Constraint value

Categories

XDC

Description

Set the bus skew requirement on bus signals that cross clock domains. The bus skew constraint defines the maximum skew spread between the fastest and slowest signals of the bus, and does not consider the overall datapath delay. The Vivado™ router will try to satisfy the set_bus_skew constraints. Example uses of the bus skew constraint include clock domain crossing for gray-coded pointers, MUX-controlled and MUX-data holding CDC buses.

Tip: Bus skew constraints are not overridden by clock groups, max delay, or false path, because set_bus_skew is a constraint between the signals of a bus, rather than on a particular path.

The set_bus_skew constraint can be combined with the set_max_delay constraint for good results. The set_bus_skew constraint does not care about the absolute datapath delay, but only about the relative arrival times of data at the destination, taking into account source and destination clock skew. You can help set_bus_skew by also using set_max_delay -datapath_only <SRC_CLK>. This constraint helps the Vivado™ placer to ensure that the source and destination registers are not placed too far apart, so that the router can more easily satisfy the set_bus_skew constraint. Refer to the Vivado Design Suite User Guide: Using Constraints (UG903) for more information.

In order to not over constrain the skew requirement, the bus skew value should be approximately the smallest period of the two clock domains. This will prevent multiple data captures by the destination clock domain.

The set_bus_skew command requires a timing path defined by both -from and -to, or some form such as -fall_from or -rise_to. You can optionally specify -through values to further refine the path. You should specify explicit signal paths with -from/-to instead of specifying entire clock domains:

  • set_bus_skew -from [get_pins <hierarchy/C>] -to [get_pins <hierarchy/D>] <value>
  • set_bus_skew -from [get_clocks <clock name>] -to get_clocks <clock name>] <value>
Tip: Do not set bus skew constraints between timed synchronous clock domains.

You can use the report_bus_skew command to report the calculated skew on paths in the current design.

The set_bus_skew command returns nothing if successful, or an error if it fails.

Arguments

-from <args> - (Optional) The starting points of the timing paths to set bus skew on. Pins or cells can be specified as timing path startpoints. You can also specify a clock object, and all startpoints clocked by the named clock will be analyzed.

Important: Although the various -from, -to, and -through arguments are listed as optional, a path must be defined using a form of the -from and -to arguments.

-rise_from <args> - (Optional) Set bus skew on the timing paths with rising edge transitions at the specified startpoints. If a clock object is specified, only the paths launched by the rising edge of the clock are considered as startpoints.

-fall_from <args> - (Optional) Set bus skew on the timing paths with falling edge transitions at the specified startpoints. If a clock object is specified, only the paths launched by the falling edge of the clock are considered as startpoints.

-to <args> - (Optional) The endpoints, or destination objects of timing paths to define the bus skew on. Pins or cells can be specified as endpoints. A clock object can also be specified, in which case endpoints clocked by the named clock are analyzed.

-rise_to <args> - (Optional) Set bus skew on the timing paths with rising edge transitions at the specified endpoints. If a clock object is specified, only the paths captured by the rising edge of the named clock are considered as endpoints.

-fall_to <args> - (Optional) Set bus skew on the timing paths with falling edge transitions at the specified endpoints. If a clock object is specified, only the paths captured by the falling edge of the named clock are considered as endpoints.

-through <args> - (Optional) Set bus skew only on paths through the specified pins, cell instance, or nets. You can specify individual -through (or -rise_through and -fall_through) points in sequence to define a specific path through the design. The order of the through points is important to define a path. You can also specify through points with multiple objects, in which case the timing path can pass through any of the specified through objects.

-rise_through <args> - (Optional) Set bus skew on the timing paths with rising edge transitions at the specified through points.

-fall_through <args> - (Optional) Set bus skew on the timing paths with falling edge transitions at the specified through points.

-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.

<value> - Specifies the value of the acceptable bus skew in nanoseconds.

Examples

The following example defines the bus skew between the gray-coded Read and Write pointers:

set_bus_skew -from [get_pins gray_coded_read_ptr[*]/C] \
   -to [get_pins gray_coded_write_ptr[*]/D] 2.5