SearchPred0 not thru timing checks

Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
James Cherry 2026-01-15 16:14:42 -07:00
parent 24f9ee3f20
commit be56eadb47
4 changed files with 6 additions and 5 deletions

View File

@ -673,7 +673,6 @@ protected:
// Eval across latch D->Q edges. // Eval across latch D->Q edges.
// SearchPred0 unless // SearchPred0 unless
// timing check edge
// disabled loop // disabled loop
// disabled converging clock edge (Xilinx) // disabled converging clock edge (Xilinx)
// clk source pin // clk source pin

View File

@ -34,10 +34,12 @@ namespace sta {
// Class hierarchy: // Class hierarchy:
// SearchPred // SearchPred
// SearchAdj (unless loop disabled, latch D->Q, timing check, dynamic loop) // SearchAdj (unless loop disabled, latch D->Q, timing check, dynamic loop)
// SearchPred0 (unless disabled or constant) // SearchPred0 (unless timing check, disabled or constant)
// EvalPred (unless timing check) // EvalPred (unless dynamic loop breaking)
// SearchThru (unless latch D->Q) // SearchThru (unless latch D->Q)
// GenClkInsertionSearchPred
// SearchPred1 (unless loop disabled) // SearchPred1 (unless loop disabled)
// FanOutSrchPred
// ClkTreeSearchPred (only wire or combinational) // ClkTreeSearchPred (only wire or combinational)
// Virtual base class for search predicates. // Virtual base class for search predicates.

View File

@ -96,7 +96,6 @@ EvalPred::searchThru(Edge *edge,
return SearchPred0::searchThru(edge, mode) return SearchPred0::searchThru(edge, mode)
&& (sta_->variables()->dynamicLoopBreaking() && (sta_->variables()->dynamicLoopBreaking()
|| !edge->isDisabledLoop()) || !edge->isDisabledLoop())
&& !role->isTimingCheck()
&& (search_thru_latches_ && (search_thru_latches_
|| role->isLatchDtoQ() || role->isLatchDtoQ()
|| sta_->latches()->latchDtoQState(edge, mode) == LatchEnableState::open); || sta_->latches()->latchDtoQState(edge, mode) == LatchEnableState::open);

View File

@ -116,7 +116,8 @@ SearchPred0::searchThru(Edge *edge,
const Variables *variables = sta_->variables(); const Variables *variables = sta_->variables();
const Sdc *sdc = mode->sdc(); const Sdc *sdc = mode->sdc();
const Sim *sim = mode->sim(); const Sim *sim = mode->sim();
return !(sdc->isDisabledConstraint(edge) return !(role->isTimingCheck()
|| sdc->isDisabledConstraint(edge)
// Constants disable edge cond expression. // Constants disable edge cond expression.
|| sim->isDisabledCond(edge) || sim->isDisabledCond(edge)
|| sdc->isDisabledCondDefault(edge) || sdc->isDisabledCondDefault(edge)