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:
James Cherry
2025-03-26 18:21:03 -07:00
parent 950d5b3383
commit 8992827b5b
69 changed files with 2148 additions and 3883 deletions
+7 -24
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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_;
+5 -5
View File
@@ -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_;
-75
View File
@@ -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
-94
View File
@@ -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
-158
View File
@@ -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
-63
View File
@@ -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
+5 -5
View File
@@ -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
View File
@@ -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,
+4 -10
View File
@@ -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
View File
@@ -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,
+1 -1
View File
@@ -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);