Compare commits
3 Commits
0a230da4df
...
d8a87863aa
| Author | SHA1 | Date |
|---|---|---|
|
|
d8a87863aa | |
|
|
7539c7372d | |
|
|
8f8f397610 |
|
|
@ -886,11 +886,17 @@ SdcNetwork::findNetRelative(const Instance *inst,
|
|||
{
|
||||
Net *net = network_->findNetRelative(inst, path_name);
|
||||
if (net == nullptr) {
|
||||
string path_name1 = escapeBrackets(path_name, this);
|
||||
string path_name1 = escapeDividers(path_name, network_);
|
||||
net = network_->findNetRelative(inst, path_name1.c_str());
|
||||
|
||||
if (net == nullptr) {
|
||||
string path_name2 = escapeDividers(path_name1.c_str(), network_);
|
||||
string path_name2 = escapeBrackets(path_name, network_);
|
||||
net = network_->findNetRelative(inst, path_name2.c_str());
|
||||
|
||||
if (net == nullptr) {
|
||||
string path_name3 = escapeDividers(path_name2.c_str(), network_);
|
||||
net = network_->findNetRelative(inst, path_name3.c_str());
|
||||
}
|
||||
}
|
||||
}
|
||||
return net;
|
||||
|
|
|
|||
|
|
@ -458,7 +458,8 @@ SpefReader::findParasiticNode(char *name,
|
|||
if (pin) {
|
||||
if (local_only
|
||||
&& !network_->isConnected(net_, pin))
|
||||
warn(1651, "%s not connected to net %s.", name1, network_->pathName(net_));
|
||||
warn(1651, "%s not connected to net %s.",
|
||||
name1, sdc_network_->pathName(net_));
|
||||
return parasitics_->ensureParasiticNode(parasitic_, pin, network_);
|
||||
}
|
||||
else {
|
||||
|
|
|
|||
|
|
@ -1074,7 +1074,8 @@ Search::findArrivals1(Level level)
|
|||
Stats stats(debug_, report_);
|
||||
int arrival_count = arrival_iter_->visitParallel(level, arrival_visitor_);
|
||||
deleteTagsPrev();
|
||||
deleteUnusedTagGroups();
|
||||
if (arrival_count > 0)
|
||||
deleteUnusedTagGroups();
|
||||
stats.report("Find arrivals");
|
||||
if (arrival_iter_->empty()
|
||||
&& invalid_arrivals_->empty()) {
|
||||
|
|
|
|||
|
|
@ -3196,24 +3196,30 @@ Sta::findRequired(Vertex *vertex)
|
|||
{
|
||||
searchPreamble();
|
||||
search_->findAllArrivals();
|
||||
search_->findRequireds(vertex->level());
|
||||
if (variables_->crprEnabled()
|
||||
&& search_->crprPathPruningEnabled()
|
||||
&& !search_->crprApproxMissingRequireds()
|
||||
// Clocks invariably have requireds that are pruned but it isn't
|
||||
// worth finding arrivals and requireds all over again for
|
||||
// the entire fanout of the clock.
|
||||
&& !search_->isClock(vertex)) {
|
||||
// Invalidate arrivals and requireds and disable
|
||||
// path pruning on fanout vertices with DFS.
|
||||
int fanout = 0;
|
||||
disableFanoutCrprPruning(vertex, fanout);
|
||||
debugPrint(debug_, "search", 1, "resurrect pruned required %s fanout %d",
|
||||
vertex->to_string(this).c_str(),
|
||||
fanout);
|
||||
// Find fanout arrivals and requireds with pruning disabled.
|
||||
search_->findArrivals();
|
||||
if (search_->isEndpoint(vertex)
|
||||
// Need to include downstream required times if there is fanout.
|
||||
&& !hasFanout(vertex, search_->searchAdj(), graph_))
|
||||
search_->seedRequired(vertex);
|
||||
else {
|
||||
search_->findRequireds(vertex->level());
|
||||
if (variables_->crprEnabled()
|
||||
&& search_->crprPathPruningEnabled()
|
||||
&& !search_->crprApproxMissingRequireds()
|
||||
// Clocks invariably have requireds that are pruned but it isn't
|
||||
// worth finding arrivals and requireds all over again for
|
||||
// the entire fanout of the clock.
|
||||
&& !search_->isClock(vertex)) {
|
||||
// Invalidate arrivals and requireds and disable
|
||||
// path pruning on fanout vertices with DFS.
|
||||
int fanout = 0;
|
||||
disableFanoutCrprPruning(vertex, fanout);
|
||||
debugPrint(debug_, "search", 1, "resurrect pruned required %s fanout %d",
|
||||
vertex->to_string(this).c_str(),
|
||||
fanout);
|
||||
// Find fanout arrivals and requireds with pruning disabled.
|
||||
search_->findArrivals();
|
||||
search_->findRequireds(vertex->level());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue