Commit efe551e
rsz: fix load cap computation in hold buffer insertion guard
In repairEndHold(), the buffer delay guard used loadCap() on the
wrong pin (end_vertex, a sink) to estimate the inserted buffer's
load capacitance. This returned near-zero cap, making the guard
trivially permissive and relying entirely on the post-insertion
journal rollback.
Replacing it with loadCap() on the driver pin (path_vertex) is
semantically more correct but overestimates the buffer load: it
includes the full pre-split net parasitics, which are absent on
the shorter post-split net. This causes buffer_delays to be
overestimated, valid hold buffer insertions to be rejected by
the guard, and consequently worse slew and capacitance slack.
Fix: compute load_cap directly as the sum of pin capacitances of
load_pins — the exact set of pins the inserted buffer will drive.
This avoids counting parasitics from net segments that will not
exist after splitting, giving an accurate and non-pessimistic
guard estimate.
Signed-off-by: Suhrid Marwah <suhridmarwah07@gmail.com>1 parent 33c72bf commit efe551e
1 file changed
Lines changed: 12 additions & 9 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
572 | 572 | | |
573 | 573 | | |
574 | 574 | | |
575 | | - | |
576 | 575 | | |
577 | 576 | | |
578 | 577 | | |
| |||
590 | 589 | | |
591 | 590 | | |
592 | 591 | | |
593 | | - | |
594 | | - | |
595 | | - | |
596 | | - | |
597 | | - | |
598 | 592 | | |
599 | 593 | | |
600 | 594 | | |
| |||
611 | 605 | | |
612 | 606 | | |
613 | 607 | | |
614 | | - | |
615 | | - | |
616 | | - | |
| 608 | + | |
| 609 | + | |
| 610 | + | |
| 611 | + | |
| 612 | + | |
| 613 | + | |
| 614 | + | |
| 615 | + | |
| 616 | + | |
| 617 | + | |
| 618 | + | |
| 619 | + | |
617 | 620 | | |
618 | 621 | | |
619 | 622 | | |
| |||
0 commit comments