set_clock_uncertainty - 2023.1 English

Vivado Design Suite Tcl Command Reference Guide (UG835)

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

set clock uncertainty

Syntax

set_clock_uncertainty [‑setup] [‑hold] [‑from <args>] [‑rise_from <args>]
    [‑fall_from <args>] [‑to <args>] [‑rise_to <args>] [‑fall_to <args>]
    [‑quiet] [‑verbose] <uncertainty> [<objects>]

Usage

Name Description
[-setup] Specify clock uncertainty for setup checks
[-hold] Specify clock uncertainty for hold checks
[-from] Specify inter-clock uncertainty source clock
[-rise_from] Specify inter-clock uncertainty source clock with rising edge
[-fall_from] Specify inter-clock uncertainty source clock with falling edge
[-to] Specify inter-clock uncertainty destination clock
[-rise_to] Specify inter-clock uncertainty destination clock with rising edge
[-fall_to] Specify inter-clock uncertainty destination clock with falling edge
[-quiet] Ignore command errors
[-verbose] Suspend message limits during command execution
<uncertainty> Uncertainty of clock network
[<objects>] List of clocks, ports or pins

Categories

SDC, XDC

Description

This command is used to add to the uncertainty of a clock in the design, and does not override the default jitter calculation. This is referred to as the user clock uncertainty. The set_clock_uncertainty command provides a convenient means to over-constrain some clocks in the design without changing the clock definitions and relationships. It can constrain setup and hold paths separately using the -setup and -hold options.

Clock uncertainty is the maximum variation, specified in nanoseconds (ns), between two clock edges at registers within a single clock domain, or crossing between clock domains.

The clock uncertainty is used during setup and hold analysis, where uncertainty is calculated for each timing path based on the clock edges used by the analysis and the clock tree topology. For example, for a path where the startpoint and endpoint are connected to the same clock net, the clock uncertainty is null because the same clock edge is used for both source and destination, unless the set_clock_uncertainty command is used to add uncertainty for the min delay analysis. The Vivado® timing engine uses clock uncertainty in the slack calculation as determined by the following equation:

  • Setup Slack = Setup Path Requirement - Data Delay - Clock Uncertainty + Clock Skew

Clock Uncertainty is a function of different elements of jitter, as determined by the following equation which is returned by the report_timing_summary or report_timing commands:

  • Clock Uncertainty = (√(Tsj 2 + Dj 2))/2 + PE + UU

Where:

  • Tsj = Total System Jitter as calculated using the system jitter. See set_system_jitter.
  • Dj = Discrete jitter is the amount of jitter introduced by hardware primitives such as MMCM or PLL. Discrete jitter is a feature of clocks generated by the MMCM, which includes the input jitter defined on the primary clock. See set_input_jitter.
  • PE = Phase Error, which comes from the MMCM/PLL device model.
  • UU = User Uncertainty, which defines the user clock uncertainty specified by this set_clock_uncertainty command.
Tip: SYSTEM_JITTER is reported as a property of clocks, although it applies to all clocks in the design. INPUT_JITTER is also a property of primary clocks. These properties can be returned by the get_property or report_property commands. Jitter and clock uncertainty are reported by the report_timing_summary and report_timing commands.

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

Arguments

-setup - (Optional) The specified clock uncertainty is applied during setup checks.

-hold - (Optional) The specified clock uncertainty is applied during hold checks.

-from <source_clock_name> - (Optional) Specify inter-clock uncertainty source clock.

-rise_from <source_clock_name> - (Optional) Specify inter-clock uncertainty source clock with rising edge.

-fall_from <source_clock_name> - (Optional) Specify inter-clock uncertainty source clock with falling edge.

-to <destination_clock_name> - (Optional) Specify inter-clock uncertainty destination clock.

-rise_to <destination_clock_name> - (Optional) Specify inter-clock uncertainty destination clock with rising edge.

-fall_to <destination_clock_name> - (Optional) Specify inter-clock uncertainty destination clock with falling edge.

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

<uncertainty> - (Required) Uncertainty of the clock network, specified in nanoseconds.

<objects> - (Optional) List of clocks to define uncertainty for.

Examples

The following example defines the uncertainty between all clock domains:

set_clock_uncertainty 0.225 -from [get_clocks] -to [get_clocks]
The following command defines setup and hold uncertainty within the wbClk clock domain:
set_clock_uncertainty -setup 0.213 [get_clocks wbClk]
set_clock_uncertainty -hold 0.167 [get_clocks wbClk]