clock duty
Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
parent
0968cc8cbf
commit
22b43568ef
|
|
@ -711,8 +711,10 @@ Power::findInstClk(const Instance *inst)
|
|||
while (pin_iter->hasNext()) {
|
||||
const Pin *pin = pin_iter->next();
|
||||
const Clock *clk = findClk(pin);
|
||||
if (clk)
|
||||
if (clk) {
|
||||
inst_clk = clk;
|
||||
break;
|
||||
}
|
||||
}
|
||||
delete pin_iter;
|
||||
return inst_clk;
|
||||
|
|
@ -1178,7 +1180,9 @@ Power::findActivity(const Pin *pin)
|
|||
if (activity.origin() != PwrActivityOrigin::unknown)
|
||||
return activity;
|
||||
}
|
||||
return PwrActivity(2.0, 0.5, PwrActivityOrigin::clock);
|
||||
const Clock *clk = findClk(pin);
|
||||
float duty = clockDuty(clk);
|
||||
return PwrActivity(2.0, duty, PwrActivityOrigin::clock);
|
||||
}
|
||||
else if (global_activity_.isSet())
|
||||
return global_activity_;
|
||||
|
|
@ -1190,6 +1194,25 @@ Power::findActivity(const Pin *pin)
|
|||
return PwrActivity(0.0, 0.0, PwrActivityOrigin::unknown);
|
||||
}
|
||||
|
||||
float
|
||||
Power::clockDuty(const Clock *clk)
|
||||
{
|
||||
if (clk->isGenerated()) {
|
||||
const Clock *master = clk->masterClk();
|
||||
if (master == nullptr)
|
||||
return 0.5; // punt
|
||||
else
|
||||
return clockDuty(master);
|
||||
}
|
||||
else {
|
||||
const FloatSeq *waveform = clk->waveform();
|
||||
float rise_time = (*waveform)[0];
|
||||
float fall_time = (*waveform)[1];
|
||||
float duty = (fall_time - rise_time) / clk->period();
|
||||
return duty;
|
||||
}
|
||||
}
|
||||
|
||||
PwrActivity
|
||||
Power::findSeqActivity(const Instance *inst,
|
||||
LibertyPort *port)
|
||||
|
|
@ -1201,7 +1224,7 @@ Power::findSeqActivity(const Instance *inst,
|
|||
if (activity.origin() != PwrActivityOrigin::unknown)
|
||||
return activity;
|
||||
}
|
||||
return input_activity_;
|
||||
return PwrActivity(0.0, 0.0, PwrActivityOrigin::unknown);
|
||||
}
|
||||
|
||||
float
|
||||
|
|
|
|||
|
|
@ -149,6 +149,7 @@ protected:
|
|||
const Corner *corner);
|
||||
const Clock *findInstClk(const Instance *inst);
|
||||
const Clock *findClk(const Pin *to_pin);
|
||||
float clockDuty(const Clock *clk);
|
||||
PwrActivity findClkedActivity(const Pin *pin,
|
||||
const Clock *inst_clk);
|
||||
PwrActivity findActivity(const Pin *pin);
|
||||
|
|
|
|||
|
|
@ -118,8 +118,8 @@ void
|
|||
Clock::makeClkEdges()
|
||||
{
|
||||
clk_edges_ = new ClockEdge*[RiseFall::index_count];
|
||||
for (auto tr : RiseFall::range()) {
|
||||
clk_edges_[tr->index()] = new ClockEdge(this, tr);
|
||||
for (auto rf : RiseFall::range()) {
|
||||
clk_edges_[rf->index()] = new ClockEdge(this, rf);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue