Sta update latest 0427#355
Conversation
…427) Signed-off-by: Drew Lewis <cannada@google.com>
…f fallback (#426) Signed-off-by: Drew Lewis <cannada@google.com>
Signed-off-by: James Cherry <cherry@parallaxsw.com>
Signed-off-by: James Cherry <cherry@parallaxsw.com>
Signed-off-by: James Cherry <cherry@parallaxsw.com>
Signed-off-by: James Cherry <cherry@parallaxsw.com>
Signed-off-by: James Cherry <cherry@parallaxsw.com>
Signed-off-by: James Cherry <cherry@parallaxsw.com>
Signed-off-by: James Cherry <cherry@parallaxsw.com>
Signed-off-by: dsengupta0628 <dsengupta@precisioninno.com>
Signed-off-by: dsengupta0628 <dsengupta@precisioninno.com>
|
|
There was a problem hiding this comment.
Code Review
This pull request introduces several refactorings and improvements to the OpenSTA codebase, including transitioning clock uncertainties from pointers to member objects, updating .clang-tidy configurations, and centralizing delay reporting within the Search class. It also adds a validation check for POCV/LVF models and refines SPEF lexing for identifiers. The review feedback points out critical compilation issues in Sta.hh due to missing includes and type aliases, identifies a recurring typo in the checkLibraryPocv function name, and suggests a logic improvement to avoid false-positive warnings when no libraries are loaded.
| #pragma once | ||
|
|
||
| #include <functional> | ||
| #include <map> |
There was a problem hiding this comment.
| using ParasiticsNameMap = std::map<std::string, Parasitics*, std::less<>>; | ||
| // Path::slack/arrival/required function. | ||
| using PathDelayFunc = std::function<Delay (const Path *path)>; | ||
| using GraphLoopSeq = std::vector<GraphLoop*>; |
There was a problem hiding this comment.
The PathDelayFunc and DelaysWrtClks type aliases are used in this header but are no longer defined here. They should be restored or the header that defines them must be included to ensure Sta.hh remains self-contained and compilable.
// Path::slack/arrival/required function.
using PathDelayFunc = std::function<Delay (const Path *path)>;
using DelaysWrtClks = std::map<const ClockEdge*, RiseFallMinMaxDelay>;
using GraphLoopSeq = std::vector<GraphLoop*>;There was a problem hiding this comment.
This header is in src/sta/, an upstream submodule, and we don't modify upstream files unless necessary
| Mode *mode, | ||
| Parasitics *parasitics); | ||
| void deleteScenes(); | ||
| void checkLibrarayPocv(); |
| delay_ops_ = new DelayOpsScalar(); | ||
| break; | ||
| case PocvMode::normal: | ||
| checkLibrarayPocv(); |
| delay_ops_ = new DelayOpsNormal(); | ||
| break; | ||
| case PocvMode::skew_normal: | ||
| checkLibrarayPocv(); |
| Sta::checkLibrarayPocv() | ||
| { | ||
| LibertyLibraryIterator *lib_iter = network_->libertyLibraryIterator(); | ||
| while (lib_iter->hasNext()) { | ||
| LibertyLibrary *lib = lib_iter->next(); | ||
| LibertyCellIterator cell_iter(lib); | ||
| while (cell_iter.hasNext()) { | ||
| LibertyCell *cell = cell_iter.next(); | ||
| for (const TimingArcSet *arc_set : cell->timingArcSets()) { | ||
| for (const TimingArc *arc : arc_set->arcs()) { | ||
| GateTableModel *gate_model = arc->gateTableModel(); | ||
| if (gate_model) { | ||
| const TableModels *models = gate_model->delayModels(); | ||
| if (models->sigma(EarlyLate::early()) != nullptr) { | ||
| delete lib_iter; | ||
| return; | ||
| } | ||
| } | ||
| } | ||
| } | ||
| } | ||
| } | ||
| delete lib_iter; | ||
| report_->warn(1578, "No liberty POCV/LVF models found."); | ||
| } |
There was a problem hiding this comment.
There is a typo in the function name (checkLibrarayPocv -> checkLibraryPocv). Additionally, the warning logic should be updated to avoid reporting 'No liberty POCV/LVF models found' when no libraries have been loaded yet, as this leads to false positives if the mode is set early in a script.
void
Sta::checkLibraryPocv()
{
bool any_lib = false;
LibertyLibraryIterator *lib_iter = network_->libertyLibraryIterator();
while (lib_iter->hasNext()) {
any_lib = true;
LibertyLibrary *lib = lib_iter->next();
LibertyCellIterator cell_iter(lib);
while (cell_iter.hasNext()) {
LibertyCell *cell = cell_iter.next();
for (const TimingArcSet *arc_set : cell->timingArcSets()) {
for (const TimingArc *arc : arc_set->arcs()) {
GateTableModel *gate_model = arc->gateTableModel();
if (gate_model) {
const TableModels *models = gate_model->delayModels();
if (models->sigma(EarlyLate::early()) != nullptr) {
delete lib_iter;
return;
}
}
}
}
}
}
delete lib_iter;
if (any_lib)
report_->warn(1578, "No liberty POCV/LVF models found.");
}
Merge latest upstream OSTA, update test infrastructure