ExpertQuestion 48 of 69Source: Synopsys PrimeTime User Guide: Timing Paths and Exceptions

How do -through points combine across multiple set_false_path commands, and why is that different from listing several -through points in one command?

From PDVerse STA Mentor Guide ยท pdVerse Mentor Guide

Short Answer

Every -through point inside a single set_false_path (SDC) command must be crossed, in the order given, for that command to match a path โ€” it behaves like an AND across the list. Two separate set_false_path commands, each with its own -through point, instead act like an OR: a path is false if it matches either command's full requirement, not only if it satisfies both commands' through-points together.

Technical Reference DiagramHow do -through points combine across multiple set_false_path commands, and why is that different from listing several -through points in one command?
Three false-path scenarios: one set_false_path command with three chained -through points matching zero paths, versus three separate set_false_path commands each excluding its own mux route M1, M2, M3

Technical Explanation

  • set_false_path -through A -through B -through C (SDC) requires a single path to pass through A, then B, then C, in that listed order โ€” a path through only A and C, skipping B, does not match this command at all.
  • Multiple -through, -rise_through, and -fall_through arguments can appear in one command precisely to build this ordered, all-must-match chain for one specific routing through the design.
  • By contrast, set_false_path -through A and a separate set_false_path -through B written as two commands each independently mark any path through A as false, and any path through B as false โ€” a path only needs to match one of the two commands to be excluded.
  • This means combining exceptions correctly depends on whether the goal is "this one specific multi-point route is false" (one command, several -through points) or "either of these two routes is false" (two separate commands).
  • set_false_path combined with other exception types follows the tool's own exception-type priority โ€” set_false_path outranks set_max_delay/set_min_delay, which outranks set_multicycle_path โ€” so a path matching both a false-path command and a multicycle command anywhere in its route is simply excluded; the multicycle setting is ignored for that path.
  • Mixing -from, -through, and -to object types across the AND-chained points also matters: a -through on a clock object ranks lower in path-specification priority than a -through on a pin, so a broad clock-level -through inside a chain can still be overridden for the specific pins that a more precise command also names.
  • What breaks: writing several -through points inside one command when the actual intent was "exclude either of these routes" produces a command that matches almost nothing, because real paths rarely cross every listed point in strict sequence โ€” the false path silently fails to exclude what it was meant to.

Common Mistake

The Trap: Assuming that listing multiple -through points in one set_false_path command is equivalent to writing them as separate commands, when the two forms have opposite (AND versus OR) matching behavior.

  • A designer trying to exclude two independent, unrelated routes writes one command with two -through points, expecting either route to be excluded โ€” but the command only matches paths crossing both points in sequence, so almost nothing gets excluded.
  • The mistake is invisible in the SDC itself; it only shows up as timing violations on paths the engineer believed were already declared false.

Follow-up Question & Model Response

"If I have three separate route segments that each individually need to be excluded, how do I write that instead of accidentally chaining them?"

Candidate Model Response: Write three independent set_false_path -through [segment] (SDC) commands, one per route, so each command's requirement can be satisfied on its own โ€” that reproduces the OR relationship the intent actually needs. Reserve a single command with multiple -through points for the one case where a path genuinely must cross all of those points, in that order, to be the specific route being excluded. Running report_exceptions -from [startpoint] (PT) afterward on a representative path from each intended route confirms each one is now actually marked false, rather than trusting the SDC syntax alone.

Practical Example

A design has three independent scan-mux bypass routes feeding a shared bus: route 1 through mux M1, route 2 through mux M2, and route 3 through mux M3, none of which share any other point in common. Written as set_false_path -through M1 -through M2 -through M3 (one command), the exception matches zero real paths, because no single path crosses all three muxes in sequence. Rewritten as three commands โ€” set_false_path -through M1, set_false_path -through M2, set_false_path -through M3 โ€” report_exceptions confirms all three routes are individually excluded, and the setup violations that had appeared on M2 and M3's paths disappear.

Complete STA Handbook

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

Static Timing Analysis (STA) Handbook โ€” ten chaptersSTA HandbookTen chapters on setup, hold, OCV, and PrimeTime signoff. โ†’