diff --git a/dcalc/GraphDelayCalc.cc b/dcalc/GraphDelayCalc.cc index 5b7af80b..b2d43242 100644 --- a/dcalc/GraphDelayCalc.cc +++ b/dcalc/GraphDelayCalc.cc @@ -47,6 +47,7 @@ #include "Sdc.hh" #include "Scene.hh" #include "SearchPred.hh" +#include "search/Sim.hh" #include "Stats.hh" #include "TimingArc.hh" #include "TimingRole.hh" @@ -88,8 +89,10 @@ DcalcPred::searchFrom(const Vertex *from_vertex, const Pin *from_pin = from_vertex->pin(); const Sdc *sdc = mode->sdc(); const Network *network = sta_->network(); + const Sim *sim = mode->sim(); Net *net = network->net(from_pin); return !(sdc->isDisabledConstraint(from_pin) + || sim->isConstant(from_vertex) || (net && (network->isPower(net) || network->isGround(net)))); } diff --git a/search/Sta.cc b/search/Sta.cc index 7ece680a..a555e2ff 100644 --- a/search/Sta.cc +++ b/search/Sta.cc @@ -191,6 +191,7 @@ StaSimObserver::StaSimObserver(StaState *sta) : void StaSimObserver::valueChangeAfter(const Pin *pin) { + graph_delay_calc_->delayInvalid(pin); Vertex *vertex = graph_->pinDrvrVertex(pin); if (vertex) { search_->arrivalInvalid(vertex); @@ -3676,8 +3677,10 @@ void Sta::delayCalcPreamble() { ensureLevelized(); - for (Mode *mode : modes_) + for (Mode *mode : modes_) { + mode->sim()->ensureConstantsPropagated(); mode->clkNetwork()->ensureClkNetwork(); + } } void