restore Search::makePathGroups

Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
James Cherry 2025-11-06 16:46:05 -07:00
parent 351b8287a7
commit 845729ad9f
2 changed files with 46 additions and 9 deletions

View File

@ -170,6 +170,19 @@ public:
PathGroupSeq pathGroups(const PathEnd *path_end) const; PathGroupSeq pathGroups(const PathEnd *path_end) const;
void deletePathGroups(); void deletePathGroups();
void makePathGroups(int group_path_count,
int endpoint_path_count,
bool unique_pins,
bool unique_edges,
float min_slack,
float max_slack,
PathGroupNameSet *group_names,
bool setup,
bool hold,
bool recovery,
bool removal,
bool clk_gating_setup,
bool clk_gating_hold);
virtual ExceptionPath *exceptionTo(ExceptionPathType type, virtual ExceptionPath *exceptionTo(ExceptionPathType type,
const Path *path, const Path *path,
const Pin *pin, const Pin *pin,
@ -281,6 +294,7 @@ public:
BfsFwdIterator *arrivalIterator() const { return arrival_iter_; } BfsFwdIterator *arrivalIterator() const { return arrival_iter_; }
BfsBkwdIterator *requiredIterator() const { return required_iter_; } BfsBkwdIterator *requiredIterator() const { return required_iter_; }
bool arrivalsAtEndpointsExist()const{return arrivals_at_endpoints_exist_;} bool arrivalsAtEndpointsExist()const{return arrivals_at_endpoints_exist_;}
// Used by OpenROAD.
bool makeUnclkedPaths(Vertex *vertex, bool makeUnclkedPaths(Vertex *vertex,
bool is_segment_start, bool is_segment_start,
bool require_exception, bool require_exception,

View File

@ -467,15 +467,12 @@ Search::findPathEnds(ExceptionFrom *from,
recovery = removal = false; recovery = removal = false;
if (!variables_->gatedClkChecksEnabled()) if (!variables_->gatedClkChecksEnabled())
clk_gating_setup = clk_gating_hold = false; clk_gating_setup = clk_gating_hold = false;
path_groups_ = new PathGroups(group_path_count, endpoint_path_count, makePathGroups(group_path_count, endpoint_path_count,
unique_pins, unique_edges, unique_pins, unique_edges,
slack_min, slack_max, slack_min, slack_max,
group_names, group_names, setup, hold,
setup, hold,
recovery, removal, recovery, removal,
clk_gating_setup, clk_gating_hold, clk_gating_setup, clk_gating_hold);
unconstrained_paths_,
this);
ensureDownstreamClkPins(); ensureDownstreamClkPins();
PathEndSeq path_ends = path_groups_->makePathEnds(to, unconstrained_paths_, PathEndSeq path_ends = path_groups_->makePathEnds(to, unconstrained_paths_,
corner, min_max, corner, min_max,
@ -509,6 +506,32 @@ Search::findFilteredArrivals(ExceptionFrom *from,
findAllArrivals(thru_latches); findAllArrivals(thru_latches);
} }
void
Search::makePathGroups(int group_path_count,
int endpoint_path_count,
bool unique_pins,
bool unique_edges,
float slack_min,
float slack_max,
PathGroupNameSet *group_names,
bool setup,
bool hold,
bool recovery,
bool removal,
bool clk_gating_setup,
bool clk_gating_hold)
{
path_groups_ = new PathGroups(group_path_count, endpoint_path_count,
unique_pins, unique_edges,
slack_min, slack_max,
group_names,
setup, hold,
recovery, removal,
clk_gating_setup, clk_gating_hold,
unconstrained_paths_,
this);
}
// From/thrus/to are used to make a filter exception. If the last // From/thrus/to are used to make a filter exception. If the last
// search used a filter arrival/required times were only found for a // search used a filter arrival/required times were only found for a
// subset of the paths. Delete the paths that have a filter // subset of the paths. Delete the paths that have a filter