diff --git a/dcalc/GraphDelayCalc.cc b/dcalc/GraphDelayCalc.cc index 3c2162ce..8dbcfe47 100644 --- a/dcalc/GraphDelayCalc.cc +++ b/dcalc/GraphDelayCalc.cc @@ -686,7 +686,11 @@ GraphDelayCalc::findVertexDelay(Vertex *vertex, debugPrint(debug_, "delay_calc", 2, "find delays {} ({})", vertex->to_string(this), network_->cellName(network_->instance(pin))); - if (vertex->isRoot()) + if (vertex->isRoot() + // Bidirect port drivers are enqueued by their load vertex in + // annotateLoadDelays. + || (vertex->isBidirectDriver() + && network_->isTopLevelPort(pin))) seedRootSlew(vertex, arc_delay_calc); else { if (network_->isLeaf(pin)) { diff --git a/search/Search.cc b/search/Search.cc index a133f993..69be1f7f 100644 --- a/search/Search.cc +++ b/search/Search.cc @@ -96,6 +96,8 @@ EvalPred::searchThru(Edge *edge, { const TimingRole *role = edge->role(); return SearchPred0::searchThru(edge, mode) + && (sta_->variables()->dynamicLoopBreaking() + || !edge->isDisabledLoop()) && (search_thru_latches_ || role->isLatchDtoQ() || sta_->latches()->latchDtoQState(edge, mode) == LatchEnableState::open); @@ -2775,14 +2777,14 @@ Search::reportArrivals(Vertex *vertex, for (const Path *path : paths) { const Tag *tag = path->tag(this); const RiseFall *rf = tag->transition(); - bool report_prev = false; + bool report_prev = true; std::string prev_str; if (report_prev) { Path *prev_path = path->prevPath(); if (prev_path) { const Edge *prev_edge = path->prevEdge(this); TimingArc *arc = path->prevArc(this); - prev_str = sta::format("prev {} {} {} -> {} {}", + prev_str = sta::format(" prev {} {} {} -> {} {}", prev_path->to_string(this), prev_edge->from(graph_)->to_string(this), arc->fromEdge()->to_string(), @@ -2790,13 +2792,14 @@ Search::reportArrivals(Vertex *vertex, arc->toEdge()->to_string()); } else - prev_str = "prev NULL"; + prev_str = " prev NULL"; } report_->report(" {} {} {} / {} {}{}", rf->shortName(), path->minMax(this)->to_string(), delayAsString(path->arrival(), digits, this), delayAsString(path->required(), digits, this), - tag->to_string(report_tag_index, false, this), prev_str); + tag->to_string(report_tag_index, false, this), + prev_str); } } else