Sta::clockDomains
Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
parent
f5314d1f22
commit
ec179707be
BIN
doc/OpenSTA.odt
BIN
doc/OpenSTA.odt
Binary file not shown.
BIN
doc/OpenSTA.pdf
BIN
doc/OpenSTA.pdf
Binary file not shown.
|
|
@ -176,9 +176,12 @@ public:
|
||||||
bool isClock(const Vertex *vertex) const;
|
bool isClock(const Vertex *vertex) const;
|
||||||
// Vertices on propagated generated clock source paths.
|
// Vertices on propagated generated clock source paths.
|
||||||
bool isGenClkSrc(const Vertex *vertex) const;
|
bool isGenClkSrc(const Vertex *vertex) const;
|
||||||
// The set of clocks that arrive at vertex.
|
// The set of clocks that arrive at vertex in the clock network.
|
||||||
ClockSet clocks(const Vertex *vertex) const;
|
ClockSet clocks(const Vertex *vertex) const;
|
||||||
ClockSet clocks(const Pin *pin) const;
|
ClockSet clocks(const Pin *pin) const;
|
||||||
|
// Clock domains for a vertex.
|
||||||
|
ClockSet clockDomains(const Vertex *vertex) const;
|
||||||
|
ClockSet clockDomains(const Pin *pin) const;
|
||||||
void visitStartpoints(VertexVisitor *visitor);
|
void visitStartpoints(VertexVisitor *visitor);
|
||||||
void visitEndpoints(VertexVisitor *visitor);
|
void visitEndpoints(VertexVisitor *visitor);
|
||||||
bool havePathGroups() const;
|
bool havePathGroups() const;
|
||||||
|
|
@ -526,6 +529,9 @@ protected:
|
||||||
void clocks(const Vertex *vertex,
|
void clocks(const Vertex *vertex,
|
||||||
// Return value.
|
// Return value.
|
||||||
ClockSet &clks) const;
|
ClockSet &clks) const;
|
||||||
|
void clockDomains(const Vertex *vertex,
|
||||||
|
// Return value.
|
||||||
|
ClockSet &clks) const;
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -595,8 +595,10 @@ public:
|
||||||
bool thru_disabled,
|
bool thru_disabled,
|
||||||
bool thru_constants);
|
bool thru_constants);
|
||||||
|
|
||||||
// The set of clocks that reach pin.
|
// The set of clocks that arrive at vertex in the clock network.
|
||||||
ClockSet clocks(const Pin *pin);
|
ClockSet clocks(const Pin *pin);
|
||||||
|
// Clock domains for a pin.
|
||||||
|
ClockSet clockDomains(const Pin *pin);
|
||||||
|
|
||||||
void checkSlewLimitPreamble();
|
void checkSlewLimitPreamble();
|
||||||
// Return pins with the min/max slew limit slack.
|
// Return pins with the min/max slew limit slack.
|
||||||
|
|
|
||||||
|
|
@ -882,6 +882,10 @@ getProperty(const Pin *pin,
|
||||||
ClockSet clks = sta->clocks(pin);
|
ClockSet clks = sta->clocks(pin);
|
||||||
return PropertyValue(&clks);
|
return PropertyValue(&clks);
|
||||||
}
|
}
|
||||||
|
else if (stringEqual(property, "clock_domains")) {
|
||||||
|
ClockSet clks = sta->clockDomains(pin);
|
||||||
|
return PropertyValue(&clks);
|
||||||
|
}
|
||||||
else if (stringEqual(property, "activity")) {
|
else if (stringEqual(property, "activity")) {
|
||||||
PwrActivity activity = sta->findClkedActivity(pin);
|
PwrActivity activity = sta->findClkedActivity(pin);
|
||||||
return PropertyValue(&activity);
|
return PropertyValue(&activity);
|
||||||
|
|
|
||||||
|
|
@ -3018,6 +3018,42 @@ Search::timingDerate(Vertex *from_vertex,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ClockSet
|
||||||
|
Search::clockDomains(const Vertex *vertex) const
|
||||||
|
{
|
||||||
|
ClockSet clks;
|
||||||
|
clockDomains(vertex, clks);
|
||||||
|
return clks;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Search::clockDomains(const Vertex *vertex,
|
||||||
|
// Return value.
|
||||||
|
ClockSet &clks) const
|
||||||
|
{
|
||||||
|
VertexPathIterator path_iter(const_cast<Vertex*>(vertex), this);
|
||||||
|
while (path_iter.hasNext()) {
|
||||||
|
Path *path = path_iter.next();
|
||||||
|
const Clock *clk = path->clock(this);
|
||||||
|
if (clk)
|
||||||
|
clks.insert(const_cast<Clock *>(clk));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ClockSet
|
||||||
|
Search::clockDomains(const Pin *pin) const
|
||||||
|
{
|
||||||
|
ClockSet clks;
|
||||||
|
Vertex *vertex;
|
||||||
|
Vertex *bidirect_drvr_vertex;
|
||||||
|
graph_->pinVertices(pin, vertex, bidirect_drvr_vertex);
|
||||||
|
if (vertex)
|
||||||
|
clockDomains(vertex, clks);
|
||||||
|
if (bidirect_drvr_vertex)
|
||||||
|
clockDomains(bidirect_drvr_vertex, clks);
|
||||||
|
return clks;
|
||||||
|
}
|
||||||
|
|
||||||
ClockSet
|
ClockSet
|
||||||
Search::clocks(const Vertex *vertex) const
|
Search::clocks(const Vertex *vertex) const
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -4681,6 +4681,14 @@ Sta::clocks(const Pin *pin)
|
||||||
return search_->clocks(pin);
|
return search_->clocks(pin);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ClockSet
|
||||||
|
Sta::clockDomains(const Pin *pin)
|
||||||
|
{
|
||||||
|
searchPreamble();
|
||||||
|
search_->findAllArrivals();
|
||||||
|
return search_->clockDomains(pin);
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
InstanceSet
|
InstanceSet
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue