-
Notifications
You must be signed in to change notification settings - Fork 259
dcalc: CCS ReceiverModel accessors, converged-Ceff exposure, reportGateDelay crash fix, receiver-cap Ceff solve #384
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
saurav-fermions
wants to merge
5
commits into
The-OpenROAD-Project:master
Choose a base branch
from
Fermions-ASI:feat/ccs-delay
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
5 commits
Select commit
Hold shift + click to select a range
c1d75aa
OpenROAD-fork: ccs-delay -- read-only ReceiverModel capacitance acces…
saurav-fermions 2c6ffa1
ccs-delay2: expose converged CCS effective capacitance (read-only)
saurav-fermions 19dd7c2
ccs-delay-path: fix CcsCeffDelayCalc::reportGateDelay crash (Signal 11)
saurav-fermions 07d2dc1
ccs-receiver: use CCS receiver_capacitance in ccs_ceff Ceff solve (fl…
saurav-fermions e6e286c
dcalc: defensive null guards (address review)
saurav-fermions File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
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
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
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
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
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
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -446,6 +446,50 @@ ReceiverModel::checkAxes(const TableModel *table) | |
| && axis3 == nullptr); | ||
| } | ||
|
|
||
| // OpenROAD-fork: ccs-delay -- read-only accessors. These evaluate the CCS | ||
| // receiver-capacitance tables that OpenSTA already parses into | ||
| // capacitance_models_ but never consumes. They are used only by the additive | ||
| // OpenROAD report (report_ccs_receiver_delta); the NLDM delay path does not | ||
| // call them, so default/flag-off behavior is byte-identical to baseline. | ||
| const TableModel * | ||
| ReceiverModel::capacitanceModel(size_t segment, | ||
| const RiseFall *rf) const | ||
| { | ||
| if (rf == nullptr) | ||
| return nullptr; | ||
| const size_t idx = segment * RiseFall::index_count + rf->index(); | ||
|
Comment on lines
+457
to
+460
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. If the {
if (rf == nullptr)
return nullptr;
const size_t idx = segment * RiseFall::index_count + rf->index(); |
||
| if (idx >= capacitance_models_.size()) | ||
| return nullptr; | ||
| const TableModel &model = capacitance_models_[idx]; | ||
| // Empty (default-constructed) slots have no backing table. | ||
| if (model.table() == nullptr) | ||
| return nullptr; | ||
| return &model; | ||
| } | ||
|
|
||
| bool | ||
| ReceiverModel::hasCapacitanceModel(size_t segment, | ||
| const RiseFall *rf) const | ||
| { | ||
| return capacitanceModel(segment, rf) != nullptr; | ||
| } | ||
|
|
||
| float | ||
| ReceiverModel::capacitance(size_t segment, | ||
| const RiseFall *rf, | ||
| float in_slew, | ||
| float out_cap) const | ||
| { | ||
| const TableModel *model = capacitanceModel(segment, rf); | ||
| if (model == nullptr) | ||
| return 0.0f; | ||
| // ReceiverModel::checkAxes guarantees axis1 is input_net_transition (1D) or | ||
| // input_net_transition x total_output_net_capacitance (2D, canonicalized). | ||
| // Table::findValue ignores trailing args for lower-order tables, so passing | ||
| // (in_slew, out_cap, 0) is correct for both 1D and 2D receiver-cap tables. | ||
| return model->findValue(in_slew, out_cap, 0.0f); | ||
| } | ||
|
|
||
| //////////////////////////////////////////////////////////////// | ||
|
|
||
| CheckTableModel::CheckTableModel(LibertyCell *cell, | ||
|
|
||
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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The member variable
drvr_pin_is never initialized or assigned ingateDelay(). However, it is subsequently used on line 161 (pinPvt(drvr_pin_, scene, min_max)) and inwatchWaveform()(line 617). This results in undefined behavior or crashes due to dereferencing an uninitialized or stale pointer. Assigndrvr_pin_ = drvr_pin;at the beginning ofgateDelay()to resolve this.