report paths in multiple matching groups resolves ascenium #145

Signed-off-by: James Cherry <[email protected]>
This commit is contained in:
James Cherry
2025-10-30 08:53:36 -07:00
parent de0f5440a6
commit 98d801d7a6
14 changed files with 215 additions and 107 deletions
+11 -8
View File
@@ -68,7 +68,7 @@ public:
path_delay
};
virtual PathEnd *copy() = 0;
virtual PathEnd *copy() const = 0;
virtual ~PathEnd();
void deletePath();
Path *path() { return path_; }
@@ -84,6 +84,8 @@ public:
PathAPIndex pathIndex(const StaState *sta) const;
virtual void reportShort(const ReportPath *report) const = 0;
virtual void reportFull(const ReportPath *report) const = 0;
PathGroup *pathGroup() const { return path_group_; }
void setPathGroup(PathGroup *path_group);
// Predicates for PathEnd type.
// Default methods overridden by respective types.
@@ -216,6 +218,7 @@ protected:
PathDelay *path_delay,
const StaState *sta);
Path *path_;
PathGroup *path_group_;
};
class PathEndUnconstrained : public PathEnd
@@ -224,7 +227,7 @@ public:
explicit PathEndUnconstrained(Path *path);
virtual Type type() const;
virtual const char *typeName() const;
virtual PathEnd *copy();
virtual PathEnd *copy() const;
virtual void reportShort(const ReportPath *report) const;
virtual void reportFull(const ReportPath *report) const;
virtual bool isUnconstrained() const;
@@ -321,7 +324,7 @@ public:
Path *clk_path,
MultiCyclePath *mcp,
const StaState *sta);
virtual PathEnd *copy();
virtual PathEnd *copy() const;
virtual Type type() const;
virtual const char *typeName() const;
virtual void reportShort(const ReportPath *report) const;
@@ -367,7 +370,7 @@ public:
virtual bool isCheck() const { return false; }
virtual bool isLatchCheck() const { return true; }
virtual PathDelay *pathDelay() const { return path_delay_; }
virtual PathEnd *copy();
virtual PathEnd *copy() const;
Path *latchDisable();
const Path *latchDisable() const;
virtual void reportShort(const ReportPath *report) const;
@@ -428,7 +431,7 @@ public:
Path *clk_path,
MultiCyclePath *mcp,
const StaState *sta);
virtual PathEnd *copy();
virtual PathEnd *copy() const;
virtual Type type() const;
virtual const char *typeName() const;
virtual void reportShort(const ReportPath *report) const;
@@ -474,7 +477,7 @@ public:
MultiCyclePath *mcp,
ArcDelay margin,
const StaState *sta);
virtual PathEnd *copy();
virtual PathEnd *copy() const;
virtual Type type() const;
virtual const char *typeName() const;
virtual void reportShort(const ReportPath *report) const;
@@ -506,7 +509,7 @@ public:
Path *data_clk_path,
MultiCyclePath *mcp,
const StaState *sta);
virtual PathEnd *copy();
virtual PathEnd *copy() const;
virtual Type type() const;
virtual const char *typeName() const;
virtual void reportShort(const ReportPath *report) const;
@@ -560,7 +563,7 @@ public:
Path *path,
OutputDelay *output_delay,
const StaState *sta);
virtual PathEnd *copy();
virtual PathEnd *copy() const;
virtual Type type() const;
virtual const char *typeName() const;
virtual void reportShort(const ReportPath *report) const;
+5 -5
View File
@@ -40,6 +40,8 @@ class PathEndVisitor;
typedef PathEndSeq::Iterator PathGroupIterator;
typedef Map<const Clock*, PathGroup*> PathGroupClkMap;
typedef Map<const char*, PathGroup*, CharPtrLess> PathGroupNamedMap;
typedef std::vector<PathGroup*> PathGroupSeq;
typedef std::vector<std::string> StdStringSeq;
// A collection of PathEnds grouped and sorted for reporting.
class PathGroup
@@ -133,9 +135,9 @@ public:
const MinMax *min_max) const;
PathGroup *findPathGroup(const Clock *clock,
const MinMax *min_max) const;
PathGroup *pathGroup(const PathEnd *path_end) const;
static std::string pathGroupName(const PathEnd *path_end,
const StaState *sta);
PathGroupSeq pathGroups(const PathEnd *path_end) const;
static StdStringSeq pathGroupNames(const PathEnd *path_end,
const StaState *sta);
static const char *asyncPathGroupName() { return async_group_name_; }
static const char *pathDelayGroupName() { return path_delay_group_name_; }
static const char *gatedClkGroupName() { return gated_clk_group_name_; }
@@ -179,8 +181,6 @@ protected:
const MinMax *min_max);
bool reportGroup(const char *group_name,
PathGroupNameSet *group_names) const;
static GroupPath *groupPathTo(const PathEnd *path_end,
const StaState *sta);
int group_path_count_;
int endpoint_path_count_;
+13
View File
@@ -996,6 +996,12 @@ public:
const MinMax *min_max,
bool match_min_max_exactly,
bool require_to_pin) const;
void groupPathsTo(const Pin *pin,
const RiseFall *rf,
const ClockEdge *clk_edge,
const MinMax *min_max,
// Return value.
ExceptionPathSeq &group_paths) const;
bool isCompleteTo(ExceptionState *state,
const Pin *pin,
const RiseFall *rf,
@@ -1164,6 +1170,13 @@ protected:
// Return values.
ExceptionPath *&hi_priority_exception,
int &hi_priority) const;
void groupPathsTo(const ExceptionPathSet *to_exceptions,
const Pin *pin,
const RiseFall *rf,
const ClockEdge *clk_edge,
const MinMax *min_max,
// Return value.
ExceptionPathSeq &group_paths) const;
void makeLoopPath(ExceptionThruSeq *thrus);
void makeLoopException(const Pin *loop_input_pin,
const Pin *loop_pin,
+4 -1
View File
@@ -71,6 +71,8 @@ typedef Map<Vertex*, Slack> VertexSlackMap;
typedef Vector<VertexSlackMap> VertexSlackMapSeq;
typedef Vector<WorstSlacks> WorstSlacksSeq;
typedef std::vector<DelayDbl> DelayDblSeq;
typedef Vector<ExceptionPath*> ExceptionPathSeq;
typedef std::vector<PathGroup*> PathGroupSeq;
class Search : public StaState
{
@@ -165,7 +167,7 @@ public:
// Clock arrival at the path source/launch point.
Arrival pathClkPathArrival(const Path *path) const;
PathGroup *pathGroup(const PathEnd *path_end) const;
PathGroupSeq pathGroups(const PathEnd *path_end) const;
void deletePathGroups();
void makePathGroups(int group_path_count,
int endpoint_path_count,
@@ -187,6 +189,7 @@ public:
const MinMax *min_max,
bool match_min_max_exactly,
bool require_to_pin) const;
ExceptionPathSeq groupPathsTo(const PathEnd *path_end) const;
FilterPath *filter() const { return filter_; }
void deleteFilter();
void deleteFilteredArrivals();