mirror of
https://github.com/The-OpenROAD-Project/OpenSTA.git
synced 2026-09-01 02:17:08 +02:00
+2
-2
@@ -359,7 +359,7 @@ Latches::latchOutArrival(const Path *data_path,
|
||||
arc_delay = search_->deratedDelay(data_vertex, d_q_arc, d_q_edge,
|
||||
false, min_max, dcalc_ap, sdc);
|
||||
q_arrival = delaySum(data_path->arrival(), arc_delay, this);
|
||||
// Copy the data tag but remove the drprClkPath.
|
||||
// Copy the data tag but remove the crprClkPath.
|
||||
// Levelization does not traverse latch D->Q edges, so in some cases
|
||||
// level(Q) < level(D)
|
||||
// Note that
|
||||
@@ -368,7 +368,7 @@ Latches::latchOutArrival(const Path *data_path,
|
||||
// level(crprClkPath(data)) == level(Q)
|
||||
// or some other downstream vertex.
|
||||
// This can lead to data races when finding arrivals at the same level
|
||||
// use multiple threads.
|
||||
// with multiple threads.
|
||||
// Kill the crprClklPath to be safe.
|
||||
const ClkInfo *data_clk_info = data_path->clkInfo(this);
|
||||
const ClkInfo *q_clk_info =
|
||||
|
||||
+2
-1
@@ -381,7 +381,8 @@ PathEnumFaninVisitor::visitEdge(const Pin *from_pin,
|
||||
Path *from_path = from_iter.next();
|
||||
const Mode *mode = from_path->mode(this);
|
||||
const Sdc *sdc = mode->sdc();
|
||||
if (pred_->searchFrom(from_vertex, mode) && pred_->searchThru(edge, mode)
|
||||
if (pred_->searchFrom(from_vertex, mode)
|
||||
&& pred_->searchThru(edge, mode)
|
||||
&& pred_->searchTo(to_vertex, mode)
|
||||
// Fanin paths are broken by path delay internal pin startpoints.
|
||||
&& !sdc->isPathDelayInternalFromBreak(to_pin)) {
|
||||
|
||||
+3
-3
@@ -95,9 +95,9 @@ 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);
|
||||
&& (sta_->variables()->dynamicLoopBreaking() || !edge->isDisabledLoop())
|
||||
&& (search_thru_latches_ || role->isLatchDtoQ()
|
||||
|| sta_->latches()->latchDtoQState(edge, mode) == LatchEnableState::open);
|
||||
}
|
||||
|
||||
bool
|
||||
|
||||
Reference in New Issue
Block a user