Skip to content

Commit 5813649

Browse files
committed
Merge remote-tracking branch 'upstream/master'
Signed-off-by: Matt Liberty <[email protected]>
2 parents f72bf5c + 5bf832c commit 5813649

File tree

4 files changed

+33
-18
lines changed

4 files changed

+33
-18
lines changed

power/Power.cc

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ Power::Power(StaState *sta) :
101101
seq_activity_map_(100, SeqPinHash(network_), SeqPinEqual()),
102102
activities_valid_(false),
103103
bdd_(sta),
104+
instance_powers_valid_(false),
104105
corner_(nullptr)
105106
{
106107
}
@@ -118,34 +119,41 @@ Power::clear()
118119
corner_ = nullptr;
119120
}
120121

122+
void
123+
Power::activitiesInvalid()
124+
{
125+
activities_valid_ = false;
126+
instance_powers_valid_ = false;
127+
}
128+
121129
void
122130
Power::setGlobalActivity(float density,
123131
float duty)
124132
{
125133
global_activity_.set(density, duty, PwrActivityOrigin::global);
126-
activities_valid_ = false;
134+
activitiesInvalid();
127135
}
128136

129137
void
130138
Power::unsetGlobalActivity()
131139
{
132140
global_activity_.init();
133-
activities_valid_ = false;
141+
activitiesInvalid();
134142
}
135143

136144
void
137145
Power::setInputActivity(float density,
138146
float duty)
139147
{
140148
input_activity_.set(density, duty, PwrActivityOrigin::input);
141-
activities_valid_ = false;
149+
activitiesInvalid();
142150
}
143151

144152
void
145153
Power::unsetInputActivity()
146154
{
147155
input_activity_.init();
148-
activities_valid_ = false;
156+
activitiesInvalid();
149157
}
150158

151159
void
@@ -157,7 +165,7 @@ Power::setInputPortActivity(const Port *input_port,
157165
const Pin *pin = network_->findPin(top_inst, input_port);
158166
if (pin) {
159167
user_activity_map_[pin] = {density, duty, PwrActivityOrigin::user};
160-
activities_valid_ = false;
168+
activitiesInvalid();
161169
}
162170
}
163171

@@ -168,7 +176,7 @@ Power::unsetInputPortActivity(const Port *input_port)
168176
const Pin *pin = network_->findPin(top_inst, input_port);
169177
if (pin) {
170178
user_activity_map_.erase(pin);
171-
activities_valid_ = false;
179+
activitiesInvalid();
172180
}
173181
}
174182

@@ -179,14 +187,14 @@ Power::setUserActivity(const Pin *pin,
179187
PwrActivityOrigin origin)
180188
{
181189
user_activity_map_[pin] = {density, duty, origin};
182-
activities_valid_ = false;
190+
activitiesInvalid();
183191
}
184192

185193
void
186194
Power::unsetUserActivity(const Pin *pin)
187195
{
188196
user_activity_map_.erase(pin);
189-
activities_valid_ = false;
197+
activitiesInvalid();
190198
}
191199

192200
PwrActivity &
@@ -233,7 +241,7 @@ Power::setSeqActivity(const Instance *reg,
233241
PwrActivity &activity)
234242
{
235243
seq_activity_map_[SeqPin(reg, output)] = activity;
236-
activities_valid_ = false;
244+
activitiesInvalid();
237245
}
238246

239247
bool
@@ -699,10 +707,9 @@ void
699707
Power::ensureActivities()
700708
{
701709
Stats stats(debug_, report_);
702-
// No need to propagate activites if global activity is set.
703-
if (!global_activity_.isSet()) {
704-
if (!activities_valid_) {
705-
Stats stats(debug_, report_);
710+
if (!activities_valid_) {
711+
// No need to propagate activites if global activity is set.
712+
if (!global_activity_.isSet()) {
706713
// Clear existing activities.
707714
activity_map_.clear();
708715
seq_activity_map_.clear();
@@ -738,9 +745,8 @@ Power::ensureActivities()
738745
pass, visitor.maxChange());
739746
pass++;
740747
}
741-
stats.report("Find power activities");
742-
activities_valid_ = true;
743748
}
749+
activities_valid_ = true;
744750
}
745751
stats.report("Power activities");
746752
}
@@ -837,9 +843,11 @@ Power::seedRegOutputActivities(const Instance *reg,
837843
void
838844
Power::ensureInstPowers(const Corner *corner)
839845
{
840-
if (instance_powers_.empty()
841-
|| corner != corner_)
846+
if (!instance_powers_valid_
847+
|| corner != corner_) {
842848
findInstPowers(corner);
849+
instance_powers_valid_ = true;
850+
}
843851
}
844852

845853
void

power/Power.hh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ class Power : public StaState
7676
public:
7777
Power(StaState *sta);
7878
void clear();
79+
void activitiesInvalid();
7980
void power(const Corner *corner,
8081
// Return values.
8182
PowerResult &total,
@@ -234,6 +235,7 @@ private:
234235
bool activities_valid_;
235236
Bdd bdd_;
236237
std::map<const Instance*, PowerResult> instance_powers_;
238+
bool instance_powers_valid_;
237239
const Corner *corner_;
238240

239241
static constexpr int max_activity_passes_ = 100;

search/Sta.cc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1111,6 +1111,7 @@ Sta::makeClock(const char *name,
11111111
sdc_->makeClock(name, pins, add_to_pins, period, waveform, comment);
11121112
update_genclks_ = true;
11131113
search_->arrivalsInvalid();
1114+
power_->activitiesInvalid();
11141115
}
11151116

11161117
void
@@ -1135,13 +1136,15 @@ Sta::makeGeneratedClock(const char *name,
11351136
edges, edge_shifts, comment);
11361137
update_genclks_ = true;
11371138
search_->arrivalsInvalid();
1139+
power_->activitiesInvalid();
11381140
}
11391141

11401142
void
11411143
Sta::removeClock(Clock *clk)
11421144
{
11431145
sdc_->removeClock(clk);
11441146
search_->arrivalsInvalid();
1147+
power_->activitiesInvalid();
11451148
}
11461149

11471150
bool
@@ -1819,6 +1822,7 @@ Sta::setLogicValue(Pin *pin,
18191822
sdc_->setLogicValue(pin, value);
18201823
// Levelization respects constant disabled edges.
18211824
levelize_->invalid();
1825+
power_->activitiesInvalid();
18221826
sim_->constantsInvalid();
18231827
// Constants disable edges which isolate downstream vertices of the
18241828
// graph from the delay calculator's BFS search. This means that
@@ -1834,6 +1838,7 @@ Sta::setCaseAnalysis(Pin *pin,
18341838
LogicValue value)
18351839
{
18361840
sdc_->setCaseAnalysis(pin, value);
1841+
power_->activitiesInvalid();
18371842
// Levelization respects constant disabled edges.
18381843
levelize_->invalid();
18391844
sim_->constantsInvalid();

verilog/VerilogReader.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -534,7 +534,7 @@ VerilogReader::makeModuleInst(const string *module_vname,
534534
// to reduce the memory footprint of the verilog parser.
535535
if (liberty_cell
536536
&& hasScalarNamedPortRefs(liberty_cell, pins)) {
537-
int port_count = liberty_cell->portBitCount();
537+
const int port_count = liberty_cell->portBitCount();
538538
StdStringSeq net_names(port_count);
539539
for (VerilogNet *vnet : *pins) {
540540
VerilogNetPortRefScalarNet *vpin =

0 commit comments

Comments
 (0)