hpin clk disables without graph
This commit is contained in:
parent
7e71edecf2
commit
f60b82fee5
|
|
@ -1245,9 +1245,6 @@ protected:
|
||||||
void disconnectPinBefore(Pin *pin,
|
void disconnectPinBefore(Pin *pin,
|
||||||
ExceptionPathSet *exceptions);
|
ExceptionPathSet *exceptions);
|
||||||
void clockGroupsDeleteClkRefs(Clock *clk);
|
void clockGroupsDeleteClkRefs(Clock *clk);
|
||||||
void makeVertexClkHpinDisables(Clock *clk,
|
|
||||||
Vertex *vertex,
|
|
||||||
FindClkHpinDisables &visitor);
|
|
||||||
void clearGroupPathMap();
|
void clearGroupPathMap();
|
||||||
|
|
||||||
AnalysisType analysis_type_;
|
AnalysisType analysis_type_;
|
||||||
|
|
|
||||||
37
sdc/Sdc.cc
37
sdc/Sdc.cc
|
|
@ -1392,16 +1392,20 @@ Sdc::ensureClkHpinDisables()
|
||||||
for (auto clk : clocks_) {
|
for (auto clk : clocks_) {
|
||||||
for (Pin *src : clk->pins()) {
|
for (Pin *src : clk->pins()) {
|
||||||
if (network_->isHierarchical(src)) {
|
if (network_->isHierarchical(src)) {
|
||||||
FindClkHpinDisables visitor(clk, network_, this);
|
FindClkHpinDisables visitor1(clk, network_, this);
|
||||||
visitHpinDrvrLoads(src, network_, &visitor);
|
visitHpinDrvrLoads(src, network_, &visitor1);
|
||||||
|
PinSeq loads, drvrs;
|
||||||
|
PinSet visited_drvrs;
|
||||||
|
FindNetDrvrLoads visitor2(nullptr, visited_drvrs, loads, drvrs, network_);
|
||||||
|
network_->visitConnectedPins(src, visitor2);
|
||||||
|
|
||||||
// Disable fanouts from the src driver pins that do
|
// Disable fanouts from the src driver pins that do
|
||||||
// not go thru the hierarchical src pin.
|
// not go thru the hierarchical src pin.
|
||||||
for (Pin *lpin : clk->leafPins()) {
|
for (Pin *drvr : drvrs) {
|
||||||
Vertex *vertex, *bidirect_drvr_vertex;
|
for (Pin *load : loads) {
|
||||||
graph_->pinVertices(lpin, vertex, bidirect_drvr_vertex);
|
if (!visitor1.drvrLoadExists(drvr, load))
|
||||||
makeVertexClkHpinDisables(clk, vertex, visitor);
|
makeClkHpinDisable(clk, drvr, load);
|
||||||
if (bidirect_drvr_vertex)
|
}
|
||||||
makeVertexClkHpinDisables(clk, bidirect_drvr_vertex, visitor);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1410,23 +1414,6 @@ Sdc::ensureClkHpinDisables()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
Sdc::makeVertexClkHpinDisables(Clock *clk,
|
|
||||||
Vertex *vertex,
|
|
||||||
FindClkHpinDisables &visitor)
|
|
||||||
{
|
|
||||||
VertexOutEdgeIterator edge_iter(vertex, graph_);
|
|
||||||
while (edge_iter.hasNext()) {
|
|
||||||
Edge *edge = edge_iter.next();
|
|
||||||
if (edge->isWire()) {
|
|
||||||
Pin *drvr = edge->from(graph_)->pin();
|
|
||||||
Pin *load = edge->to(graph_)->pin();
|
|
||||||
if (!visitor.drvrLoadExists(drvr, load))
|
|
||||||
makeClkHpinDisable(clk, drvr, load);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
Sdc::makeClkHpinDisable(Clock *clk,
|
Sdc::makeClkHpinDisable(Clock *clk,
|
||||||
Pin *drvr,
|
Pin *drvr,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue