What options does PrimeTime provide for filtering and reporting specific timing paths (through/from/to, nworst, path tagging), and why would you use path tagging for exhaustive PBA?
From PDVerse STA Mentor Guide, part of the pdVerse Mentor Guide
Short Answer
report_timing offers point-based filtering with -from, -to, and multiple -through arguments (order matters โ each -through is matched in sequence), count-based filtering with -nworst and -max_paths, and slack-based filtering with -slack_lesser_than. Path tagging is a separate feature: it marks a set of already-analyzed paths with a name, so a later exhaustive path-based analysis (PBA) run can skip re-analyzing paths already covered by an earlier, cheaper analysis mode, saving runtime on a technique that is otherwise expensive to run broadly.
Technical Explanation
-from,-to, and-through[PrimeTime:PT, on report_timing] scope which paths get reported by their pins, cells, ports, or clocks; multiple-througharguments in one command chain in the order given โreport_timing -from A1 -through B1 -through C1 -to D1(PT) means a path from A1 through B1, then through C1, in that order, ending at D1, not through C1 then B1.- Giving a
-throughargument a list, such as-through {B1 B2}, means the path passes through either B1 or B2 at that stage of the chain โ this is an OR within one-throughslot, while separate-througharguments are ANDed in sequence. -rise_from,-fall_from,-rise_to,-fall_through, and similar edge-qualified variants (PT) restrict reporting to only rising or only falling transitions at that point, useful when a design's worst case is known to depend on a specific edge polarity.-nworst N(PT) reports the N worst paths per endpoint, and-max_paths N(PT) caps the total number of paths reported across all endpoints combined โ the two compose, so-nworst 10 -max_paths 15reports up to 10 worst paths per endpoint but stops at 15 total.-slack_lesser_than(PT) filters to only paths whose slack is below a stated threshold, letting a report focus on genuinely marginal or violating paths instead of scrolling past comfortably-met ones.- Path tagging is enabled with
enable_path_tagging(PT) set to true (default false), andcreate_path_tag_set(PT) creates a named set of paths that have already been analyzed at a given confidence level;report_path_tag_set(PT) reports how many paths a given tag set contains. - Exhaustive PBA [PrimeTime:
-pba_mode exhaustive, PT, usable with] re-times every specific path with real, path-specific delays rather than the worst-case-per-stage graph-based estimate, which is far more accurate but also far more expensive to run broadly across a design; tagging lets successive exhaustive PBA runs skip paths a prior run already covered, so incremental signoff passes do not keep re-paying that cost on paths that have not changed.report_timingor get_timing_paths - What breaks: running exhaustive PBA repeatedly without path tagging on a large design re-analyzes the same already-confirmed paths every single pass, wasting runtime that tagging exists specifically to avoid.
Common Mistake
The Trap: assuming two -through arguments in one command mean "through either point, in any order," the same way a list inside a single -through does.
-through B1 -through C1requires the path to pass through B1 first and then C1 โ reversing the design intent (C1 actually comes first physically) silently returns zero matching paths, which can be mistaken for "no such violating path exists" rather than "the through order in the command is backward."- Enabling exhaustive PBA broadly without path tagging on a large design, expecting it to simply be "more accurate" with an acceptable one-time cost, ignores that the cost repeats on every subsequent signoff iteration unless tagging is used to skip already-analyzed paths.
Follow-up Question & Model Response
"A report_timing -through B1 -through C1 command that should match a known path returns nothing. Before assuming the path was fixed, what would you check?"
Candidate Model Response: I would first check whether the physical order of B1 and C1 along the real path matches the order given in the command, since -through arguments are matched in sequence and a reversed order returns no match even though a path genuinely passes through both points. I would also confirm B1 and C1 are specified precisely enough โ a pin versus a cell reference can behave differently in the match โ before concluding the path itself no longer exists in the design.
Practical Example
Worked case: to find the 5 worst violating paths overall on a design, report_timing -slack_lesser_than 0 -max_paths 5 (PT) filters straight to failing paths and caps the list. To confirm a specific bus-arbitration path is genuinely the worst behind two known mux stages, report_timing -from ARB/req -through MUX1/Z -through MUX2/Z -to ARB/grant -nworst 3 (PT) requires the physical order MUX1 then MUX2 and reports the 3 worst instances of that exact path shape. For a full signoff pass, enable_path_tagging true followed by create_path_tag_set [get_timing_paths -pba_mode exhaustive -slack_lesser_than 50] -name signoff_pass1 (PT) tags every path re-timed in this exhaustive pass so a later incremental exhaustive PBA run can skip them if nothing upstream changed.
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.
Offline PDF Bundle
Want all 1109 questions offline?
Get the complete 4-book PDF bundle (PnR, STA, MMMC, Low Power) with a clickable table of contents - no ads, no internet needed.

Continue practising