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 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_througharguments 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 Aand a separateset_false_path -through Bwritten 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
-throughpoints) or "either of these two routes is false" (two separate commands). set_false_pathcombined with other exception types follows the tool's own exception-type priority โset_false_pathoutranksset_max_delay/set_min_delay, which outranksset_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-toobject types across the AND-chained points also matters: a-throughon a clock object ranks lower in path-specification priority than a-throughon a pin, so a broad clock-level-throughinside a chain can still be overridden for the specific pins that a more precise command also names. - What breaks: writing several
-throughpoints 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
-throughpoints, 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
Master Signoff-Ready Static Timing Analysis
Get the complete 10-chapter STA handbook covering setup/hold margins, clock modeling, OCV/POCV, crosstalk noise, and PrimeTime closure.

Continue practising