mirror of
https://github.com/The-OpenROAD-Project/OpenSTA.git
synced 2026-09-02 10:48:35 +02:00
report paths in multiple matching groups resolves ascenium #145
Signed-off-by: James Cherry <[email protected]>
This commit is contained in:
+11
-8
@@ -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;
|
||||
|
||||
@@ -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_;
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user