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 or clocks |
[-rise_from]
|
Apply to paths rising from the list of startpoints or clocks |
[-fall_from]
|
Apply to paths falling from the list of startpoints or clocks |
[-to]
|
List of path endpoints or clocks |
[-rise_to]
|
Apply to paths with rise transition at the list of endpoints or clocks |
[-fall_to]
|
Apply to paths with fall transition at the list of endpoints or clocks |
[-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
Description
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.
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.
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>
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.
-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.
-verbose
- (Optional) Temporarily override any message limits and return all messages from this command.
set_msg_config
command.<value> - Specifies the value of the acceptable bus skew in nanoseconds.
Examples
set_bus_skew -from [get_pins gray_coded_read_ptr[*]/C] \
-to [get_pins gray_coded_write_ptr[*]/D] 2.5