no crpr for ideal clocks

Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
James Cherry 2025-03-16 15:34:04 -07:00
parent 02740e56af
commit fb5d87bd23
5 changed files with 10 additions and 3 deletions

View File

@ -58,7 +58,7 @@ ClkInfo::ClkInfo(const ClockEdge *clk_edge,
clk_edge_(clk_edge),
clk_src_(clk_src),
gen_clk_src_(gen_clk_src),
crpr_clk_path_(crpr_clk_path),
crpr_clk_path_(is_propagated ? crpr_clk_path : PathVertexPtr()),
uncertainties_(uncertainties),
insertion_(insertion),
latency_(latency),

View File

@ -186,7 +186,7 @@ CheckCrpr::checkCrpr1(const Path *src_path,
// For path from latches that are borrowing the enable path
// is from the opposite min/max of the data.
&& src_clk_min_max != tgt_clk_path->minMax(this)
&& (src_clk_path != nullptr
&& (src_clk_path
|| src_clk->isGenerated())) {
// Src path from input port clk path can only be from generated clk path.
PathVertex port_clk_path;

View File

@ -1144,6 +1144,8 @@ ArrivalVisitor::visit(Vertex *vertex)
if (crpr_active_
&& search_->crprPathPruningEnabled()
&& !vertex->crprPathPruningDisabled()
// No crpr for ideal clocks.
&& tag_bldr_->hasPropagatedClk()
&& !has_fanin_one_)
pruneCrprArrivals();

View File

@ -141,6 +141,7 @@ TagGroupBldr::TagGroupBldr(bool match_crpr_clk_pin,
has_genclk_src_tag_(false),
has_filter_tag_(false),
has_loop_tag_(false),
has_propagated_clk_(false),
sta_(sta)
{
}
@ -245,6 +246,8 @@ TagGroupBldr::setMatchArrival(Tag *tag,
has_filter_tag_ = true;
if (tag->isLoop())
has_loop_tag_ = true;
if (tag->clkInfo()->isPropagated())
has_propagated_clk_ = true;
}
}

View File

@ -110,6 +110,7 @@ public:
bool hasGenClkSrcTag() const { return has_genclk_src_tag_; }
bool hasFilterTag() const { return has_filter_tag_; }
bool hasLoopTag() const { return has_loop_tag_; }
bool hasPropagatedClk() const { return has_propagated_clk_; }
void tagMatchArrival(Tag *tag,
// Return values.
Tag *&tag_match,
@ -140,9 +141,10 @@ protected:
ArrivalSeq arrivals_;
PathPrevSeq prev_paths_;
bool has_clk_tag_;
bool has_genclk_src_tag_:1;
bool has_genclk_src_tag_;
bool has_filter_tag_;
bool has_loop_tag_;
bool has_propagated_clk_;
const StaState *sta_;
};