IntermediateQuestion 59 of 112Source: Synopsys PrimeTime User Guide: Stopping Clock Propagation

How do you stop clock propagation at a specific pin with set_sense -stop_propagation?

From PDVerse STA Mentor Guide · pdVerse Mentor Guide

Short Answer

By default the tool keeps treating a signal as a clock through every downstream pin it can trace it to. When a clock-like signal legitimately feeds both real clock destinations and ordinary data logic — a test clock reused as a data mux input in some modes, for example — set_sense -type clock -stop_propagation tells the tool to stop treating it as a clock past that specific pin, so the rest of the fanout is analyzed as ordinary data.

Technical Reference DiagramHow do you stop clock propagation at a specific pin with set_sense -stop_propagation?
A test clock TESTCLK feeding mux UMUX2, whose output splits into a clock-pin branch to a scan flip-flop and a data branch to a combinational block, with a stop-propagation marker placed on the mux output pin.

Technical Explanation

Some cells in a clock-like network are not really part of clock distribution at all, and the tool needs to be told the clock signal stops there instead of continuing to propagate as a clock.

  • The tool normally keeps propagating a clock through every cell in its fanout, treating each downstream pin as still carrying clock timing unless told otherwise.
  • A test clock feeding a multiplexer that also drives ordinary data logic in some modes is a common case where that default is wrong. Once the signal leaves the clock's intended distribution point, continuing to treat it as a clock can create clock-like timing checks somewhere they do not belong.
  • set_sense -type clock -stop_propagation -clocks TESTCLK [get_pins UMUX2/Z] (SDC) tells the tool to stop treating the named clocks as clocks past that specific pin. Past that point, the signal reverts to being timed as ordinary data.
  • This is different from disabling a timing arc entirely with set_disable_timing (SDC). Stop-propagation only affects how the clock is treated going forward from that pin; the arc itself, and any real data-path timing through it, still gets analyzed normally.
  • Why it matters: getting this wrong either creates clock paths that should not exist, cluttering reports with meaningless checks, or misses a real data-path timing check on a signal the tool kept treating as a clock instead.

Common Mistake

The Trap: letting a test or auxiliary clock signal propagate as a clock through its entire fanout, including branches that are really ordinary data paths in the functional design.

  • Without stop-propagation at the right pin, the tool can generate clock timing checks on a branch that was never meant to be analyzed as a clock, cluttering reports with checks that have no real meaning.
  • The opposite failure, calling set_disable_timing on the whole arc instead of using stop-propagation, can remove a real data-path check that should still be analyzed, just not as a clock relationship.

Follow-up Question & Model Response

A test clock signal, TESTCLK, feeds a multiplexer whose output drives both a scan flip-flop's clock pin and, through a separate branch, an ordinary data input elsewhere in the design. How do you constrain this correctly?

Candidate Model Response: I would apply set_sense -type clock -stop_propagation -clocks [get_clocks TESTCLK] [get_pins MUX1/Z] (SDC) on the mux output pin so the clock stops propagating there, then let downstream data-path timing analysis handle the ordinary data branch normally. I would not use set_disable_timing on that arc, since the data branch still needs a real timing check — it should just no longer be evaluated as a clock relationship. I would confirm with report_clock (PT) that TESTCLK's propagated clock tree ends at MUX1/Z as intended, with no clock endpoints appearing further downstream on the data branch.

Practical Example

A test clock TESTCLK feeds mux UMUX2, whose output Z drives a scan flip-flop's clock pin in test mode and also connects, through a separate net, to a data input on an unrelated combinational block. The team applies set_sense -type clock -stop_propagation -clocks TESTCLK [get_pins UMUX2/Z] (SDC). After the change, report_clock (PT) shows TESTCLK's clock tree ending cleanly at UMUX2/Z, and the separate data branch is now timed as an ordinary reg2reg or in2reg path instead of generating a spurious clock-to-clock check that had no physical meaning.

Complete STA Handbook

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

VLSI Physical Design Planning Handbook — fourteen chaptersDesign PlanningFourteen chapters, floorplanning through timing budgets. →