mirror of
https://github.com/The-OpenROAD-Project/OpenSTA.git
synced 2026-09-03 03:23:35 +02:00
class Path replaces PathVertex etc
commit 08c062d3dd1d0cea846407dda0b5fd75ca64329c Author: James Cherry <[email protected]> Date: Tue Mar 25 16:17:42 2025 -0700 ApiChanges.txt Signed-off-by: James Cherry <[email protected]> commit ef72112a00419e466e19b5c1442cac6f2835adaa Author: James Cherry <[email protected]> Date: Sun Mar 23 12:37:10 2025 -0700 crpr29/30 Signed-off-by: James Cherry <[email protected]> commit 2065acfbfbaa84307fde1c46ff51a1c619c45f50 Author: James Cherry <[email protected]> Date: Sun Mar 23 12:33:55 2025 -0700 compile error Signed-off-by: James Cherry <[email protected]> commit d3133015b90b59f7e8e934c20d1ed8449d543d7b Author: James Cherry <[email protected]> Date: Mon Mar 17 15:20:55 2025 -0700 rebase falout Signed-off-by: James Cherry <[email protected]> commit 8a4b81755765db823e18ffb497f1fb3f0c64ec7b Author: James Cherry <[email protected]> Date: Mon Mar 17 09:22:01 2025 -0700 rebase fallout Signed-off-by: James Cherry <[email protected]> commit 7ef00dcaa4ed0b6db3f4205da47013e4f2ef1049 Author: James Cherry <[email protected]> Date: Sat Mar 15 17:00:51 2025 -0700 deleteEdge clear to path prev_paths Signed-off-by: James Cherry <[email protected]> commit 912dacbca8f5c286f623f13659c831be6ed4d93e Author: James Cherry <[email protected]> Date: Sat Mar 15 12:05:06 2025 -0700 undo 7f8c7adb Signed-off-by: James Cherry <[email protected]> commit 9944c2ec907e9f07ab46f71af55ec947f3815de0 Author: James Cherry <[email protected]> Date: Fri Mar 14 21:25:10 2025 -0700 rm Path::path() Signed-off-by: James Cherry <[email protected]> commit a42c28b8447466a445cd8f6fb022eb42e6dcc0f2 Author: James Cherry <[email protected]> Date: Fri Mar 14 17:12:17 2025 -0700 const Signed-off-by: James Cherry <[email protected]> commit 3f72adf1b5ad5581adc81afd3e00be7343ae4183 Author: James Cherry <[email protected]> Date: Fri Mar 14 17:03:04 2025 -0700 PathExpanded rm prev_arcs_ Signed-off-by: James Cherry <[email protected]> commit 25879e66eddf9f12db38705807e1270459661810 Author: James Cherry <[email protected]> Date: Thu Mar 13 12:34:12 2025 -0700 worst path init path Signed-off-by: James Cherry <[email protected]> commit 5c7a4fbdf3b8823a1944074a7eb663c6ea8e32df Author: James Cherry <[email protected]> Date: Thu Mar 13 10:47:02 2025 -0700 delete edge -> xelete paths of to vertex Signed-off-by: James Cherry <[email protected]> commit aa8d3035489de2cd25f27f7531177193be7a40ac Author: James Cherry <[email protected]> Date: Thu Mar 13 09:17:27 2025 -0700 debug Signed-off-by: James Cherry <[email protected]> commit 53741b6c624b1313b0464a31e3900472d0b7c8d2 Author: James Cherry <[email protected]> Date: Thu Mar 13 08:50:01 2025 -0700 debug Signed-off-by: James Cherry <[email protected]> commit cdebd8f3e476e5a2afab1a949449b75dcec9ed97 Author: James Cherry <[email protected]> Date: Thu Mar 13 08:14:58 2025 -0700 dbg network_edit Signed-off-by: James Cherry <[email protected]> commit 60cc960439e65cda8cd244723456b81242ced458 Author: James Cherry <[email protected]> Date: Thu Mar 13 07:42:22 2025 -0700 dbg network edit Signed-off-by: James Cherry <[email protected]> commit f4e4264ac1c11dafddbe18971ca35127a0ffc171 Author: James Cherry <[email protected]> Date: Tue Mar 11 19:23:17 2025 -0700 rm PathVertex.hh Signed-off-by: James Cherry <[email protected]> commit aeba9b293f095aecd01d0f5d16de51640f3d2381 Author: James Cherry <[email protected]> Date: Tue Mar 11 13:33:21 2025 -0700 PathEnum rm divEdge Signed-off-by: James Cherry <[email protected]> commit ad97706562da7ceb41b9fbf4c882083de36d578d Author: James Cherry <[email protected]> Date: Tue Mar 11 13:18:38 2025 -0700 genclks use path vector Signed-off-by: James Cherry <[email protected]> commit a9c2563199d0cee3dee3d420c70f8117cfd69221 Author: James Cherry <[email protected]> Date: Tue Mar 11 12:42:12 2025 -0700 group_path_count, end_path_count use size_t Signed-off-by: James Cherry <[email protected]> commit f16309a8e09e22964b998bf1b7e0922fbb9f02c1 Author: James Cherry <[email protected]> Date: Tue Mar 11 12:30:08 2025 -0700 Path rm uused Signed-off-by: James Cherry <[email protected]> commit 51295613c4ab6a6a4170080252397e2846a61bf1 Author: James Cherry <[email protected]> Date: Tue Mar 11 12:22:23 2025 -0700 network_edit3 Signed-off-by: James Cherry <[email protected]> commit 5de6da2190460183cf07d0d4ffc1d1c6ebbe3e10 Author: James Cherry <[email protected]> Date: Tue Mar 11 10:33:09 2025 -0700 leak Signed-off-by: James Cherry <[email protected]> commit f52dbc18ce08bd2b14d7107b61a57e614b1e3a07 Author: James Cherry <[email protected]> Date: Tue Mar 11 08:06:56 2025 -0700 valgrind 3 leaks left Signed-off-by: James Cherry <[email protected]> commit de1a3727d908c4494f3039ff714ddb939d3390b5 Author: James Cherry <[email protected]> Date: Mon Mar 10 18:21:50 2025 -0700 Path::prevPath Signed-off-by: James Cherry <[email protected]> commit c40aadcac8d2cd6d6dd8ba18f2e9db607358a01f Author: James Cherry <[email protected]> Date: Mon Mar 10 18:21:31 2025 -0700 clk_skew init Signed-off-by: James Cherry <[email protected]> commit 041c97194553e7f7a4746f506be251ee42eb83ee Author: James Cherry <[email protected]> Date: Mon Mar 10 07:38:49 2025 -0700 delete path groups before paths Signed-off-by: James Cherry <[email protected]> commit fb4aed589f9f67ddb39f4260cb2901764cf49a98 Author: James Cherry <[email protected]> Date: Sun Mar 9 17:23:27 2025 -0700 leak Signed-off-by: James Cherry <[email protected]> commit 70b3062872cefdcf1358847025bc7bb1a85f4a5b Author: James Cherry <[email protected]> Date: Sun Mar 9 17:09:45 2025 -0700 1 failure Signed-off-by: James Cherry <[email protected]> commit 92cd7c33c1eb22e4f574a767a645c5db1c9efe4d Author: James Cherry <[email protected]> Date: Sun Mar 9 11:19:59 2025 -0700 7 failures Signed-off-by: James Cherry <[email protected]> commit 537ec153a5f8ab30d800cd36130e7668047b67af Author: James Cherry <[email protected]> Date: Sun Mar 9 09:05:31 2025 -0700 11 failures Signed-off-by: James Cherry <[email protected]> commit df514124c4daaf90175a89138ed954e20573e02f Author: James Cherry <[email protected]> Date: Sun Mar 9 08:37:00 2025 -0700 25 failures Signed-off-by: James Cherry <[email protected]> commit 0096e8ee5a83194aee84da2cba95f410931f5c0e Author: James Cherry <[email protected]> Date: Sat Mar 8 16:05:04 2025 -0700 33 failures Signed-off-by: James Cherry <[email protected]> commit 02ba7ffdf38b538cd1659df25837d37e8317e741 Author: James Cherry <[email protected]> Date: Fri Mar 7 21:39:53 2025 -0700 delete path groups before pahts Signed-Off-by: James Cherry <[email protected]> commit 270dbad6bc9303f9255256b5b85cac84deb27a94 Author: James Cherry <[email protected]> Date: Fri Mar 7 18:27:52 2025 -0700 no seg faults, 42 failures Signed-off-by: James Cherry <[email protected]> commit 3ceca5981fd6032294523cd23dc1334b9619f6a0 Author: James Cherry <[email protected]> Date: Thu Mar 6 15:43:28 2025 -0700 multiclk1,2 seg fault Signed-off-by: James Cherry <[email protected]> commit 0441c00dc172817cc1a39bbb740d6369cf163869 Author: James Cherry <[email protected]> Date: Thu Mar 6 15:29:47 2025 -0700 gated_clocks15 Signed-off-by: James Cherry <[email protected]> commit 7a1f87737e9c8247acd2c78138ee482d46123952 Author: James Cherry <[email protected]> Date: Thu Mar 6 09:05:09 2025 -0700 nworst, crpr Signed-off-by: James Cherry <[email protected]> commit 74b52e5ac0ed9dac5b7c31835393c4e2dd30ca95 Author: James Cherry <[email protected]> Date: Wed Mar 5 17:18:47 2025 -0700 check_timiing6 Signed-off-by: James Cherry <[email protected]> commit 93bddf0d940e9b833d5bc47d5af8b3bdefac67a5 Author: James Cherry <[email protected]> Date: Wed Mar 5 17:13:24 2025 -0700 nworst10 Signed-off-by: James Cherry <[email protected]> commit f1edddbffb2e0d23bc3f4a10733203b9756f2e2e Author: James Cherry <[email protected]> Date: Wed Mar 5 16:22:25 2025 -0700 path enum Signed-off-by: James Cherry <[email protected]> commit c57d241b668d305f0492e55e273b3411320692b4 Author: James Cherry <[email protected]> Date: Wed Mar 5 16:09:11 2025 -0700 most nwost pass Signed-off-by: James Cherry <[email protected]> commit c6fca38e28571e5f2d63236aa67233d572c3a1d6 Author: James Cherry <[email protected]> Date: Wed Mar 5 09:15:47 2025 -0700 most genclks Signed-off-by: James Cherry <[email protected]> commit 82f5e6e9252987433f9699919c5716b3a4321a5d Author: James Cherry <[email protected]> Date: Tue Mar 4 17:51:29 2025 -0700 genclks Signed-off-by: James Cherry <[email protected]> commit 19f4035496e004c543110b063482928e55bddbc9 Author: James Cherry <[email protected]> Date: Tue Mar 4 17:33:28 2025 -0700 nworst1 Signed-off-by: James Cherry <[email protected]> commit edafefa4e4f98291a3edebe5c7b3e2630988723f Author: James Cherry <[email protected]> Date: Tue Mar 4 15:02:38 2025 -0700 path enum Signed-off-by: James Cherry <[email protected]> commit 3e4684fd67eacdb474574eee9e51741e75bba907 Author: James Cherry <[email protected]> Date: Mon Mar 3 21:07:18 2025 -0700 rm unused Path* files Signed-off-by: James Cherry <[email protected]> commit 3f04819c01002f8b5eec0f4b8f0caf6798f3a20f Author: James Cherry <[email protected]> Date: Mon Mar 3 19:43:35 2025 -0700 more regressions pass Signed-off-by: James Cherry <[email protected]> commit 276d70283cda14dfd6c48d1e2e4f45d326bf286c Author: James Cherry <[email protected]> Date: Mon Mar 3 10:43:30 2025 -0700 arrival1 Signed-off-by: James Cherry <[email protected]> commit 383a480450833741144b57383bb40a33310fad44 Author: James Cherry <[email protected]> Date: Sun Mar 2 19:23:40 2025 -0700 arrival1 no segfault Signed-off-by: James Cherry <[email protected]> commit 36e3a6b8d8b19f185a5a71fb4547e17586ea2c44 Author: James Cherry <[email protected]> Date: Sun Mar 2 18:40:23 2025 -0700 VertexPathIterator Signed-off-by: James Cherry <[email protected]> commit 083c76201e1a5482726e5856f124b15a523453d6 Author: James Cherry <[email protected]> Date: Sun Mar 2 18:18:15 2025 -0700 report_checks3 passes Signed-off-by: James Cherry <[email protected]> commit 834c076b7e2cb733655d917881463c76ce6196f6 Author: James Cherry <[email protected]> Date: Sun Mar 2 14:10:34 2025 -0800 links Signed-off-by: James Cherry <[email protected]> commit 371792b1e6dd44ad0c72399b999d86cd2557cbe1 Author: James Cherry <[email protected]> Date: Sun Mar 2 13:37:33 2025 -0800 link errors Signed-off-by: James Cherry <[email protected]> commit 158e9dafa6d11e0a4fd4e7ef253b0b6cb7595bf6 Author: James Cherry <[email protected]> Date: Sun Mar 2 12:30:29 2025 -0800 compiles Signed-off-by: James Cherry <[email protected]> commit 8df515dab15c0744abe04eae7e4a7d7688455f03 Author: James Cherry <[email protected]> Date: Sun Mar 2 09:41:51 2025 -0800 PathEnd compiles Signed-off-by: James Cherry <[email protected]> commit d94f241d0803376b1526f32e4f5111d081c604af Author: James Cherry <[email protected]> Date: Sun Mar 2 07:42:51 2025 -0800 compile progress Signed-off-by: James Cherry <[email protected]> commit 591997e3bb496c4cc2fd6963c3798a8e17b8f587 Author: James Cherry <[email protected]> Date: Sat Mar 1 10:42:11 2025 -0800 path unification Signed-off-by: James Cherry <[email protected]> Signed-off-by: James Cherry <[email protected]>
This commit is contained in:
+7
-24
@@ -36,7 +36,7 @@
|
||||
#include "Delay.hh"
|
||||
#include "GraphClass.hh"
|
||||
#include "VertexId.hh"
|
||||
#include "PathPrev.hh"
|
||||
#include "Path.hh"
|
||||
#include "StaState.hh"
|
||||
|
||||
namespace sta {
|
||||
@@ -96,19 +96,9 @@ public:
|
||||
void deleteVertex(Vertex *vertex);
|
||||
bool hasFaninOne(Vertex *vertex) const;
|
||||
VertexId vertexCount() { return vertices_->size(); }
|
||||
Arrival *makeArrivals(Vertex *vertex,
|
||||
uint32_t count);
|
||||
Arrival *arrivals(const Vertex *vertex) const;
|
||||
void deleteArrivals(Vertex *vertex);
|
||||
Required *makeRequireds(Vertex *vertex,
|
||||
uint32_t count);
|
||||
Required *requireds(const Vertex *vertex) const;
|
||||
void deleteRequireds(Vertex *vertex);
|
||||
PathPrev *makePrevPaths(Vertex *vertex,
|
||||
uint32_t count);
|
||||
PathPrev *prevPaths(const Vertex *vertex) const;
|
||||
void deletePrevPaths(Vertex *vertex);
|
||||
// Private to Search::deletePaths(Vertex).
|
||||
Path *makePaths(Vertex *vertex,
|
||||
uint32_t count);
|
||||
Path *paths(const Vertex *vertex) const;
|
||||
void deletePaths(Vertex *vertex);
|
||||
|
||||
// Reported slew are the same as those in the liberty tables.
|
||||
@@ -269,10 +259,8 @@ public:
|
||||
void setColor(LevelColor color);
|
||||
Slew *slews() { return slews_; }
|
||||
const Slew *slews() const { return slews_; }
|
||||
Arrival *arrivals() const { return arrivals_; }
|
||||
Arrival *requireds() const { return requireds_; }
|
||||
PathPrev *prevPaths() const { return prev_paths_; }
|
||||
void setPrevPaths(PathPrev *prev_paths);
|
||||
Path *paths() const { return paths_; }
|
||||
void setPaths(Path *paths);
|
||||
TagGroupIndex tagGroupIndex() const;
|
||||
void setTagGroupIndex(TagGroupIndex tag_index);
|
||||
// Slew is annotated by sdc set_annotated_transition cmd.
|
||||
@@ -311,7 +299,6 @@ public:
|
||||
bool isRegClk() const { return is_reg_clk_; }
|
||||
bool crprPathPruningDisabled() const { return crpr_path_pruning_disabled_;}
|
||||
void setCrprPathPruningDisabled(bool disabled);
|
||||
bool hasRequireds() const { return requireds_ != nullptr; }
|
||||
|
||||
// ObjectTable interface.
|
||||
ObjectIdx objectIdx() const { return object_idx_; }
|
||||
@@ -324,8 +311,6 @@ protected:
|
||||
bool is_bidirect_drvr,
|
||||
bool is_reg_clk);
|
||||
void clear();
|
||||
void setArrivals(Arrival *arrivals);
|
||||
void setRequireds(Required *requireds);
|
||||
void setSlews(Slew *slews);
|
||||
|
||||
Pin *pin_;
|
||||
@@ -335,9 +320,7 @@ protected:
|
||||
// Delay calc
|
||||
Slew *slews_;
|
||||
// Search
|
||||
Arrival *arrivals_;
|
||||
Arrival *requireds_;
|
||||
PathPrev *prev_paths_;
|
||||
Path *paths_;
|
||||
|
||||
// These fields are written by multiple threads, so they
|
||||
// cannot share the same word as the following bit fields.
|
||||
|
||||
+141
-47
@@ -37,57 +37,96 @@ namespace sta {
|
||||
|
||||
class DcalcAnalysisPt;
|
||||
|
||||
// Abstract base class for Path API.
|
||||
class Path
|
||||
{
|
||||
public:
|
||||
Path() {}
|
||||
virtual ~Path() {}
|
||||
virtual const char *name(const StaState *sta) const;
|
||||
virtual bool isNull() const = 0;
|
||||
virtual Path *path() { return isNull() ? nullptr : this; }
|
||||
virtual const Path *path() const { return isNull() ? nullptr : this; }
|
||||
virtual void setRef(PathRef *ref) const = 0;
|
||||
virtual void setRef(PathRef &ref) const { setRef(&ref); }
|
||||
virtual Vertex *vertex(const StaState *sta) const = 0;
|
||||
virtual VertexId vertexId(const StaState *sta) const = 0;
|
||||
virtual Pin *pin(const StaState *sta) const;
|
||||
virtual Tag *tag(const StaState *sta) const = 0;
|
||||
virtual TagIndex tagIndex(const StaState *sta) const;
|
||||
virtual ClkInfo *clkInfo(const StaState *sta) const;
|
||||
virtual const ClockEdge *clkEdge(const StaState *sta) const;
|
||||
virtual const Clock *clock(const StaState *sta) const;
|
||||
virtual bool isClock(const StaState *sta) const;
|
||||
virtual const RiseFall *transition(const StaState *sta) const = 0;
|
||||
virtual int rfIndex(const StaState *sta) const;
|
||||
virtual const MinMax *minMax(const StaState *sta) const;
|
||||
virtual PathAnalysisPt *pathAnalysisPt(const StaState *sta) const = 0;
|
||||
virtual PathAPIndex pathAnalysisPtIndex(const StaState *sta) const;
|
||||
virtual DcalcAnalysisPt *dcalcAnalysisPt(const StaState *sta) const;
|
||||
virtual Arrival arrival(const StaState *sta) const = 0;
|
||||
virtual void setArrival(Arrival arrival,
|
||||
const StaState *sta) = 0;
|
||||
virtual void initArrival(const StaState *sta);
|
||||
virtual bool arrivalIsInitValue(const StaState *sta) const;
|
||||
virtual const Required &required(const StaState *sta) const = 0;
|
||||
virtual void setRequired(const Required &required,
|
||||
const StaState *sta) = 0;
|
||||
virtual void initRequired(const StaState *sta);
|
||||
virtual bool requiredIsInitValue(const StaState *sta) const;
|
||||
virtual Slack slack(const StaState *sta) const;
|
||||
virtual Slew slew(const StaState *sta) const;
|
||||
Path();
|
||||
Path(Path *path);
|
||||
Path(Vertex *vertex,
|
||||
Tag *tag,
|
||||
const StaState *sta);
|
||||
Path(Vertex *vertex,
|
||||
Tag *tag,
|
||||
Arrival arrival,
|
||||
Path *prev_path,
|
||||
Edge *prev_edge,
|
||||
TimingArc *prev_arc,
|
||||
const StaState *sta);
|
||||
Path(Vertex *vertex,
|
||||
Tag *tag,
|
||||
Arrival arrival,
|
||||
Path *prev_path,
|
||||
Edge *prev_edge,
|
||||
TimingArc *prev_arc,
|
||||
bool is_enum,
|
||||
const StaState *sta);
|
||||
~Path();
|
||||
const char *name(const StaState *sta) const;
|
||||
bool isNull() const;
|
||||
// prev_path null
|
||||
void init(Vertex *vertex,
|
||||
Arrival arrival,
|
||||
const StaState *sta);
|
||||
void init(Vertex *vertex,
|
||||
Tag *tag,
|
||||
Arrival arrival,
|
||||
Path *prev_path,
|
||||
Edge *prev_edge,
|
||||
TimingArc *prev_arc,
|
||||
const StaState *sta);
|
||||
void init(Vertex *vertex,
|
||||
Tag *tag,
|
||||
const StaState *sta);
|
||||
void init(Vertex *vertex,
|
||||
Tag *tag,
|
||||
Arrival arrival,
|
||||
const StaState *sta);
|
||||
|
||||
Vertex *vertex(const StaState *sta) const;
|
||||
VertexId vertexId(const StaState *sta) const;
|
||||
Pin *pin(const StaState *sta) const;
|
||||
Tag *tag(const StaState *sta) const;
|
||||
TagIndex tagIndex(const StaState *sta) const;
|
||||
void setTag(Tag *tag);
|
||||
size_t pathIndex(const StaState *sta) const;
|
||||
ClkInfo *clkInfo(const StaState *sta) const;
|
||||
const ClockEdge *clkEdge(const StaState *sta) const;
|
||||
const Clock *clock(const StaState *sta) const;
|
||||
bool isClock(const StaState *sta) const;
|
||||
const RiseFall *transition(const StaState *sta) const;
|
||||
int rfIndex(const StaState *sta) const;
|
||||
const MinMax *minMax(const StaState *sta) const;
|
||||
PathAnalysisPt *pathAnalysisPt(const StaState *sta) const;
|
||||
PathAPIndex pathAnalysisPtIndex(const StaState *sta) const;
|
||||
DcalcAnalysisPt *dcalcAnalysisPt(const StaState *sta) const;
|
||||
Arrival &arrival() { return arrival_; }
|
||||
const Arrival &arrival() const { return arrival_; }
|
||||
void setArrival(Arrival arrival);
|
||||
Required &required() { return required_; }
|
||||
const Required &required() const {return required_; }
|
||||
void setRequired(const Required &required);
|
||||
Slack slack(const StaState *sta) const;
|
||||
Slew slew(const StaState *sta) const;
|
||||
// This takes the same time as prevPath and prevArc combined.
|
||||
virtual void prevPath(const StaState *sta,
|
||||
// Return values.
|
||||
PathRef &prev_path,
|
||||
TimingArc *&prev_arc) const = 0;
|
||||
virtual void prevPath(const StaState *sta,
|
||||
// Return values.
|
||||
PathRef &prev_path) const;
|
||||
virtual TimingArc *prevArc(const StaState *sta) const;
|
||||
// Find the previous edge given the previous arc found above.
|
||||
Edge *prevEdge(const TimingArc *prev_arc,
|
||||
const StaState *sta) const;
|
||||
Path *prevPath() const;
|
||||
void setPrevPath(Path *prev_path);
|
||||
void clearPrevPath(const StaState *sta);
|
||||
TimingArc *prevArc(const StaState *sta) const;
|
||||
Edge *prevEdge(const StaState *sta) const;
|
||||
Vertex *prevVertex(const StaState *sta) const;
|
||||
void setPrevEdgeArc(Edge *prev_edge,
|
||||
TimingArc *prev_arc,
|
||||
const StaState *sta);
|
||||
bool isEnum() const { return is_enum_; }
|
||||
void setIsEnum(bool is_enum);
|
||||
void checkPrevPath(const StaState *sta) const;
|
||||
void checkPrevPaths(const StaState *sta) const;
|
||||
|
||||
static Path *vertexPath(const Path &path,
|
||||
const StaState *sta);
|
||||
static Path *vertexPath(const Vertex *vertex,
|
||||
Tag *tag,
|
||||
const StaState *sta);
|
||||
|
||||
static bool less(const Path *path1,
|
||||
const Path *path2,
|
||||
@@ -118,6 +157,18 @@ public:
|
||||
static bool lessAll(const Path *path1,
|
||||
const Path *path2,
|
||||
const StaState *sta);
|
||||
|
||||
protected:
|
||||
Path *prev_path_;
|
||||
Arrival arrival_;
|
||||
Required required_;
|
||||
union {
|
||||
VertexId vertex_id_;
|
||||
EdgeId prev_edge_id_;
|
||||
};
|
||||
TagIndex tag_index_:tag_index_bit_count;
|
||||
bool is_enum_:1;
|
||||
unsigned prev_arc_idx_:2;
|
||||
};
|
||||
|
||||
// Compare all path attributes (vertex, transition, tag, analysis point).
|
||||
@@ -132,4 +183,47 @@ protected:
|
||||
const StaState *sta_;
|
||||
};
|
||||
|
||||
// Iterator for paths on a vertex.
|
||||
class VertexPathIterator : public Iterator<Path*>
|
||||
{
|
||||
public:
|
||||
// Iterate over all vertex paths.
|
||||
VertexPathIterator(Vertex *vertex,
|
||||
const StaState *sta);
|
||||
// Iterate over vertex paths with the same transition and
|
||||
// analysis pt but different tags.
|
||||
VertexPathIterator(Vertex *vertex,
|
||||
const RiseFall *rf,
|
||||
const PathAnalysisPt *path_ap,
|
||||
const StaState *sta);
|
||||
// Iterate over vertex paths with the same transition and
|
||||
// analysis pt min/max but different tags.
|
||||
VertexPathIterator(Vertex *vertex,
|
||||
const RiseFall *rf,
|
||||
const MinMax *min_max,
|
||||
const StaState *sta);
|
||||
VertexPathIterator(Vertex *vertex,
|
||||
const RiseFall *rf,
|
||||
const PathAnalysisPt *path_ap,
|
||||
const MinMax *min_max,
|
||||
const StaState *sta);
|
||||
virtual ~VertexPathIterator();
|
||||
virtual bool hasNext();
|
||||
virtual Path *next();
|
||||
|
||||
private:
|
||||
void findNext();
|
||||
|
||||
const Search *search_;
|
||||
//bool filtered_;
|
||||
const RiseFall *rf_;
|
||||
const PathAnalysisPt *path_ap_;
|
||||
const MinMax *min_max_;
|
||||
Path *paths_;
|
||||
size_t path_count_;
|
||||
//size_t path_index_;
|
||||
Path *next_;
|
||||
PathIndexMap::Iterator path_iter_;
|
||||
};
|
||||
|
||||
} // namespace
|
||||
|
||||
+43
-46
@@ -30,7 +30,7 @@
|
||||
#include "GraphClass.hh"
|
||||
#include "SdcClass.hh"
|
||||
#include "SearchClass.hh"
|
||||
#include "PathRef.hh"
|
||||
#include "Path.hh"
|
||||
#include "StaState.hh"
|
||||
|
||||
namespace sta {
|
||||
@@ -73,10 +73,9 @@ public:
|
||||
virtual PathEnd *copy() = 0;
|
||||
virtual ~PathEnd();
|
||||
void deletePath();
|
||||
Path *path() { return &path_; }
|
||||
const Path *path() const { return &path_; }
|
||||
PathRef &pathRef() { return path_; }
|
||||
virtual void setPath(const Path *path);
|
||||
Path *path() { return path_; }
|
||||
const Path *path() const { return path_; }
|
||||
virtual void setPath(Path *path);
|
||||
Vertex *vertex(const StaState *sta) const;
|
||||
const MinMax *minMax(const StaState *sta) const;
|
||||
// Synonym for minMax().
|
||||
@@ -118,8 +117,8 @@ public:
|
||||
virtual float sourceClkOffset(const StaState *sta) const = 0;
|
||||
virtual Delay sourceClkLatency(const StaState *sta) const;
|
||||
virtual Delay sourceClkInsertionDelay(const StaState *sta) const;
|
||||
virtual PathVertex *targetClkPath();
|
||||
virtual const PathVertex *targetClkPath() const;
|
||||
virtual Path *targetClkPath();
|
||||
virtual const Path *targetClkPath() const;
|
||||
virtual const Clock *targetClk(const StaState *sta) const;
|
||||
virtual const ClockEdge *targetClkEdge(const StaState *sta) const;
|
||||
const RiseFall *targetClkEndTrans(const StaState *sta) const;
|
||||
@@ -149,7 +148,7 @@ public:
|
||||
virtual MultiCyclePath *multiCyclePath() const;
|
||||
virtual TimingArc *checkArc() const { return nullptr; }
|
||||
// PathEndDataCheck data clock path.
|
||||
virtual const PathVertex *dataClkPath() const { return nullptr; }
|
||||
virtual const Path *dataClkPath() const { return nullptr; }
|
||||
virtual int setupDefaultCycles() const { return 1; }
|
||||
virtual Delay clkSkew(const StaState *sta);
|
||||
virtual bool ignoreClkLatency(const StaState * /* sta */) const { return false; }
|
||||
@@ -173,11 +172,11 @@ public:
|
||||
// Helper common to multiple PathEnd classes and used
|
||||
// externally.
|
||||
// Target clock insertion delay + latency.
|
||||
static Delay checkTgtClkDelay(const PathVertex *tgt_clk_path,
|
||||
static Delay checkTgtClkDelay(const Path *tgt_clk_path,
|
||||
const ClockEdge *tgt_clk_edge,
|
||||
const TimingRole *check_role,
|
||||
const StaState *sta);
|
||||
static void checkTgtClkDelay(const PathVertex *tgt_clk_path,
|
||||
static void checkTgtClkDelay(const Path *tgt_clk_path,
|
||||
const ClockEdge *tgt_clk_edge,
|
||||
const TimingRole *check_role,
|
||||
const StaState *sta,
|
||||
@@ -186,11 +185,11 @@ public:
|
||||
Delay &latency);
|
||||
static float checkClkUncertainty(const ClockEdge *src_clk_edge,
|
||||
const ClockEdge *tgt_clk_edge,
|
||||
const PathVertex *tgt_clk_path,
|
||||
const Path *tgt_clk_path,
|
||||
const TimingRole *check_role,
|
||||
const StaState *sta);
|
||||
// Non inter-clock uncertainty.
|
||||
static float checkTgtClkUncertainty(const PathVertex *tgt_clk_path,
|
||||
static float checkTgtClkUncertainty(const Path *tgt_clk_path,
|
||||
const ClockEdge *tgt_clk_edge,
|
||||
const TimingRole *check_role,
|
||||
const StaState *sta);
|
||||
@@ -211,14 +210,14 @@ protected:
|
||||
static float outputDelayMargin(OutputDelay *output_delay,
|
||||
const Path *path,
|
||||
const StaState *sta);
|
||||
static float pathDelaySrcClkOffset(const PathRef &path,
|
||||
static float pathDelaySrcClkOffset(const Path *path,
|
||||
PathDelay *path_delay,
|
||||
Arrival src_clk_arrival,
|
||||
const StaState *sta);
|
||||
static bool ignoreClkLatency(const PathRef &path,
|
||||
static bool ignoreClkLatency(const Path *path,
|
||||
PathDelay *path_delay,
|
||||
const StaState *sta);
|
||||
PathRef path_;
|
||||
Path *path_;
|
||||
};
|
||||
|
||||
class PathEndUnconstrained : public PathEnd
|
||||
@@ -247,8 +246,8 @@ public:
|
||||
virtual Delay sourceClkInsertionDelay(const StaState *sta) const;
|
||||
virtual const Clock *targetClk(const StaState *sta) const;
|
||||
virtual const ClockEdge *targetClkEdge(const StaState *sta) const;
|
||||
virtual PathVertex *targetClkPath();
|
||||
virtual const PathVertex *targetClkPath() const;
|
||||
virtual Path *targetClkPath();
|
||||
virtual const Path *targetClkPath() const;
|
||||
virtual float targetClkTime(const StaState *sta) const;
|
||||
virtual float targetClkOffset(const StaState *sta) const;
|
||||
virtual Arrival targetClkArrival(const StaState *sta) const;
|
||||
@@ -263,13 +262,13 @@ public:
|
||||
virtual Slack slackNoCrpr(const StaState *sta) const;
|
||||
virtual int exceptPathCmp(const PathEnd *path_end,
|
||||
const StaState *sta) const;
|
||||
virtual void setPath(const Path *path);
|
||||
virtual void setPath(Path *path);
|
||||
|
||||
protected:
|
||||
PathEndClkConstrained(Path *path,
|
||||
PathVertex *clk_path);
|
||||
Path *clk_path);
|
||||
PathEndClkConstrained(Path *path,
|
||||
PathVertex *clk_path,
|
||||
Path *clk_path,
|
||||
Crpr crpr,
|
||||
bool crpr_valid);
|
||||
|
||||
@@ -281,7 +280,7 @@ protected:
|
||||
virtual Arrival targetClkArrivalNoCrpr(const StaState *sta) const;
|
||||
virtual Required requiredTimeNoCrpr(const StaState *sta) const;
|
||||
|
||||
PathVertex clk_path_;
|
||||
Path *clk_path_;
|
||||
mutable Crpr crpr_;
|
||||
mutable bool crpr_valid_;
|
||||
};
|
||||
@@ -296,10 +295,10 @@ public:
|
||||
|
||||
protected:
|
||||
PathEndClkConstrainedMcp(Path *path,
|
||||
PathVertex *clk_path,
|
||||
Path *clk_path,
|
||||
MultiCyclePath *mcp);
|
||||
PathEndClkConstrainedMcp(Path *path,
|
||||
PathVertex *clk_path,
|
||||
Path *clk_path,
|
||||
MultiCyclePath *mcp,
|
||||
Crpr crpr,
|
||||
bool crpr_valid);
|
||||
@@ -321,7 +320,7 @@ public:
|
||||
PathEndCheck(Path *path,
|
||||
TimingArc *check_arc,
|
||||
Edge *check_edge,
|
||||
PathVertex *clk_path,
|
||||
Path *clk_path,
|
||||
MultiCyclePath *mcp,
|
||||
const StaState *sta);
|
||||
virtual PathEnd *copy();
|
||||
@@ -342,7 +341,7 @@ protected:
|
||||
PathEndCheck(Path *path,
|
||||
TimingArc *check_arc,
|
||||
Edge *check_edge,
|
||||
PathVertex *clk_path,
|
||||
Path *clk_path,
|
||||
MultiCyclePath *mcp,
|
||||
Crpr crpr,
|
||||
bool crpr_valid);
|
||||
@@ -360,7 +359,7 @@ public:
|
||||
PathEndLatchCheck(Path *path,
|
||||
TimingArc *check_arc,
|
||||
Edge *check_edge,
|
||||
PathVertex *disable_path,
|
||||
Path *disable_path,
|
||||
MultiCyclePath *mcp,
|
||||
PathDelay *path_delay,
|
||||
const StaState *sta);
|
||||
@@ -371,8 +370,8 @@ public:
|
||||
virtual bool isLatchCheck() const { return true; }
|
||||
virtual PathDelay *pathDelay() const { return path_delay_; }
|
||||
virtual PathEnd *copy();
|
||||
PathVertex *latchDisable();
|
||||
const PathVertex *latchDisable() const;
|
||||
Path *latchDisable();
|
||||
const Path *latchDisable() const;
|
||||
virtual void reportShort(const ReportPath *report) const;
|
||||
virtual void reportFull(const ReportPath *report) const;
|
||||
virtual TimingRole *checkRole(const StaState *sta) const;
|
||||
@@ -403,8 +402,8 @@ protected:
|
||||
PathEndLatchCheck(Path *path,
|
||||
TimingArc *check_arc,
|
||||
Edge *check_edge,
|
||||
PathVertex *clk_path,
|
||||
PathVertex *disable,
|
||||
Path *clk_path,
|
||||
Path *disable,
|
||||
MultiCyclePath *mcp,
|
||||
PathDelay *path_delay,
|
||||
Delay src_clk_arrival,
|
||||
@@ -412,7 +411,7 @@ protected:
|
||||
bool crpr_valid);
|
||||
|
||||
private:
|
||||
PathVertex disable_path_;
|
||||
Path *disable_path_;
|
||||
PathDelay *path_delay_;
|
||||
// Source clk arrival for set_max_delay -ignore_clk_latency.
|
||||
Arrival src_clk_arrival_;
|
||||
@@ -426,7 +425,7 @@ class PathEndOutputDelay : public PathEndClkConstrainedMcp
|
||||
public:
|
||||
PathEndOutputDelay(OutputDelay *output_delay,
|
||||
Path *path,
|
||||
PathVertex *clk_path,
|
||||
Path *clk_path,
|
||||
MultiCyclePath *mcp,
|
||||
const StaState *sta);
|
||||
virtual PathEnd *copy();
|
||||
@@ -448,7 +447,7 @@ public:
|
||||
protected:
|
||||
PathEndOutputDelay(OutputDelay *output_delay,
|
||||
Path *path,
|
||||
PathVertex *clk_path,
|
||||
Path *clk_path,
|
||||
MultiCyclePath *mcp,
|
||||
Crpr crpr,
|
||||
bool crpr_valid);
|
||||
@@ -470,7 +469,7 @@ class PathEndGatedClock : public PathEndClkConstrainedMcp
|
||||
{
|
||||
public:
|
||||
PathEndGatedClock(Path *gating_ref,
|
||||
PathVertex *clk_path,
|
||||
Path *clk_path,
|
||||
TimingRole *check_role,
|
||||
MultiCyclePath *mcp,
|
||||
ArcDelay margin,
|
||||
@@ -488,7 +487,7 @@ public:
|
||||
|
||||
protected:
|
||||
PathEndGatedClock(Path *gating_ref,
|
||||
PathVertex *clk_path,
|
||||
Path *clk_path,
|
||||
TimingRole *check_role,
|
||||
MultiCyclePath *mcp,
|
||||
ArcDelay margin,
|
||||
@@ -504,7 +503,7 @@ class PathEndDataCheck : public PathEndClkConstrainedMcp
|
||||
public:
|
||||
PathEndDataCheck(DataCheck *check,
|
||||
Path *data_path,
|
||||
PathVertex *data_clk_path,
|
||||
Path *data_clk_path,
|
||||
MultiCyclePath *mcp,
|
||||
const StaState *sta);
|
||||
virtual PathEnd *copy();
|
||||
@@ -518,26 +517,24 @@ public:
|
||||
virtual ArcDelay margin(const StaState *sta) const;
|
||||
virtual int exceptPathCmp(const PathEnd *path_end,
|
||||
const StaState *sta) const;
|
||||
virtual const PathVertex *dataClkPath() const { return &data_clk_path_; }
|
||||
virtual const Path *dataClkPath() const { return data_clk_path_; }
|
||||
|
||||
protected:
|
||||
PathEndDataCheck(DataCheck *check,
|
||||
Path *data_path,
|
||||
PathVertex *data_clk_path,
|
||||
PathVertex *clk_path,
|
||||
Path *data_clk_path,
|
||||
Path *clk_path,
|
||||
MultiCyclePath *mcp,
|
||||
Crpr crpr,
|
||||
bool crpr_valid);
|
||||
void clkPath(PathVertex *path,
|
||||
const StaState *sta,
|
||||
// Return value.
|
||||
PathVertex &clk_path);
|
||||
Path *clkPath(Path *path,
|
||||
const StaState *sta);
|
||||
Arrival requiredTimeNoCrpr(const StaState *sta) const;
|
||||
// setup uses zero cycle default
|
||||
virtual int setupDefaultCycles() const { return 0; }
|
||||
|
||||
private:
|
||||
PathVertex data_clk_path_;
|
||||
Path *data_clk_path_;
|
||||
DataCheck *check_;
|
||||
};
|
||||
|
||||
@@ -554,7 +551,7 @@ public:
|
||||
// Path delay to timing check.
|
||||
PathEndPathDelay(PathDelay *path_delay,
|
||||
Path *path,
|
||||
PathVertex *clk_path,
|
||||
Path *clk_path,
|
||||
TimingArc *check_arc,
|
||||
Edge *check_edge,
|
||||
const StaState *sta);
|
||||
@@ -588,7 +585,7 @@ public:
|
||||
protected:
|
||||
PathEndPathDelay(PathDelay *path_delay,
|
||||
Path *path,
|
||||
PathVertex *clk_path,
|
||||
Path *clk_path,
|
||||
TimingArc *check_arc,
|
||||
Edge *check_edge,
|
||||
OutputDelay *output_delay,
|
||||
|
||||
+12
-14
@@ -27,7 +27,7 @@
|
||||
#include "TimingArc.hh"
|
||||
#include "GraphClass.hh"
|
||||
#include "SearchClass.hh"
|
||||
#include "PathRef.hh"
|
||||
#include "Path.hh"
|
||||
#include "StaState.hh"
|
||||
|
||||
namespace sta {
|
||||
@@ -48,33 +48,31 @@ public:
|
||||
size_t size() const { return paths_.size(); }
|
||||
// path(0) is the startpoint.
|
||||
// path(size()-1) is the endpoint.
|
||||
const PathRef *path(size_t index) const;
|
||||
TimingArc *prevArc(size_t index) const;
|
||||
const Path *path(size_t index) const;
|
||||
// Returns the path start point.
|
||||
// Register/Latch Q pin
|
||||
// Input pin
|
||||
const PathRef *startPath() const;
|
||||
const PathRef *startPrevPath() const;
|
||||
const PathRef *endPath() const;
|
||||
TimingArc *startPrevArc() const;
|
||||
const Path *startPath() const;
|
||||
const Path *startPrevPath() const;
|
||||
const Path *endPath() const;
|
||||
const TimingArc *startPrevArc() const;
|
||||
size_t startIndex() const;
|
||||
void clkPath(PathRef &clk_path) const;
|
||||
const Path *clkPath() const;
|
||||
void latchPaths(// Return values.
|
||||
const PathRef *&d_path,
|
||||
const PathRef *&q_path,
|
||||
const Path *&d_path,
|
||||
const Path *&q_path,
|
||||
Edge *&d_q_edge) const;
|
||||
|
||||
protected:
|
||||
void expandGenclk(PathRef *clk_path);
|
||||
void expandGenclk(const Path *clk_path);
|
||||
// Convert external index that starts at the path root
|
||||
// and increases to an index for paths_ (reversed).
|
||||
size_t pathsIndex(size_t index) const;
|
||||
|
||||
// The PathRefs in paths_ are in reverse order.
|
||||
// The Paths in paths_ are in reverse order.
|
||||
// paths_[0] is the endpoint.
|
||||
// paths_[size-1] is the beginning of the path.
|
||||
PathRefSeq paths_;
|
||||
TimingArcSeq prev_arcs_;
|
||||
ConstPathSeq paths_;
|
||||
// Index of the startpoint.
|
||||
size_t start_index_;
|
||||
const StaState *sta_;
|
||||
|
||||
@@ -74,12 +74,12 @@ public:
|
||||
PathGroupIterator *iterator();
|
||||
// This does NOT delete the path ends.
|
||||
void clear();
|
||||
static int group_path_count_max;
|
||||
static size_t group_path_count_max;
|
||||
|
||||
protected:
|
||||
PathGroup(const char *name,
|
||||
int group_path_count,
|
||||
int endpoint_path_count,
|
||||
size_t group_path_count,
|
||||
size_t endpoint_path_count,
|
||||
bool unique_pins,
|
||||
float min_slack,
|
||||
float max_slack,
|
||||
@@ -91,8 +91,8 @@ protected:
|
||||
void sort();
|
||||
|
||||
const char *name_;
|
||||
int group_path_count_;
|
||||
int endpoint_path_count_;
|
||||
size_t group_path_count_;
|
||||
size_t endpoint_path_count_;
|
||||
bool unique_pins_;
|
||||
float slack_min_;
|
||||
float slack_max_;
|
||||
|
||||
@@ -1,75 +0,0 @@
|
||||
// OpenSTA, Static Timing Analyzer
|
||||
// Copyright (c) 2025, Parallax Software, Inc.
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
//
|
||||
// The origin of this software must not be misrepresented; you must not
|
||||
// claim that you wrote the original software.
|
||||
//
|
||||
// Altered source versions must be plainly marked as such, and must not be
|
||||
// misrepresented as being the original software.
|
||||
//
|
||||
// This notice may not be removed or altered from any source distribution.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "SdcClass.hh"
|
||||
#include "SearchClass.hh"
|
||||
|
||||
namespace sta {
|
||||
|
||||
// "Pointer" to a previous path on a vertex (PathVertex) thru an edge/arc.
|
||||
class PathPrev
|
||||
{
|
||||
public:
|
||||
PathPrev();
|
||||
PathPrev(const PathVertex *path,
|
||||
const Edge *prev_edge,
|
||||
const TimingArc *prev_arc,
|
||||
const StaState *sta);
|
||||
void init();
|
||||
void init(const PathPrev *path);
|
||||
void init(const PathPrev &path);
|
||||
void init(const PathVertex *path,
|
||||
const Edge *prev_edge,
|
||||
const TimingArc *prev_arc,
|
||||
const StaState *sta);
|
||||
bool isNull() const;
|
||||
const char *name(const StaState *sta) const;
|
||||
Vertex *vertex(const StaState *sta) const;
|
||||
VertexId vertexId(const StaState *sta) const;
|
||||
Edge *prevEdge(const StaState *sta) const;
|
||||
TimingArc *prevArc(const StaState *sta) const;
|
||||
Tag *tag(const StaState *sta) const;
|
||||
TagIndex tagIndex() const { return prev_tag_index_; }
|
||||
Arrival arrival(const StaState *sta) const;
|
||||
void prevPath(const StaState *sta,
|
||||
// Return values.
|
||||
PathRef &prev_path,
|
||||
TimingArc *&prev_arc) const;
|
||||
|
||||
static bool equal(const PathPrev *path1,
|
||||
const PathPrev *path2);
|
||||
static bool equal(const PathPrev &path1,
|
||||
const PathPrev &path2);
|
||||
static int cmp(const PathPrev &path1,
|
||||
const PathPrev &path2);
|
||||
|
||||
protected:
|
||||
EdgeId prev_edge_id_;
|
||||
TagIndex prev_tag_index_:tag_index_bit_count;
|
||||
unsigned prev_arc_idx_:2;
|
||||
};
|
||||
|
||||
} // namespace
|
||||
@@ -1,94 +0,0 @@
|
||||
// OpenSTA, Static Timing Analyzer
|
||||
// Copyright (c) 2025, Parallax Software, Inc.
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
//
|
||||
// The origin of this software must not be misrepresented; you must not
|
||||
// claim that you wrote the original software.
|
||||
//
|
||||
// Altered source versions must be plainly marked as such, and must not be
|
||||
// misrepresented as being the original software.
|
||||
//
|
||||
// This notice may not be removed or altered from any source distribution.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "Vector.hh"
|
||||
#include "SearchClass.hh"
|
||||
#include "Path.hh"
|
||||
#include "PathVertex.hh"
|
||||
|
||||
namespace sta {
|
||||
|
||||
// Path reference to either a PathVertex or PathEnum.
|
||||
// This "could" be made smaller by using a union for
|
||||
// path_vertex_.vertex_ and path_enumed_ and a non-legal
|
||||
// value for path_vertex_.arrival_index_ (because a nullptr tag
|
||||
// in PathVertex is valid).
|
||||
class PathRef : public Path
|
||||
{
|
||||
public:
|
||||
PathRef();
|
||||
PathRef(const Path *path);
|
||||
PathRef(const PathRef &path);
|
||||
PathRef(const PathRef *path);
|
||||
PathRef(const PathVertex &path);
|
||||
void init();
|
||||
void init(const PathRef &path);
|
||||
void init(const PathRef *path);
|
||||
void init(const PathVertex &path);
|
||||
void init(const PathVertex *path);
|
||||
void init(const PathPrev &path,
|
||||
const StaState *sta);
|
||||
void init(Vertex *vertex,
|
||||
Tag *tag,
|
||||
int arrival_index);
|
||||
void init(PathEnumed *path);
|
||||
virtual void setRef(PathRef *ref) const;
|
||||
virtual bool isNull() const;
|
||||
virtual Vertex *vertex(const StaState *sta) const;
|
||||
virtual VertexId vertexId(const StaState *sta) const;
|
||||
virtual Tag *tag(const StaState *sta) const;
|
||||
virtual TagIndex tagIndex(const StaState *sta) const;
|
||||
virtual const RiseFall *transition(const StaState *sta) const;
|
||||
virtual int rfIndex(const StaState *sta) const;
|
||||
virtual PathAnalysisPt *pathAnalysisPt(const StaState *sta) const;
|
||||
virtual PathAPIndex pathAnalysisPtIndex(const StaState *sta) const;
|
||||
void arrivalIndex(int &arrival_index,
|
||||
bool &arrival_exists) const;
|
||||
virtual Arrival arrival(const StaState *sta) const;
|
||||
virtual void setArrival(Arrival arrival,
|
||||
const StaState *sta);
|
||||
virtual const Required &required(const StaState *sta) const;
|
||||
virtual void setRequired(const Required &required,
|
||||
const StaState *sta);
|
||||
virtual void prevPath(const StaState *sta,
|
||||
// Return values.
|
||||
PathRef &prev_path,
|
||||
TimingArc *&prev_arc) const;
|
||||
void deleteRep();
|
||||
|
||||
using Path::setRef;
|
||||
using Path::prevPath;
|
||||
|
||||
protected:
|
||||
PathVertex path_vertex_;
|
||||
PathEnumed *path_enumed_;
|
||||
|
||||
private:
|
||||
friend class PathVertex;
|
||||
friend class PathEnumed;
|
||||
};
|
||||
|
||||
} // namespace
|
||||
@@ -1,158 +0,0 @@
|
||||
// OpenSTA, Static Timing Analyzer
|
||||
// Copyright (c) 2025, Parallax Software, Inc.
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
//
|
||||
// The origin of this software must not be misrepresented; you must not
|
||||
// claim that you wrote the original software.
|
||||
//
|
||||
// Altered source versions must be plainly marked as such, and must not be
|
||||
// misrepresented as being the original software.
|
||||
//
|
||||
// This notice may not be removed or altered from any source distribution.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "SearchClass.hh"
|
||||
#include "Path.hh"
|
||||
|
||||
namespace sta {
|
||||
|
||||
class PathPrev;
|
||||
class PathVertexPtr;
|
||||
|
||||
// Implements Path API for a vertex.
|
||||
class PathVertex : public Path
|
||||
{
|
||||
public:
|
||||
PathVertex();
|
||||
PathVertex(const PathVertex &path);
|
||||
PathVertex(const PathVertex *path);
|
||||
PathVertex(const PathPrev *path,
|
||||
const StaState *sta);
|
||||
PathVertex(const PathPrev &path,
|
||||
const StaState *sta);
|
||||
PathVertex(const PathVertexPtr &path,
|
||||
const StaState *sta);
|
||||
// If tag is not in the vertex tag group isNull() is true.
|
||||
PathVertex(Vertex *vertex,
|
||||
Tag *tag,
|
||||
const StaState *sta);
|
||||
PathVertex(Vertex *vertex,
|
||||
Tag *tag,
|
||||
int arrival_index);
|
||||
void init();
|
||||
void init(const PathPrev *path,
|
||||
const StaState *sta);
|
||||
void init(const PathPrev &path,
|
||||
const StaState *sta);
|
||||
void init(const PathVertexPtr &path,
|
||||
const StaState *sta);
|
||||
void init(Vertex *vertex,
|
||||
Tag *tag,
|
||||
const StaState *sta);
|
||||
void init(Vertex *vertex,
|
||||
Tag *tag,
|
||||
int arrival_index);
|
||||
void operator=(const PathVertex &path);
|
||||
virtual bool isNull() const;
|
||||
virtual void setRef(PathRef *ref) const;
|
||||
virtual Vertex *vertex(const StaState *) const { return vertex_; }
|
||||
virtual VertexId vertexId(const StaState *sta) const;
|
||||
virtual Tag *tag(const StaState *) const { return tag_; }
|
||||
virtual TagIndex tagIndex(const StaState *sta) const;
|
||||
virtual const RiseFall *transition(const StaState *) const;
|
||||
virtual int rfIndex(const StaState *sta) const;
|
||||
virtual PathAnalysisPt *pathAnalysisPt(const StaState *sta) const;
|
||||
virtual PathAPIndex pathAnalysisPtIndex(const StaState *sta) const;
|
||||
void arrivalIndex(int &arrival_index,
|
||||
bool &arrival_exists) const;
|
||||
void setArrivalIndex(int arrival_index);
|
||||
virtual Arrival arrival(const StaState *sta) const;
|
||||
virtual void setArrival(Arrival arrival,
|
||||
const StaState *sta);
|
||||
virtual const Required &required(const StaState *sta) const;
|
||||
virtual void setRequired(const Required &required,
|
||||
const StaState *sta);
|
||||
virtual void prevPath(const StaState *sta,
|
||||
// Return values.
|
||||
PathRef &prev_path,
|
||||
TimingArc *&prev_arc) const;
|
||||
void prevPath(const StaState *sta,
|
||||
// Return values.
|
||||
PathVertex &prev_path) const;
|
||||
void prevPath(const StaState *sta,
|
||||
// Return values.
|
||||
PathVertex &prev_path,
|
||||
TimingArc *&prev_arc) const;
|
||||
static bool equal(const PathVertex *path1,
|
||||
const PathVertex *path2);
|
||||
|
||||
using Path::setRef;
|
||||
using Path::prevPath;
|
||||
|
||||
protected:
|
||||
Vertex *vertex_;
|
||||
Tag *tag_;
|
||||
int arrival_index_;
|
||||
|
||||
private:
|
||||
friend class PathRef;
|
||||
friend class VertexPathIterator;
|
||||
friend bool pathVertexEqual(const PathVertex *path1,
|
||||
const PathVertex *path2);
|
||||
};
|
||||
|
||||
// Iterator for vertex paths.
|
||||
class VertexPathIterator : public Iterator<PathVertex*>
|
||||
{
|
||||
public:
|
||||
// Iterate over all vertex paths.
|
||||
VertexPathIterator(Vertex *vertex,
|
||||
const StaState *sta);
|
||||
// Iterate over vertex paths with the same transition and
|
||||
// analysis pt but different tags.
|
||||
VertexPathIterator(Vertex *vertex,
|
||||
const RiseFall *rf,
|
||||
const PathAnalysisPt *path_ap,
|
||||
const StaState *sta);
|
||||
// Iterate over vertex paths with the same transition and
|
||||
// analysis pt min/max but different tags.
|
||||
VertexPathIterator(Vertex *vertex,
|
||||
const RiseFall *rf,
|
||||
const MinMax *min_max,
|
||||
const StaState *sta);
|
||||
VertexPathIterator(Vertex *vertex,
|
||||
const RiseFall *rf,
|
||||
const PathAnalysisPt *path_ap,
|
||||
const MinMax *min_max,
|
||||
const StaState *sta);
|
||||
virtual ~VertexPathIterator();
|
||||
virtual bool hasNext();
|
||||
virtual PathVertex *next();
|
||||
|
||||
private:
|
||||
void findNext();
|
||||
|
||||
const Search *search_;
|
||||
Vertex *vertex_;
|
||||
const RiseFall *rf_;
|
||||
const PathAnalysisPt *path_ap_;
|
||||
const MinMax *min_max_;
|
||||
ArrivalMap::Iterator arrival_iter_;
|
||||
PathVertex path_;
|
||||
PathVertex next_;
|
||||
};
|
||||
|
||||
} // namespace
|
||||
@@ -1,63 +0,0 @@
|
||||
// OpenSTA, Static Timing Analyzer
|
||||
// Copyright (c) 2025, Parallax Software, Inc.
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
//
|
||||
// The origin of this software must not be misrepresented; you must not
|
||||
// claim that you wrote the original software.
|
||||
//
|
||||
// Altered source versions must be plainly marked as such, and must not be
|
||||
// misrepresented as being the original software.
|
||||
//
|
||||
// This notice may not be removed or altered from any source distribution.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "SearchClass.hh"
|
||||
|
||||
namespace sta {
|
||||
|
||||
// "Pointer" to a vertex path because there is no real path object to point to.
|
||||
class PathVertexPtr
|
||||
{
|
||||
public:
|
||||
PathVertexPtr();
|
||||
PathVertexPtr(const PathVertex *path,
|
||||
const StaState *sta);
|
||||
void init();
|
||||
void init(const PathVertexPtr *path);
|
||||
void init(const PathVertexPtr &path);
|
||||
void init(const PathVertex *path,
|
||||
const StaState *sta);
|
||||
bool isNull() const;
|
||||
const char *name(const StaState *sta) const;
|
||||
Vertex *vertex(const StaState *sta) const;
|
||||
VertexId vertexId() const { return vertex_id_; }
|
||||
Tag *tag(const StaState *sta) const;
|
||||
TagIndex tagIndex() const { return tag_index_; }
|
||||
Arrival arrival(const StaState *sta) const;
|
||||
|
||||
static bool equal(const PathVertexPtr *path1,
|
||||
const PathVertexPtr *path2);
|
||||
static bool equal(const PathVertexPtr &path1,
|
||||
const PathVertexPtr &path2);
|
||||
static int cmp(const PathVertexPtr &path1,
|
||||
const PathVertexPtr &path2);
|
||||
|
||||
protected:
|
||||
VertexId vertex_id_;
|
||||
TagIndex tag_index_;
|
||||
};
|
||||
|
||||
} // namespace
|
||||
@@ -55,7 +55,7 @@ public:
|
||||
type_library, type_cell, type_port,
|
||||
type_liberty_library, type_liberty_cell, type_liberty_port,
|
||||
type_instance, type_pin, type_pins, type_net,
|
||||
type_clk, type_clks, type_path_refs, type_pwr_activity };
|
||||
type_clk, type_clks, type_paths, type_pwr_activity };
|
||||
PropertyValue();
|
||||
PropertyValue(const char *value);
|
||||
PropertyValue(string &value);
|
||||
@@ -77,7 +77,7 @@ public:
|
||||
PropertyValue(const Clock *value);
|
||||
PropertyValue(ClockSeq *value);
|
||||
PropertyValue(ClockSet *value);
|
||||
PropertyValue(PathRefSeq *value);
|
||||
PropertyValue(ConstPathSeq *value);
|
||||
PropertyValue(PwrActivity *value);
|
||||
// Copy constructor.
|
||||
PropertyValue(const PropertyValue &props);
|
||||
@@ -103,7 +103,7 @@ public:
|
||||
const Net *net() const { return net_; }
|
||||
const Clock *clock() const { return clk_; }
|
||||
ClockSeq *clocks() const { return clks_; }
|
||||
PathRefSeq *pathRefs() const { return path_refs_; }
|
||||
ConstPathSeq *paths() const { return paths_; }
|
||||
PwrActivity pwrActivity() const { return pwr_activity_; }
|
||||
|
||||
// Copy assignment.
|
||||
@@ -129,7 +129,7 @@ private:
|
||||
const Net *net_;
|
||||
const Clock *clk_;
|
||||
ClockSeq *clks_;
|
||||
PathRefSeq *path_refs_;
|
||||
ConstPathSeq *paths_;
|
||||
PwrActivity pwr_activity_;
|
||||
};
|
||||
const Unit *unit_;
|
||||
@@ -196,7 +196,7 @@ getProperty(PathEnd *end,
|
||||
Sta *sta);
|
||||
|
||||
PropertyValue
|
||||
getProperty(PathRef *end,
|
||||
getProperty(Path *end,
|
||||
const char *property,
|
||||
Sta *sta);
|
||||
|
||||
|
||||
+47
-19
@@ -1,4 +1,4 @@
|
||||
// OpenSTA, Static Timing Analyzer
|
||||
// opensta, Static Timing Analyzer
|
||||
// Copyright (c) 2025, Parallax Software, Inc.
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
@@ -39,6 +39,7 @@
|
||||
#include "SearchClass.hh"
|
||||
#include "SearchPred.hh"
|
||||
#include "VertexVisitor.hh"
|
||||
#include "Path.hh"
|
||||
|
||||
namespace sta {
|
||||
|
||||
@@ -99,8 +100,8 @@ public:
|
||||
bool unconstrained,
|
||||
const Corner *corner,
|
||||
const MinMaxAll *min_max,
|
||||
int group_path_count,
|
||||
int endpoint_path_count,
|
||||
size_t group_path_count,
|
||||
size_t endpoint_path_count,
|
||||
bool unique_pins,
|
||||
float slack_min,
|
||||
float slack_max,
|
||||
@@ -126,6 +127,7 @@ public:
|
||||
void requiredInvalid(const Pin *pin);
|
||||
// Vertex will be deleted.
|
||||
void deleteVertexBefore(Vertex *vertex);
|
||||
void deleteEdgeBefore(Edge *edge);
|
||||
// Find all arrival times (propatating thru latches).
|
||||
void findAllArrivals();
|
||||
// Find all arrivals (without latch propagation).
|
||||
@@ -226,7 +228,7 @@ public:
|
||||
TagIndex tagCount() const;
|
||||
TagGroupIndex tagGroupCount() const;
|
||||
void reportTagGroups() const;
|
||||
void reportArrivalCountHistogram() const;
|
||||
void reportPathCountHistogram() const;
|
||||
virtual int clkInfoCount() const;
|
||||
virtual bool isEndpoint(Vertex *vertex) const;
|
||||
virtual bool isEndpoint(Vertex *vertex,
|
||||
@@ -252,7 +254,7 @@ public:
|
||||
const RiseFall *to_rf,
|
||||
const MinMax *min_max,
|
||||
const PathAnalysisPt *path_ap);
|
||||
Tag *thruClkTag(PathVertex *from_path,
|
||||
Tag *thruClkTag(Path *from_path,
|
||||
Vertex *from_vertex,
|
||||
Tag *from_tag,
|
||||
bool to_propagates_clk,
|
||||
@@ -261,7 +263,7 @@ public:
|
||||
bool arc_delay_min_max_eq,
|
||||
const MinMax *min_max,
|
||||
const PathAnalysisPt *path_ap);
|
||||
ClkInfo *thruClkInfo(PathVertex *from_path,
|
||||
ClkInfo *thruClkInfo(Path *from_path,
|
||||
Vertex *from_vertex,
|
||||
ClkInfo *from_clk_info,
|
||||
bool from_is_clk,
|
||||
@@ -273,7 +275,7 @@ public:
|
||||
const MinMax *min_max,
|
||||
const PathAnalysisPt *path_ap);
|
||||
ClkInfo *clkInfoWithCrprClkPath(ClkInfo *from_clk_info,
|
||||
PathVertex *from_path,
|
||||
Path *from_path,
|
||||
const PathAnalysisPt *path_ap);
|
||||
void seedClkArrivals(const Pin *pin,
|
||||
Vertex *vertex,
|
||||
@@ -339,7 +341,7 @@ public:
|
||||
float latency,
|
||||
ClockUncertainties *uncertainties,
|
||||
const PathAnalysisPt *path_ap,
|
||||
PathVertex *crpr_clk_path);
|
||||
Path *crpr_clk_path);
|
||||
ClkInfo *findClkInfo(const ClockEdge *clk_edge,
|
||||
const Pin *clk_src,
|
||||
bool is_propagated,
|
||||
@@ -378,7 +380,33 @@ public:
|
||||
bool unconstrained,
|
||||
bool thru_latches);
|
||||
VertexSeq filteredEndpoints();
|
||||
bool alwaysSavePrevPaths() const { return always_save_prev_paths_; }
|
||||
|
||||
Arrival *arrivals(const Vertex *vertex) const;
|
||||
Arrival *makeArrivals(const Vertex *vertex,
|
||||
uint32_t count);
|
||||
void deleteArrivals(const Vertex *vertex);
|
||||
Required *requireds(const Vertex *vertex) const;
|
||||
bool hasRequireds(const Vertex *vertex) const;
|
||||
Required *makeRequireds(const Vertex *vertex,
|
||||
uint32_t count);
|
||||
void deleteRequireds(const Vertex *vertex);
|
||||
size_t arrivalCount() const;
|
||||
size_t requiredCount() const;
|
||||
Path *prevPaths(const Vertex *vertex) const;
|
||||
Path *makePrevPaths(const Vertex *vertex,
|
||||
uint32_t count);
|
||||
void deletePrevPaths(Vertex *vertex);
|
||||
bool crprPathPruningDisabled(const Vertex *vertex) const;
|
||||
void setCrprPathPruningDisabled(const Vertex *vertex,
|
||||
bool disabled);
|
||||
bool bfsInQueue(const Vertex *vertex,
|
||||
BfsIndex index) const;
|
||||
void setBfsInQueue(const Vertex *vertex,
|
||||
BfsIndex index,
|
||||
bool value);
|
||||
TagGroupIndex tagGroupIndex(const Vertex *vertex) const;
|
||||
void setTagGroupIndex(const Vertex *vertex,
|
||||
TagGroupIndex tag_index);
|
||||
|
||||
protected:
|
||||
void init(StaState *sta);
|
||||
@@ -544,7 +572,8 @@ protected:
|
||||
void tnsNotifyBefore(Vertex *vertex);
|
||||
bool matchesFilterTo(Path *path,
|
||||
const ClockEdge *to_clk_edge) const;
|
||||
PathRef pathClkPathArrival1(const Path *path) const;
|
||||
const Path *pathClkPathArrival1(const Path *path) const;
|
||||
void deletePathsState(const Vertex *vertex) const;
|
||||
void clocks(const Vertex *vertex,
|
||||
// Return value.
|
||||
ClockSet &clks) const;
|
||||
@@ -619,7 +648,6 @@ protected:
|
||||
std::mutex pending_latch_outputs_lock_;
|
||||
VertexSet *endpoints_;
|
||||
VertexSet *invalid_endpoints_;
|
||||
bool always_save_prev_paths_;
|
||||
// Filter exception to tag arrivals for
|
||||
// report_timing -from pin|inst -through.
|
||||
// -to is always nullptr.
|
||||
@@ -682,7 +710,7 @@ protected:
|
||||
bool visitArc(const Pin *from_pin,
|
||||
Vertex *from_vertex,
|
||||
const RiseFall *from_rf,
|
||||
PathVertex *from_path,
|
||||
Path *from_path,
|
||||
Edge *edge,
|
||||
TimingArc *arc,
|
||||
const Pin *to_pin,
|
||||
@@ -694,7 +722,7 @@ protected:
|
||||
virtual bool visitFromPath(const Pin *from_pin,
|
||||
Vertex *from_vertex,
|
||||
const RiseFall *from_rf,
|
||||
PathVertex *from_path,
|
||||
Path *from_path,
|
||||
Edge *edge,
|
||||
TimingArc *arc,
|
||||
const Pin *to_pin,
|
||||
@@ -707,7 +735,7 @@ protected:
|
||||
Vertex *from_vertex,
|
||||
const RiseFall *from_rf,
|
||||
Tag *from_tag,
|
||||
PathVertex *from_path,
|
||||
Path *from_path,
|
||||
const Arrival &from_arrival,
|
||||
Edge *edge,
|
||||
TimingArc *arc,
|
||||
@@ -740,7 +768,7 @@ public:
|
||||
Vertex *from_vertex,
|
||||
const RiseFall *from_rf,
|
||||
Tag *from_tag,
|
||||
PathVertex *from_path,
|
||||
Path *from_path,
|
||||
const Arrival &from_arrival,
|
||||
Edge *edge,
|
||||
TimingArc *arc,
|
||||
@@ -781,14 +809,14 @@ public:
|
||||
RequiredCmp();
|
||||
void requiredsInit(Vertex *vertex,
|
||||
const StaState *sta);
|
||||
void requiredSet(int arrival_index,
|
||||
Required required,
|
||||
void requiredSet(size_t path_index,
|
||||
Required &required,
|
||||
const MinMax *min_max,
|
||||
const StaState *sta);
|
||||
// Return true if the requireds changed.
|
||||
bool requiredsSave(Vertex *vertex,
|
||||
const StaState *sta);
|
||||
Required required(int arrival_index);
|
||||
Required required(size_t path_index);
|
||||
|
||||
protected:
|
||||
ArrivalSeq requireds_;
|
||||
@@ -811,7 +839,7 @@ protected:
|
||||
Vertex *from_vertex,
|
||||
const RiseFall *from_rf,
|
||||
Tag *from_tag,
|
||||
PathVertex *from_path,
|
||||
Path *from_path,
|
||||
const Arrival &from_arrival,
|
||||
Edge *edge,
|
||||
TimingArc *arc,
|
||||
|
||||
@@ -41,12 +41,6 @@ namespace sta {
|
||||
class Search;
|
||||
class Corner;
|
||||
class Path;
|
||||
class PathRep;
|
||||
class PathVertex;
|
||||
class PathPrev;
|
||||
class PathVertexPtr;
|
||||
class PathRef;
|
||||
class PathEnumed;
|
||||
class PathEnd;
|
||||
class PathGroup;
|
||||
class Tag;
|
||||
@@ -120,12 +114,12 @@ typedef Vector<MaxSkewCheck*> MaxSkewCheckSeq;
|
||||
typedef StringSet PathGroupNameSet;
|
||||
typedef Vector<PathEnd*> PathEndSeq;
|
||||
typedef Vector<Arrival> ArrivalSeq;
|
||||
typedef Map<Vertex*, int> VertexPathCountMap;
|
||||
typedef UnorderedMap<Tag*, int, TagMatchHash, TagMatchEqual> ArrivalMap;
|
||||
typedef Vector<PathVertex> PathVertexSeq;
|
||||
typedef Map<Vertex*, size_t> VertexPathCountMap;
|
||||
typedef UnorderedMap<Tag*, size_t, TagMatchHash, TagMatchEqual> PathIndexMap;
|
||||
typedef Vector<Slack> SlackSeq;
|
||||
typedef Delay Crpr;
|
||||
typedef Vector<PathRef> PathRefSeq;
|
||||
typedef Vector<Path*> PathSeq;
|
||||
typedef vector<const Path*> ConstPathSeq;
|
||||
|
||||
enum class ReportPathFormat { full,
|
||||
full_clock,
|
||||
|
||||
+17
-18
@@ -1000,21 +1000,21 @@ public:
|
||||
VertexPathIterator *vertexPathIterator(Vertex *vertex,
|
||||
const RiseFall *rf,
|
||||
const MinMax *min_max);
|
||||
PathRef vertexWorstArrivalPath(Vertex *vertex,
|
||||
const RiseFall *rf,
|
||||
const MinMax *min_max);
|
||||
PathRef vertexWorstArrivalPath(Vertex *vertex,
|
||||
const MinMax *min_max);
|
||||
PathRef vertexWorstRequiredPath(Vertex *vertex,
|
||||
const RiseFall *rf,
|
||||
const MinMax *min_max);
|
||||
PathRef vertexWorstRequiredPath(Vertex *vertex,
|
||||
const MinMax *min_max);
|
||||
PathRef vertexWorstSlackPath(Vertex *vertex,
|
||||
const MinMax *min_max);
|
||||
PathRef vertexWorstSlackPath(Vertex *vertex,
|
||||
Path *vertexWorstArrivalPath(Vertex *vertex,
|
||||
const RiseFall *rf,
|
||||
const MinMax *min_max);
|
||||
Path *vertexWorstArrivalPath(Vertex *vertex,
|
||||
const MinMax *min_max);
|
||||
Path *vertexWorstRequiredPath(Vertex *vertex,
|
||||
const RiseFall *rf,
|
||||
const MinMax *min_max);
|
||||
Path *vertexWorstRequiredPath(Vertex *vertex,
|
||||
const MinMax *min_max);
|
||||
Path *vertexWorstSlackPath(Vertex *vertex,
|
||||
const MinMax *min_max);
|
||||
Path *vertexWorstSlackPath(Vertex *vertex,
|
||||
const RiseFall *rf,
|
||||
const MinMax *min_max);
|
||||
|
||||
// Find the min clock period for rise/rise and fall/fall paths of a clock
|
||||
// using the slack. This does NOT correctly predict min period when there
|
||||
@@ -1112,10 +1112,9 @@ public:
|
||||
TagIndex tagCount() const;
|
||||
TagGroupIndex tagGroupCount() const;
|
||||
int clkInfoCount() const;
|
||||
int arrivalCount() const;
|
||||
int requiredCount() const;
|
||||
int vertexArrivalCount(Vertex *vertex) const;
|
||||
Vertex *maxArrivalCountVertex() const;
|
||||
int pathCount() const;
|
||||
int vertexPathCount(Vertex *vertex) const;
|
||||
Vertex *maxPathCountVertex() const;
|
||||
|
||||
LogicValue simLogicValue(const Pin *pin);
|
||||
// Propagate liberty constant functions and pins tied high/low through
|
||||
@@ -1314,7 +1313,7 @@ public:
|
||||
LibertyLibrarySeq *map_libs);
|
||||
LibertyCellSeq *equivCells(LibertyCell *cell);
|
||||
|
||||
void writePathSpice(PathRef *path,
|
||||
void writePathSpice(Path *path,
|
||||
const char *spice_filename,
|
||||
const char *subckt_filename,
|
||||
const char *lib_subckt_filename,
|
||||
|
||||
@@ -85,7 +85,7 @@ protected:
|
||||
Path *path,
|
||||
const RiseFall *end_rf,
|
||||
const ClockEdge *tgt_clk_edge,
|
||||
PathVertex *ref_path,
|
||||
Path *ref_path,
|
||||
const MinMax *min_max,
|
||||
PathEndVisitor *visitor,
|
||||
bool &is_constrained);
|
||||
|
||||
Reference in New Issue
Block a user