BeginnerQuestion 53 of 95Source: Synopsys PrimeTime User Guide: Specifying Clocks

How do you tell PrimeTime that two clocks are asynchronous with set_clock_groups?

From PDVerse STA Mentor Guide ยท pdVerse Mentor Guide

Short Answer

set_clock_groups -asynchronous (SDC) tells the tool that the listed groups of clocks have no fixed timing relationship to each other at all, so it should not build a setup or hold check across any path between them. Paths within each group are still checked normally.

Technical Reference DiagramHow do you tell PrimeTime that two clocks are asynchronous with set_clock_groups?
Two clock domains, XTAL and USB, boxed separately with an X marked over the crossing path between them to show it is excluded from checking

Technical Explanation

Some clocks genuinely never share a stable phase relationship, and the SDC file has to say so explicitly.

  • What the tool assumes by default: without a set_clock_groups statement, the tool will still try to build a setup and hold relationship between any two clocks that share a path, even if those clocks come from unrelated crystal oscillators.
  • What -asynchronous changes: listing -group {CLK1} -group {CLK2} with the -asynchronous option (SDC) removes every cross-clock path between those two groups from setup and hold analysis, since no fixed edge relationship exists to check.
  • It does not remove the paths within a group: clocks placed in the same group are still fully checked against each other and against themselves โ€” the command only affects paths crossing between different groups.
  • A related option, -logically_exclusive: this marks clocks that can never be active at the same time at all, such as two clock sources feeding the same mux where only one path is ever selected, rather than clocks that run simultaneously but with no fixed phase.
  • Why this is not the same as a false path: set_false_path (SDC) removes one specific logic path from checking; set_clock_groups -asynchronous (SDC) removes every path between two entire clock domains in one statement, which is the right tool when the relationship itself, not just one path, is genuinely undefined.

Common Mistake

The Trap: leaving two genuinely unrelated clocks ungrouped and trusting a clean setup report.

  • A designer assumes that because no path between two independent oscillator domains ever shows up as a large violation, the crossing must be fine as-is.
  • Without set_clock_groups -asynchronous (SDC), the tool is still comparing two clocks that will drift in and out of phase over time using a snapshot relationship that is only true at one instant โ€” the report looks clean but is not describing real, ongoing behavior.

Follow-up Question & Model Response

If two asynchronous clocks are grouped, does the crossing signal need anything else in the design itself? Candidate Model Response: Yes โ€” set_clock_groups -asynchronous (SDC) only tells the static timing tool to stop checking a meaningless setup/hold relationship across that boundary. It does nothing to make the actual signal crossing safe in silicon. The design still needs real synchronization hardware, typically a chain of two or more flip-flops, so a signal changing near a capturing clock edge cannot cause the receiving flop to enter an unpredictable, unresolved state known as metastability.

Practical Example

A chip has a 24MHz crystal-driven domain (CLK_XTAL) and a 480MHz USB PHY domain (CLK_USB) with no shared source. The SDC file includes set_clock_groups -asynchronous -group {CLK_XTAL} -group {CLK_USB}, removing every cross-domain path from setup and hold checking.

Complete STA Handbook

Get the complete 10-chapter STA handbook covering setup/hold margins, clock modeling, OCV/POCV, crosstalk noise, and PrimeTime closure.

Timing Constraints (SDC) Handbook โ€” nine chaptersSDC ConstraintsNine chapters on clocks, exceptions, and constraint linting. โ†’