IntermediateQuestion 64 of 112Source: Synopsys PrimeTime User Guide: Specifying Timing Paths

How do you restrict a false path exception to only rising or falling clock edges?

From PDVerse STA Mentor Guide · pdVerse Mentor Guide

Short Answer

The plain -from/-to options in set_false_path (SDC) apply to a path regardless of which clock edge launches or captures it. Adding -rise_from, -fall_from, -rise_to, or -fall_to narrows the exception to only the paths that launch or are captured on that specific edge, leaving the opposite-edge paths through the same registers fully checked.

Technical Reference DiagramHow do you restrict a false path exception to only rising or falling clock edges?
One clock waveform with two register banks marked, one capturing on the rising edge and one on the falling edge, with -fall_to shown excluding only the falling-edge bank while the rising-edge bank keeps a visible slack value.

Technical Explanation

A register clocked by a single clock can still have separate rising-edge and falling-edge paths through it, and the edge-qualified options let you tell them apart.

  • Plain -from/-to treats both edges the same. set_false_path -to [get_clocks CLK] (SDC) declares every path ending at a register on CLK false, whether the capture happens on the rising or the falling edge.
  • The edge-qualified forms pick one edge only. set_false_path -rise_from [get_clocks CLK] only declares false the paths that launch on CLK's rising edge; paths launching on the falling edge of the same clock stay checked.
  • Why this matters on one clock with two edge roles: a design that uses the falling edge of CLK for one set of flip-flops and the rising edge for another can have a false condition on one edge's paths but a real, checked condition on the other edge's paths through related logic.
  • -fall_to and -fall_from mirror the rising-edge forms, restricting the exception to paths captured, or launched, on the falling edge specifically.
  • A clock-level exception without an edge qualifier is the wider, riskier default. Reach for the edge-qualified form whenever the false condition is genuinely tied to one edge's role in the design, not the clock as a whole.
  • Verify the result with report_exceptions (PT), which expands the edge-qualified exception to the exact pin pairs it reached, so you can confirm the opposite-edge paths were left untouched.

Common Mistake

The Trap: writing a plain -to [get_clocks CLK] false path to cover a falling-edge condition, without realizing the same command also silences every rising-edge path on that clock.

  • A designer wants to exclude only the falling-edge-captured paths on a dual-edge clock, but writes the command without -fall_to, assuming clock-level always means "this one role I'm thinking of".
  • The rising-edge paths through unrelated, fully synchronous registers on the same clock get silently excluded too, removing real coverage the designer never intended to give up.

Follow-up Question & Model Response

You add set_false_path -fall_to [get_clocks CLK] to a design. How would you double-check that the rising-edge paths on the same clock are still being checked?

Candidate Model Response: I would run report_exceptions (PT) to see the expanded list of pin pairs the falling-edge exception actually reached, confirming none of them are rising-edge captures. Separately, I would run report_timing -to [get_clocks CLK] (PT) and check that rising-edge paths still appear in the report with real slack values, rather than being missing or flagged as excluded. If a rising-edge path I expected to see is absent, that would tell me the exception reached further than the -fall_to qualifier should have allowed, and I would recheck the command's other options for an unintended overlap.

Practical Example

A clock CLK drives one bank of registers on its rising edge for normal datapath logic and a second bank on its falling edge for a legacy interface block whose falling-edge captures are known to be functionally irrelevant. The team applies set_false_path -fall_to [get_clocks CLK] (SDC), which report_exceptions (PT) confirms reaches only the legacy interface's falling-edge-captured paths. report_timing -to [get_clocks CLK] afterward still lists the rising-edge datapath paths with normal slack values, confirming the rising-edge bank was never affected by the falling-edge exception.

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