search: POCV per-stage sigma holder + LVF variance injection + LVF-library gate (stacks on #383)#385
Open
saurav-fermions wants to merge 6 commits into
Open
Conversation
Add a flag-gated hook (AocvDepthDerate interface + Search::deratedDelayData) so the OCV derate applied to data-path combinational arcs during forward arrival propagation can be selected by the path's accumulated combinational depth instead of the flat SDC factor. When no hook is installed (the default) deratedDelayData forwards verbatim to deratedDelay, so timing is byte-identical to upstream. Only data-path combinational cell arcs are depth-derated; clock/reg/latch/check arcs keep the flat derate. Depth is the count of combinational arcs on the live from_path prev chain + 1. All edits marked // OpenROAD-fork: AOCV. clang-format not run on src/sta/*. Signed-off-by: Saurav Singh <saurav.singh@fermions.co>
Add Parasitics::setCapacitorValue (default no-op) and a ConcreteParasitics override / ConcreteParasiticDevice::setValue so the OpenROAD timing-window aware coupling derate can scale individual coupling caps. Only invoked from the OpenROAD window path; stock OpenSTA behavior is unchanged. Signed-off-by: Saurav Singh <saurav.singh@fermions.co>
|
|
|
Warning Gemini encountered an error creating the review. You can try again by commenting |
… review) Return early on a null ParasiticCapacitor instead of dereferencing it. Signed-off-by: Saurav Singh <saurav.singh@fermions.co>
Add a default-OFF Search::PocvSigma state holder (enabled, per-stage sigma fraction, n_sigma, active()) plus inline pocvSigma()/setPocvSigma() accessors and a pocv_sigma_ member. This is read ONLY by the OpenROAD-side report-only POCV command (report_checks_pocv / pocvAdjustPathEnd in src/dbSta); no forward-search / arrival-propagation code reads it, so with POCV inactive (the default) timing is byte-identical to upstream. Parametric POCV variation combines in quadrature (root-sum-square), which does not compose with the additive arrival sum the search propagates, so POCV is intentionally NOT a propagation hook (unlike AOCV). See POCV_INVESTIGATION.md. Header-only edit, marked // OpenROAD-fork: POCV. clang-format not run on src/sta/*. Signed-off-by: Saurav Singh <saurav.singh@fermions.co>
…ce injection Inject the synthetic per-stage POCV sigma (k*d_i)^2 into combinational data-path arc delays inside deratedDelayData when PocvSigma is in -propagate mode. The native statistical delay-ops (DelayOpsNormal) then accumulate the variance in quadrature through delaySum during the forward search, and report arrival +/- n_sigma*sqrt(variance) at the checks. - Search.hh: add PocvSigma::propagate flag + propagateActive() gate. - Search.cc: factor the scalar (mean) data-path derate into deratedDelayDataMean; deratedDelayData layers the synthetic variance on top without changing the mean. Default OFF (propagate=false) and scalar PocvMode => zero variance => timing is byte-identical to baseline. Signed-off-by: Saurav Singh <saurav.singh@fermions.co>
Add PocvSigma::from_liberty so set_pocv_sigma -from_liberty sources the per-stage delay sigma from the real Liberty LVF ocv_sigma_* tables via the native statistical delay calc (GateTableModel::gateDelayPocv under PocvMode::normal) instead of the synthetic global per_stage. In this mode propagateActive() returns false so the synthetic (k*d) injection in Search::deratedDelayData is suppressed and cannot overwrite the library-derived stdDev. Default from_liberty=false keeps the existing -propagate/-sigma behaviour and a byte-identical flag-off baseline. Signed-off-by: Saurav Singh <saurav.singh@fermions.co>
95feabe to
f41a799
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds a parametric statistical-OCV (POCV / LVF) capability in three layered, default-OFF slices. With POCV inactive, timing is byte-identical to upstream.
1. POCV per-stage sigma state holder (
Search.hh)Adds a default-OFF
Search::PocvSigmastate holder (enabled, per-stage sigma fraction, n_sigma,active()) plus inlinepocvSigma()/setPocvSigma()accessors and apocv_sigma_member. Read only by an external report-only POCV command; no forward-search code reads it. Parametric POCV variation combines in quadrature (root-sum-square), which does not compose with the additive arrival sum the search propagates, so this holder is intentionally not a propagation hook.2. LVF propagation-time variance injection (
Search.cc,Search.hh)Injects the synthetic per-stage POCV sigma
(k*d_i)^2into combinational data-path arc delays insidederatedDelayDatawhenPocvSigmais in-propagatemode. The native statistical delay-ops (DelayOpsNormal) then accumulate the variance in quadrature throughdelaySumduring the forward search, reporting arrival ± n_sigma·sqrt(variance). Factors the scalar (mean) data-path derate intoderatedDelayDataMean; layers variance on top without changing the mean. Default OFF → zero variance → byte-identical baseline.3. LVF-lib library-driven POCV gate (
Search.hh)Adds
PocvSigma::from_libertysoset_pocv_sigma -from_libertysources the per-stage delay sigma from real Liberty LVFocv_sigma_*tables via the native statistical delay calc (GateTableModel::gateDelayPocvunderPocvMode::normal) instead of the synthetic global per_stage. In this modepropagateActive()returns false so the synthetic(k*d)injection is suppressed and cannot overwrite the library-derived stdDev. Defaultfrom_liberty=falsekeeps the-propagate/-sigmabehavior and a byte-identical flag-off baseline.This is a stacked PR on top of #383. It layers directly on the
deratedDelayDatahook that #383 introduces (patch 2 splits it intoderatedDelayDataMean+ variance). GitHub will show the two #383 commits here until that PR merges; after it merges I'll rebase this ontomasterand only the three POCV commits will remain. Please review/merge #383 first.Testing
tcl.power.vcd_detailed) is a pre-existing last-digit floating-point rounding diff in the power module that fails identically on unmodifiedmaster(unrelated to this change).from_liberty=falsebyte-identical baseline.Notes
clang-formatintentionally not run onsrc/sta/*per project convention.