mv GraphDelayCalc1::isDriver to Vertex
This commit is contained in:
parent
a04e557faa
commit
5f3b10bdf2
|
|
@ -574,7 +574,7 @@ void
|
||||||
GraphDelayCalc1::seedRootSlew(Vertex *vertex,
|
GraphDelayCalc1::seedRootSlew(Vertex *vertex,
|
||||||
ArcDelayCalc *arc_delay_calc)
|
ArcDelayCalc *arc_delay_calc)
|
||||||
{
|
{
|
||||||
if (isDriver(vertex))
|
if (vertex->isDriver(network_))
|
||||||
seedDrvrSlew(vertex, arc_delay_calc);
|
seedDrvrSlew(vertex, arc_delay_calc);
|
||||||
else
|
else
|
||||||
seedLoadSlew(vertex);
|
seedLoadSlew(vertex);
|
||||||
|
|
@ -859,7 +859,7 @@ GraphDelayCalc1::findVertexDelay(Vertex *vertex,
|
||||||
vertex->name(sdc_network_),
|
vertex->name(sdc_network_),
|
||||||
network_->cellName(network_->instance(pin)));
|
network_->cellName(network_->instance(pin)));
|
||||||
if (network_->isLeaf(pin)) {
|
if (network_->isLeaf(pin)) {
|
||||||
if (isDriver(vertex)) {
|
if (vertex->isDriver(network_)) {
|
||||||
bool delay_changed = findDriverDelays(vertex, arc_delay_calc);
|
bool delay_changed = findDriverDelays(vertex, arc_delay_calc);
|
||||||
if (propagate) {
|
if (propagate) {
|
||||||
if (network_->direction(pin)->isInternal())
|
if (network_->direction(pin)->isInternal())
|
||||||
|
|
@ -896,24 +896,6 @@ GraphDelayCalc1::enqueueTimingChecksEdges(Vertex *vertex)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
|
||||||
GraphDelayCalc1::isDriver(Vertex *vertex)
|
|
||||||
{
|
|
||||||
Pin *pin = vertex->pin();
|
|
||||||
PortDirection *dir = network_->direction(pin);
|
|
||||||
bool top_level_port = network_->isTopLevelPort(pin);
|
|
||||||
return ((top_level_port
|
|
||||||
&& (dir->isInput()
|
|
||||||
|| (dir->isBidirect()
|
|
||||||
&& vertex->isBidirectDriver())))
|
|
||||||
|| (!top_level_port
|
|
||||||
&& (dir->isOutput()
|
|
||||||
|| dir->isTristate()
|
|
||||||
|| (dir->isBidirect()
|
|
||||||
&& vertex->isBidirectDriver())
|
|
||||||
|| dir->isInternal())));
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
GraphDelayCalc1::findDriverDelays(Vertex *drvr_vertex,
|
GraphDelayCalc1::findDriverDelays(Vertex *drvr_vertex,
|
||||||
ArcDelayCalc *arc_delay_calc)
|
ArcDelayCalc *arc_delay_calc)
|
||||||
|
|
|
||||||
|
|
@ -213,7 +213,6 @@ protected:
|
||||||
Parasitic *drvr_parasitic,
|
Parasitic *drvr_parasitic,
|
||||||
const TransRiseFall *tr,
|
const TransRiseFall *tr,
|
||||||
const DcalcAnalysisPt *dcalc_ap) const;
|
const DcalcAnalysisPt *dcalc_ap) const;
|
||||||
bool isDriver(Vertex *vertex);
|
|
||||||
|
|
||||||
// Observer for edge delay changes.
|
// Observer for edge delay changes.
|
||||||
DelayCalcObserver *observer_;
|
DelayCalcObserver *observer_;
|
||||||
|
|
|
||||||
|
|
@ -1170,6 +1170,23 @@ Vertex::name(const Network *network) const
|
||||||
return network->pathName(pin_);
|
return network->pathName(pin_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
Vertex::isDriver(const Network *network) const
|
||||||
|
{
|
||||||
|
PortDirection *dir = network->direction(pin_);
|
||||||
|
bool top_level_port = network->isTopLevelPort(pin_);
|
||||||
|
return ((top_level_port
|
||||||
|
&& (dir->isInput()
|
||||||
|
|| (dir->isBidirect()
|
||||||
|
&& is_bidirect_drvr_)))
|
||||||
|
|| (!top_level_port
|
||||||
|
&& (dir->isOutput()
|
||||||
|
|| dir->isTristate()
|
||||||
|
|| (dir->isBidirect()
|
||||||
|
&& is_bidirect_drvr_)
|
||||||
|
|| dir->isInternal())));
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Vertex::setLevel(Level level)
|
Vertex::setLevel(Level level)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -266,6 +266,7 @@ public:
|
||||||
// Pin path with load/driver suffix for bidirects.
|
// Pin path with load/driver suffix for bidirects.
|
||||||
const char *name(const Network *network) const;
|
const char *name(const Network *network) const;
|
||||||
bool isBidirectDriver() const { return is_bidirect_drvr_; }
|
bool isBidirectDriver() const { return is_bidirect_drvr_; }
|
||||||
|
bool isDriver(const Network *network) const;
|
||||||
Level level() const { return level_; }
|
Level level() const { return level_; }
|
||||||
void setLevel(Level level);
|
void setLevel(Level level);
|
||||||
bool isRoot() const{ return level_ == 0; }
|
bool isRoot() const{ return level_ == 0; }
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue