Merge branch 'master' into gc_arrivals
This commit is contained in:
commit
24e5b5bed2
|
|
@ -343,12 +343,14 @@ Graph::makeWireEdge(Pin *from_pin,
|
||||||
Vertex *from_vertex, *from_bidirect_drvr_vertex;
|
Vertex *from_vertex, *from_bidirect_drvr_vertex;
|
||||||
pinVertices(from_pin, from_vertex, from_bidirect_drvr_vertex);
|
pinVertices(from_pin, from_vertex, from_bidirect_drvr_vertex);
|
||||||
Vertex *to_vertex = pinLoadVertex(to_pin);
|
Vertex *to_vertex = pinLoadVertex(to_pin);
|
||||||
|
if (from_vertex && to_vertex) {
|
||||||
// From and/or to can be bidirect, but edge is always from driver to load.
|
// From and/or to can be bidirect, but edge is always from driver to load.
|
||||||
if (from_bidirect_drvr_vertex)
|
if (from_bidirect_drvr_vertex)
|
||||||
makeEdge(from_bidirect_drvr_vertex, to_vertex, arc_set);
|
makeEdge(from_bidirect_drvr_vertex, to_vertex, arc_set);
|
||||||
else
|
else
|
||||||
makeEdge(from_vertex, to_vertex, arc_set);
|
makeEdge(from_vertex, to_vertex, arc_set);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -897,6 +897,8 @@ public:
|
||||||
// loops until the arrivals converge.
|
// loops until the arrivals converge.
|
||||||
// If full=false update arrivals incrementally.
|
// If full=false update arrivals incrementally.
|
||||||
// If full=true update all arrivals from scratch.
|
// If full=true update all arrivals from scratch.
|
||||||
|
// There is rarely any reason to call updateTiming directly because
|
||||||
|
// arrival/required/slack functions implicitly update timing incrementally.
|
||||||
void updateTiming(bool full);
|
void updateTiming(bool full);
|
||||||
// Invalidate all delay calculations. Arrivals also invalidated.
|
// Invalidate all delay calculations. Arrivals also invalidated.
|
||||||
void delaysInvalid();
|
void delaysInvalid();
|
||||||
|
|
|
||||||
|
|
@ -521,7 +521,9 @@ Network::isLoad(const Pin *pin) const
|
||||||
const Instance *inst = instance(pin);
|
const Instance *inst = instance(pin);
|
||||||
return (isLeaf(inst) && dir->isAnyInput())
|
return (isLeaf(inst) && dir->isAnyInput())
|
||||||
// isTopLevelPort(pin)
|
// isTopLevelPort(pin)
|
||||||
|| (isTopInstance(inst) && dir->isAnyOutput());
|
|| (isTopInstance(inst) && dir->isAnyOutput())
|
||||||
|
// Black box unknown ports are treated as loads.
|
||||||
|
|| dir->isUnknown();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
|
|
|
||||||
|
|
@ -4135,6 +4135,7 @@ Sta::connectPinAfter(Pin *pin)
|
||||||
else {
|
else {
|
||||||
Vertex *vertex, *bidir_drvr_vertex;
|
Vertex *vertex, *bidir_drvr_vertex;
|
||||||
graph_->pinVertices(pin, vertex, bidir_drvr_vertex);
|
graph_->pinVertices(pin, vertex, bidir_drvr_vertex);
|
||||||
|
if (vertex) {
|
||||||
search_->arrivalInvalid(vertex);
|
search_->arrivalInvalid(vertex);
|
||||||
search_->requiredInvalid(vertex);
|
search_->requiredInvalid(vertex);
|
||||||
if (bidir_drvr_vertex) {
|
if (bidir_drvr_vertex) {
|
||||||
|
|
@ -4155,6 +4156,7 @@ Sta::connectPinAfter(Pin *pin)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
sdc_->connectPinAfter(pin);
|
sdc_->connectPinAfter(pin);
|
||||||
sim_->connectPinAfter(pin);
|
sim_->connectPinAfter(pin);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2058,7 +2058,7 @@ VerilogReader::makeBlackBoxNamedPorts(Cell *cell,
|
||||||
Port *port = (size == 1)
|
Port *port = (size == 1)
|
||||||
? network_->makePort(cell, port_name)
|
? network_->makePort(cell, port_name)
|
||||||
: network_->makeBusPort(cell, port_name, 0, size - 1);
|
: network_->makeBusPort(cell, port_name, 0, size - 1);
|
||||||
network_->setDirection(port, PortDirection::bidirect());
|
network_->setDirection(port, PortDirection::unknown());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2077,7 +2077,7 @@ VerilogReader::makeBlackBoxOrderedPorts(Cell *cell,
|
||||||
? network_->makePort(cell, port_name)
|
? network_->makePort(cell, port_name)
|
||||||
: network_->makeBusPort(cell, port_name, size - 1, 0);
|
: network_->makeBusPort(cell, port_name, size - 1, 0);
|
||||||
stringDelete(port_name);
|
stringDelete(port_name);
|
||||||
network_->setDirection(port, PortDirection::bidirect());
|
network_->setDirection(port, PortDirection::unknown());
|
||||||
port_index++;
|
port_index++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue