Why isn't fixing the single worst path enough?
From PDVerse PnR Interview Handbook ยท pdVerse Mentor Guide
Short Answer
The worst path is only the first line of a long list. Behind it there are usually many paths within a few picoseconds, and they often share cells with it, so fixing one path leaves the rest failing or moves the problem to the next endpoint. You need the slack distribution and a report that covers every violating endpoint, not only the top path.
Technical Explanation
- By default
report_timing(PT) reports the single path with the worst setup slack among all path groups. That is one endpoint out of what may be thousands. - Slack is rarely spread evenly. In a failing design the worst path is usually the tip of a crowd, and if 400 paths sit within 20 ps of it, fixing the worst path gains almost nothing in TNS.
- Reconvergent logic means several paths share cells. Upsizing a cell on the worst path raises the load on its driver and can slow its neighbours, so the next report often shows a new worst path through the same region.
- Widen the report with
report_timing -nworst 1 -max_paths 1000 -slack_lesser_than 0(PT): one path per endpoint, up to 1,000 endpoints, violators only. In PT, once-max_pathsis above 1 only negative-slack paths are reported unless you raise-slack_lesser_than. - A small
-nworstvalue or a start and end pair search can miss reconvergent paths.report_timing -cover_design(PT) reports the worst path through each violating pin, which closes that gap. - Path-based analysis adds a twist: after recalculation the slack order can change, so the worst graph-based path to an endpoint is not always its worst recalculated path. The PT user guide warns that recalculating only the worst failing path does not give the endpoint's worst recalculated slack.
- Shared structures such as one weak driver, one long net or one slow cell appear in many failing paths.
report_bottleneck(PT) lists the leaf cells with the highest bottleneck cost, so a single change can clear dozens of endpoints, something a worst-path habit never shows. - TNS and the number of violating endpoints measure the size of the problem; WNS only measures its worst point. Both need to reach zero for closure, and planning the ECO around the distribution rather than the tip saves passes through the PrimeTime and ICC2 loop.
Common Mistake
The Trap: Fixing the top path, rerunning, fixing the new top path, and repeating. After a day WNS has improved a few picoseconds per step while TNS has barely moved, because each fix exposed the next path in the same crowd. A slack histogram at the start would have shown 600 endpoints within 25 ps of each other and pointed at a shared driver instead.
Follow-up Question & Model Response
"How would you find the fix that helps the most paths at once?"
Candidate Model Response: I would start with a report of the worst path to every violating endpoint, then look for cells and nets that appear in many of them. report_bottleneck (PT) does this, listing the leaf cells with the highest bottleneck cost, which means the cells shared by the most violations; the PT user guide asks for timing_save_pin_arrival_and_slack (PT) set to true before the first timing update. One upsized driver or one split high-fanout net can clear dozens of endpoints. Paths that remain after that are usually independent and can be fixed one by one with sizing. I would then re-run the same endpoint report to confirm that the crowd shrank, not just the top path.
Practical Example
Tapeout Scenario: After route, report_timing (PT) shows one path at โ48 ps. The endpoint report with -nworst 1 -max_paths 1000 lists 212 violating endpoints and TNS โ1.90 ns (illustrative): 1 worse than โ40 ps, 19 between โ40 and โ20 ps, and 192 between โ20 and 0 ps. Upsizing one cell on the worst path brings it to โ12 ps, but design WNS only moves to โ39 ps, the next path, and TNS to โ1.86 ns. report_bottleneck (PT) then puts one small buffer at the top: 160 of the 212 paths pass through it and the enable net it drives. Upsizing that driver and splitting the net clears 148 endpoints and brings TNS to โ0.31 ns, far more than the first fix.
PnR Flow Mentor Guide
Master the Physical Design Implementation Flow
Read the complete 8-chapter PnR Flow Mentor Guide free on the web โ library setup through placement, clock tree synthesis, routing, chip finishing, hierarchical implementation, and ECO, all the way to stream-out.

Continue practising