rsz: remove buffer insertion limit during parasitics estimation - #11151
rsz: remove buffer insertion limit during parasitics estimation#11151oharboe wants to merge 3 commits into
Conversation
There was a problem hiding this comment.
Code Review
This pull request introduces an is_estimation flag to the repairDesign methods in Resizer and RepairDesign to bypass the buffer insertion limit during estimation phases. The review feedback highlights a critical issue where buffer_gain (a double) is implicitly cast to initial_sizing (a bool) in an overloaded method call, which is highly error-prone. Additionally, it is suggested to simplify the bypass logic in the buffer insertion loop by checking !is_estimation directly instead of using std::numeric_limits<int>::max().
4a93957 to
73b1ef4
Compare
Global placement can generate topologies with exceptionally high fanout (e.g., synchronous reset networks in MegaBoom or CoralNPU), causing OpenSTA to stall computing delay on massive unbuffered RC nets. repair_design is invoked as a pre-processing step to linearize delay computation. The default hard limit of 5,000 buffers causes it to silently bail out on large networks, defeating the estimation pass and resulting in severely pessimistic and inaccurate timing-driven placement. This bypasses the buffer limit when repairDesign is called in estimation mode, enabling complete linearization and significantly faster, more accurate timing estimation for large designs. Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
73b1ef4 to
80b2ae6
Compare
|
/gemini review |
There was a problem hiding this comment.
Code Review
This pull request introduces an is_estimation flag to the repairDesign methods in Resizer and RepairDesign to bypass the maximum allowed buffer check during estimation phases. The reviewer feedback highlights a critical backward-compatibility issue: adding is_estimation before verbose (which has a default value) in the parameter list can cause existing callers passing five arguments to silently map their verbose argument to is_estimation. To prevent this, the reviewer recommends reordering the parameters so that is_estimation is placed after verbose across all declarations, definitions, and call sites.
Defaulted is_estimation ahead of verbose could silently remap the positional verbose argument of existing callers onto is_estimation. Place is_estimation last and require both flags explicitly so any stale call site fails to compile instead of changing behavior. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
|
/gemini review |
There was a problem hiding this comment.
Code Review
This pull request introduces a new is_estimation boolean parameter to the repairDesign methods in both the Resizer and RepairDesign classes, allowing the buffer limit check to be bypassed during estimation runs. The reviewer suggests providing a default value of false for this new parameter in both class definitions to maintain backward compatibility and prevent compilation failures for existing callers.
Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
Global placement can generate topologies with exceptionally high fanout (e.g., synchronous reset networks in MegaBoom or CoralNPU), causing OpenSTA to stall computing delay on massive unbuffered RC nets.
repair_designis invoked as a pre-processing step to linearize delay computation. The default hard limit of 5,000 buffers causes it to silently bail out on large networks, defeating the estimation pass and resulting in severely pessimistic and inaccurate timing-driven placement.This bypasses the buffer limit when
repairDesignis called in estimation mode, enabling complete linearization and significantly faster, more accurate timing estimation for large designs.Alternatives considered
repair_designflow as well: out of scope here; the cap remains as a zero-config futility guard for user-invoked repair.enum classmode instead of abool: a single internal caller sets it and there is no third mode to express; an enum adds API surface without distinguishing anything.SetAndRestore) onRepairDesigninstead of threading a parameter: the parameter keeps the mode visible at each call site through the overload chain.verbosecan silently remap positional arguments of existing callers. All call sites now pass both flags explicitly, so a stale caller fails to compile instead of changing behavior.