gated clk activity use passes instead of enqueue
Signed-off-by: James Cherry <cherry@CerezoBook.local>
This commit is contained in:
parent
8d7babf44e
commit
4f0c4c8bb3
|
|
@ -701,10 +701,8 @@ PropActivityVisitor::visit(Vertex *vertex)
|
||||||
if (cell->isClockGate()) {
|
if (cell->isClockGate()) {
|
||||||
const Pin *enable, *clk, *gclk;
|
const Pin *enable, *clk, *gclk;
|
||||||
power_->clockGatePins(inst, enable, clk, gclk);
|
power_->clockGatePins(inst, enable, clk, gclk);
|
||||||
if (gclk) {
|
if (gclk)
|
||||||
Vertex *gclk_vertex = graph_->pinDrvrVertex(gclk);
|
visited_regs_.insert(inst);
|
||||||
bfs_->enqueue(gclk_vertex);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
bfs_->enqueueAdjacentVertices(vertex, mode_);
|
bfs_->enqueueAdjacentVertices(vertex, mode_);
|
||||||
|
|
@ -972,6 +970,8 @@ Power::seedRegOutputActivities(const Instance *inst,
|
||||||
const SequentialSeq &seqs = test_cell->sequentials();
|
const SequentialSeq &seqs = test_cell->sequentials();
|
||||||
seedRegOutputActivities(inst, test_cell, seqs, bfs);
|
seedRegOutputActivities(inst, test_cell, seqs, bfs);
|
||||||
}
|
}
|
||||||
|
else if (cell->isClockGate())
|
||||||
|
seedClkGateOutputActivities(inst, bfs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1045,6 +1045,23 @@ Power::seedRegOutputActivities(const Instance *reg,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Power::seedClkGateOutputActivities(const Instance *inst,
|
||||||
|
BfsFwdIterator &bfs)
|
||||||
|
{
|
||||||
|
InstancePinIterator *pin_iter = network_->pinIterator(inst);
|
||||||
|
while (pin_iter->hasNext()) {
|
||||||
|
Pin *pin = pin_iter->next();
|
||||||
|
LibertyPort *port = network_->libertyPort(pin);
|
||||||
|
if (port && port->isClockGateOut()) {
|
||||||
|
Vertex *vertex = graph_->pinDrvrVertex(pin);
|
||||||
|
if (vertex)
|
||||||
|
bfs.enqueue(vertex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
delete pin_iter;
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -1566,8 +1583,12 @@ Power::findActivity(const Pin *pin)
|
||||||
if (activity && activity->origin() != PwrActivityOrigin::unknown)
|
if (activity && activity->origin() != PwrActivityOrigin::unknown)
|
||||||
return *activity;
|
return *activity;
|
||||||
const Clock *clk = findClk(pin);
|
const Clock *clk = findClk(pin);
|
||||||
float duty = clockDuty(clk);
|
if (clk) {
|
||||||
return PwrActivity(2.0 / clk->period(), duty, PwrActivityOrigin::clock);
|
float duty = clockDuty(clk);
|
||||||
|
return PwrActivity(2.0 / clk->period(), duty, PwrActivityOrigin::clock);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return PwrActivity();
|
||||||
}
|
}
|
||||||
else if (global_activity_.isSet())
|
else if (global_activity_.isSet())
|
||||||
return global_activity_;
|
return global_activity_;
|
||||||
|
|
|
||||||
|
|
@ -224,6 +224,8 @@ protected:
|
||||||
const LibertyCell *test_cell,
|
const LibertyCell *test_cell,
|
||||||
const SequentialSeq &seqs,
|
const SequentialSeq &seqs,
|
||||||
BfsFwdIterator &bfs);
|
BfsFwdIterator &bfs);
|
||||||
|
void seedClkGateOutputActivities(const Instance *inst,
|
||||||
|
BfsFwdIterator &bfs);
|
||||||
PwrActivity evalActivity(FuncExpr *expr,
|
PwrActivity evalActivity(FuncExpr *expr,
|
||||||
const Instance *inst);
|
const Instance *inst);
|
||||||
PwrActivity evalActivity(FuncExpr *expr,
|
PwrActivity evalActivity(FuncExpr *expr,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue