Unlike other XDC constraints, the set_max_delay and set_min_delay commands
can accept a list of invalid startpoints or endpoints when using the -from and -to options.
When an invalid startpoint is specified, the timing engine stops timing propagation through the node, treating it as a valid startpoint. This allows greater flexibility in defining timing paths.
In the following example, the only valid startpoint is FD1/C:
set_max_delay 5 -from [get_pins FD1/C]
If the constraint is applied to FD1/Q, the timing engine stops propagation through the C->Q arc, making pin Q a valid startpoint:
set_max_delay 5 -from [get_pins FD1/Q]
The process of stopping timing propagation to create a valid startpoint
is called path segmentation. Path segmentation applies to max and min delay analysis and
affects any timing constraint passing through segmented nodes, such as FD1/C and FD1/Q.
FD1/Q. This can lead to large skew, as the clock skew at
the endpoints is still included in the analysis.After path segmentation, there is no default hold requirement on the
path. Assuming the -datapath_only option is not been
specified, use the set_min_delay command to apply a
hold requirement if needed.
Because of the risks associated with path segmentation, the tool issues a critical warning when it occurs.
If you targeted the output FD1/Q as the
startpoint to avoid including clock skew, AMD recommends
using the -datapath_only option instead. Use the clock
pin of the sequential element as the startpoint and apply the constraint as follows:
set_max_delay 5 -from [get_pins FD1/C] -datapath_only
Similarly, when an invalid endpoint is specified, the timing engine stops propagation after that node, treating it as a valid endpoint.
In the following example, the max delay is applied to LUTA/O, which is not a valid endpoint:
set_max_delay 5 -from [get_pins LUTA/O]
This behavior is illustrated in the following figure.
To make LUTA/O a valid endpoint, the
timing engine stops propagation after LUTA/O. As a
result, all timing paths passing through LUTA/O are
affected for both setup and hold analysis. For a path that starts at REGA/C and ends at LUTA/O,
only the insertion delay of the launch clock is considered. This can lead to very large
skew.
Because path segmentation stops propagation through timing arcs, it can produce unexpected consequences. All timing paths that go through the segmented nodes are impacted.
In the following example, a max delay is set between LUTA/O and REGB/D:
set_max_delay 6 -from [get_pins LUTA/O] -to [get_pins REGB/D]
This is shown in the following figure.
Because the pin LUTA/O is not a valid
startpoint, a path segmentation occurs, and the timing arcs from LUTA/I* to LUTA/O are broken. Even though
the set_max_delay constraint was applied only between
LUTA/O and REGB/D,
other paths such as REGA/C to REGC/D, are still broken.