cleanup
Signed-off-by: James Cherry <cherry@CerezoBook.local>
This commit is contained in:
parent
0939625580
commit
c81f0c169d
|
|
@ -248,7 +248,7 @@ GraphDelayCalc::delayInvalid(Vertex *vertex)
|
||||||
{
|
{
|
||||||
debugPrint(debug_, "delay_calc", 2, "delay invalid {}",
|
debugPrint(debug_, "delay_calc", 2, "delay invalid {}",
|
||||||
vertex->to_string(this));
|
vertex->to_string(this));
|
||||||
if (graph_ && incremental_) {
|
if (incremental_) {
|
||||||
invalid_delays_.insert(vertex);
|
invalid_delays_.insert(vertex);
|
||||||
// Invalidate driver that triggers dcalc for multi-driver nets.
|
// Invalidate driver that triggers dcalc for multi-driver nets.
|
||||||
MultiDrvrNet *multi_drvr = multiDrvrNet(vertex);
|
MultiDrvrNet *multi_drvr = multiDrvrNet(vertex);
|
||||||
|
|
@ -338,40 +338,38 @@ FindVertexDelays::visit(Vertex *vertex)
|
||||||
void
|
void
|
||||||
GraphDelayCalc::findDelays(Level level)
|
GraphDelayCalc::findDelays(Level level)
|
||||||
{
|
{
|
||||||
if (arc_delay_calc_) {
|
Stats stats(debug_, report_);
|
||||||
Stats stats(debug_, report_);
|
int dcalc_count = 0;
|
||||||
int dcalc_count = 0;
|
debugPrint(debug_, "delay_calc", 1, "find delays to level {}", level);
|
||||||
debugPrint(debug_, "delay_calc", 1, "find delays to level {}", level);
|
if (!delays_seeded_) {
|
||||||
if (!delays_seeded_) {
|
iter_->clear();
|
||||||
iter_->clear();
|
seedRootSlews();
|
||||||
seedRootSlews();
|
delays_seeded_ = true;
|
||||||
delays_seeded_ = true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
iter_->ensureSize();
|
|
||||||
if (incremental_)
|
|
||||||
seedInvalidDelays();
|
|
||||||
|
|
||||||
if (!iter_->empty()) {
|
|
||||||
FindVertexDelays visitor(this);
|
|
||||||
dcalc_count += iter_->visitParallel(level, &visitor);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Timing checks require slews at both ends of the arc,
|
|
||||||
// so find their delays after all slews are known.
|
|
||||||
for (Edge *check_edge : invalid_check_edges_)
|
|
||||||
findCheckEdgeDelays(check_edge, arc_delay_calc_);
|
|
||||||
invalid_check_edges_.clear();
|
|
||||||
|
|
||||||
for (Edge *latch_edge : invalid_latch_edges_)
|
|
||||||
findLatchEdgeDelays(latch_edge);
|
|
||||||
invalid_latch_edges_.clear();
|
|
||||||
|
|
||||||
delays_exist_ = true;
|
|
||||||
incremental_ = true;
|
|
||||||
debugPrint(debug_, "delay_calc", 1, "found {} delays", dcalc_count);
|
|
||||||
stats.report("Delay calc");
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
iter_->ensureSize();
|
||||||
|
if (incremental_)
|
||||||
|
seedInvalidDelays();
|
||||||
|
|
||||||
|
if (!iter_->empty()) {
|
||||||
|
FindVertexDelays visitor(this);
|
||||||
|
dcalc_count += iter_->visitParallel(level, &visitor);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Timing checks require slews at both ends of the arc,
|
||||||
|
// so find their delays after all slews are known.
|
||||||
|
for (Edge *check_edge : invalid_check_edges_)
|
||||||
|
findCheckEdgeDelays(check_edge, arc_delay_calc_);
|
||||||
|
invalid_check_edges_.clear();
|
||||||
|
|
||||||
|
for (Edge *latch_edge : invalid_latch_edges_)
|
||||||
|
findLatchEdgeDelays(latch_edge);
|
||||||
|
invalid_latch_edges_.clear();
|
||||||
|
|
||||||
|
delays_exist_ = true;
|
||||||
|
incremental_ = true;
|
||||||
|
debugPrint(debug_, "delay_calc", 1, "found {} delays", dcalc_count);
|
||||||
|
stats.report("Delay calc");
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
||||||
|
|
@ -554,9 +554,12 @@ ActivitySrchPred::searchThru(Edge *edge,
|
||||||
{
|
{
|
||||||
const Sdc *sdc = mode->sdc();
|
const Sdc *sdc = mode->sdc();
|
||||||
const TimingRole *role = edge->role();
|
const TimingRole *role = edge->role();
|
||||||
return !(edge->role()->isTimingCheck() || sdc->isDisabledConstraint(edge)
|
return !(edge->role()->isTimingCheck()
|
||||||
|| sdc->isDisabledCondDefault(edge) || edge->isBidirectInstPath()
|
|| sdc->isDisabledConstraint(edge)
|
||||||
|| edge->isDisabledLoop() || role == TimingRole::regClkToQ()
|
|| sdc->isDisabledCondDefault(edge)
|
||||||
|
|| edge->isBidirectInstPath()
|
||||||
|
|| edge->isDisabledLoop()
|
||||||
|
|| role == TimingRole::regClkToQ()
|
||||||
|| role->isLatchDtoQ());
|
|| role->isLatchDtoQ());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -744,9 +747,9 @@ PropActivityVisitor::setActivityCheck(const Pin *pin,
|
||||||
max_change_ = duty_delta;
|
max_change_ = duty_delta;
|
||||||
max_change_pin_ = pin;
|
max_change_pin_ = pin;
|
||||||
}
|
}
|
||||||
bool changed = density_delta > change_tolerance_ || duty_delta > change_tolerance_
|
bool changed = density_delta > change_tolerance_
|
||||||
|| activity.origin() != prev_activity.origin();
|
|| duty_delta > change_tolerance_
|
||||||
;
|
|| activity.origin() != prev_activity.origin();
|
||||||
power_->setActivity(pin, activity);
|
power_->setActivity(pin, activity);
|
||||||
return changed;
|
return changed;
|
||||||
}
|
}
|
||||||
|
|
@ -903,8 +906,9 @@ Power::ensureActivities(const Scene *scene)
|
||||||
// unless it has been set by command.
|
// unless it has been set by command.
|
||||||
if (input_activity_.origin() == PwrActivityOrigin::unknown) {
|
if (input_activity_.origin() == PwrActivityOrigin::unknown) {
|
||||||
float min_period = clockMinPeriod(scene_->mode()->sdc());
|
float min_period = clockMinPeriod(scene_->mode()->sdc());
|
||||||
float density =
|
if (min_period == 0.0)
|
||||||
0.1 / (min_period != 0.0 ? min_period : units_->timeUnit()->scale());
|
min_period = units_->timeUnit()->scale();
|
||||||
|
float density = 0.1 / min_period;
|
||||||
input_activity_.set(density, 0.5, PwrActivityOrigin::input);
|
input_activity_.set(density, 0.5, PwrActivityOrigin::input);
|
||||||
}
|
}
|
||||||
ActivitySrchPred activity_srch_pred(this);
|
ActivitySrchPred activity_srch_pred(this);
|
||||||
|
|
@ -916,7 +920,7 @@ Power::ensureActivities(const Scene *scene)
|
||||||
// Propagate activiities through registers.
|
// Propagate activiities through registers.
|
||||||
InstanceSet regs = std::move(visitor.visitedRegs());
|
InstanceSet regs = std::move(visitor.visitedRegs());
|
||||||
int pass = 1;
|
int pass = 1;
|
||||||
while (!regs.empty() && pass < max_activity_passes_) {
|
while (!regs.empty() && pass <= max_activity_passes_) {
|
||||||
visitor.init();
|
visitor.init();
|
||||||
for (const Instance *reg : regs)
|
for (const Instance *reg : regs)
|
||||||
// Propagate activiities across register D->Q.
|
// Propagate activiities across register D->Q.
|
||||||
|
|
@ -925,8 +929,10 @@ Power::ensureActivities(const Scene *scene)
|
||||||
// combinational logic.
|
// combinational logic.
|
||||||
bfs.visit(levelize_->maxLevel(), &visitor);
|
bfs.visit(levelize_->maxLevel(), &visitor);
|
||||||
regs = std::move(visitor.visitedRegs());
|
regs = std::move(visitor.visitedRegs());
|
||||||
debugPrint(debug_, "power_activity", 1, "Pass {} change {:.2f} {}", pass,
|
debugPrint(debug_, "power_activity", 1, "Pass {} change {:.2f} {}",
|
||||||
visitor.maxChange(), network_->pathName(visitor.maxChangePin()));
|
pass,
|
||||||
|
visitor.maxChange(),
|
||||||
|
network_->pathName(visitor.maxChangePin()));
|
||||||
pass++;
|
pass++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -669,11 +669,12 @@ Genclks::makeTag(const Clock *gclk,
|
||||||
state = state->nextState();
|
state = state->nextState();
|
||||||
ExceptionStateSet *states = new ExceptionStateSet();
|
ExceptionStateSet *states = new ExceptionStateSet();
|
||||||
states->insert(state);
|
states->insert(state);
|
||||||
const ClkInfo *clk_info = search_->findClkInfo(
|
const ClkInfo *clk_info = search_->findClkInfo(scene, master_clk->edge(master_rf),
|
||||||
scene, master_clk->edge(master_rf), master_pin, true, nullptr, true, nullptr,
|
master_pin, true, nullptr, true,
|
||||||
insert, 0.0, nullptr, min_max, nullptr);
|
nullptr, insert, 0.0, nullptr,
|
||||||
return search_->findTag(scene, master_rf, min_max, clk_info, false, nullptr, false,
|
min_max, nullptr);
|
||||||
states, true, nullptr);
|
return search_->findTag(scene, master_rf, min_max, clk_info, false, nullptr,
|
||||||
|
false, states, true, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
class GenClkArrivalSearchPred : public EvalPred
|
class GenClkArrivalSearchPred : public EvalPred
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue