From aff63424357bdc2837bf5e37186433f554946ea6 Mon Sep 17 00:00:00 2001 From: James Cherry Date: Tue, 1 Nov 2022 19:08:22 -0700 Subject: [PATCH] Vcd var lookup Signed-off-by: James Cherry --- doc/OpenSTA.odt | Bin 79851 -> 79869 bytes power/Power.i | 8 ++++ power/ReadVcdActivities.cc | 94 +++++++++++++++++++++++++------------ power/Vcd.cc | 67 ++++++++++++++++++++++---- power/Vcd.hh | 13 +++-- power/VcdReader.cc | 27 +++++++++-- power/VcdReader.hh | 8 +++- 7 files changed, 173 insertions(+), 44 deletions(-) diff --git a/doc/OpenSTA.odt b/doc/OpenSTA.odt index a6c9a62df78e221f3afdae269884d446ad9f90f6..c627a6a519c1d9ff080f5f47fe2e4f85264258e1 100644 GIT binary patch delta 34532 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

1-7e?;_ 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 H&>RK;#PWtD delta 34624 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

    Cj`U()CMMky*|d{E2V=gS)e)ezn?m@4iE!^Uq_Z zk6+dE9JUDFDJsJLq%7t_#v&aDVB6%w?>n1ByL7LH&0e*}=$q>8%kj65i<$Pata;1B zxuPc4*`+n6zPR-0Uh|*+(l=gAIpMav#LP-{(?!jRy?($;bUr_eRXodcz^^x_p#DZ? z+~*lGsUO#MaA#(T?daH65jAV(~z3ed6h* z%Fhy29iH?Rp8IGaVjRB6L^A1?tM!wFr0+@2uYF&z&Cal1uE8Jq`C|HJHa#=tqK%Ss zyU%vSkI1WReY7e5$Le(7AJ1?63N2yZcCOFAU;VlJ zwb!K?bI?AzYGjm@zwk9%P4evRFFi|zS;X|<2eyl-rNc%tgP zwU+26^@QV175@x&@aFbB+uykE!^C=-7xUL1PiX%7(fJswtlzoo(kqPnH7q!tG&tYg zvpK{cu-xs5s)OyXEdsyx|NYYaHUCU{P3yJxvs<5AUF-idI{#T`X)c`V@GI7RK}vPJ zTD@xF`zBN2g)(^y>kpqjChY56SN;Fz{rZ1TH-G)Le1F9Lz5jlE{OUjd|0i3w5|%%j zFK!%Kx-+U;;#Fe%!neo!H>|hc|M$nU`#*oL|Nr%G|9kuYtlPf5`}=(Uy}Dm1dw>62 z{Pota55FEi2cCZN^W#_d*N64x?f?9F`F7*i&W&ar_Z5!SUx<^wy>59BpWK3v;(pAV zBDrSy>`XZmb0TP~Zu{iLT&q&=*7T&Ebm(>yv+wBFIpGQ#M%v%~xb(|;b#;Dz{^Q&K zJ+t7*_qQ?hDEV|Z_fPG@ed+HUKG~}>x5aPXzs@rM)W0Y;KBJ4%Z&V!akN;Z_y4m{r z?WpfN_A@XXuH|Cj5AbGW5@8TwfL=#Ez0H`>m=k!bbm*0O&&T(tA2Mdtl?QQ=ufyhn zUw{o_Bu(ctVUz~lJ3aj%kim4CYw|%JIbKv_K{AZY(>IzjicF6&VH5?MiENBKGKaw$ zq*8dYHn$*}IsT?Vb1J~HpsTb6lrb;mW?+y(F>4)2wKmv&VBIeux`B6Xiy#E$raPJe zEnL9Og=Qhx;UQqz=^soOg_NOJaf5FGXM$R!j$&aCNVO4M;g;_imslAY7@C>s93Dpv6q+zuSd5k9-*zKv)9B!due=%o)|eo~bei hhR>(z)65xFz(I^0*W4(YN~Yg5XOv@0H3mA30RR+}mP!Bs diff --git a/power/Power.i b/power/Power.i index 002598f5..c30e174b 100644 --- a/power/Power.i +++ b/power/Power.i @@ -122,4 +122,12 @@ report_vcd_waveforms(const char *filename) reportVcdWaveforms(filename, Sta::sta()); } +// debugging +void +report_vcd_var_values(const char *filename, + const char *var_name) +{ + reportVcdVarValues(filename, var_name, Sta::sta()); +} + %} // inline diff --git a/power/ReadVcdActivities.cc b/power/ReadVcdActivities.cc index 7bb5c5f5..7a804c43 100644 --- a/power/ReadVcdActivities.cc +++ b/power/ReadVcdActivities.cc @@ -28,7 +28,6 @@ namespace sta { using std::min; -using std::swap; using std::to_string; class ReadVcdActivities : public StaState @@ -41,9 +40,17 @@ public: private: void setActivities(); - void findVarActivity(const char *pin_name, + void setVarActivity(const char *pin_name, + const VcdValues &var_values, + int value_bit); + void findVarActivity(const VcdValues &var_values, int value_bit, - const VcdValues &var_values); + // Return values. + int &transition_count, + float &activity, + float &duty); + void checkClkPeriod(const Pin *pin, + int transition_count); const char *filename_; const char *scope_; @@ -83,8 +90,6 @@ ReadVcdActivities::readActivities() for (Clock *clk : *sta_->sdc()->clocks()) clk_period_ = min(clk->period(), clk_period_); - //checkClkPeriods(); - setActivities(); } @@ -92,12 +97,12 @@ void ReadVcdActivities::setActivities() { size_t scope_length = strlen(scope_); - for (VcdVar &var : vcd_.vars()) { + for (VcdVar *var : vcd_.vars()) { const VcdValues &var_values = vcd_.values(var); if (!var_values.empty() - && (var.type() == VcdVarType::wire - || var.type() == VcdVarType::reg)) { - string var_name = var.name(); + && (var->type() == VcdVarType::wire + || var->type() == VcdVarType::reg)) { + string var_name = var->name(); // string::starts_with in c++20 if (scope_length && var_name.substr(0, scope_length) == scope_) @@ -106,8 +111,8 @@ ReadVcdActivities::setActivities() var_name += ' '; const char *sta_name = verilogToSta(var_name.c_str()); - if (var.width() == 1) - findVarActivity(sta_name, 0, var_values); + if (var->width() == 1) + setVarActivity(sta_name, var_values, 0); else { char *bus_name; int from, to; @@ -120,7 +125,7 @@ ReadVcdActivities::setActivities() pin_name += '['; pin_name += to_string(bus_bit); pin_name += ']'; - findVarActivity(pin_name.c_str(), value_bit, var_values); + setVarActivity(pin_name.c_str(), var_values, value_bit); value_bit++; } } @@ -130,7 +135,7 @@ ReadVcdActivities::setActivities() pin_name += '['; pin_name += to_string(bus_bit); pin_name += ']'; - findVarActivity(pin_name.c_str(), value_bit, var_values); + setVarActivity(pin_name.c_str(), var_values, value_bit); value_bit++; } } @@ -140,11 +145,39 @@ ReadVcdActivities::setActivities() } void -ReadVcdActivities::findVarActivity(const char *pin_name, - int value_bit, - const VcdValues &var_values) +ReadVcdActivities::setVarActivity(const char *pin_name, + const VcdValues &var_values, + int value_bit) { - int transition_count = 0; + const Pin *pin = network_->findPin(pin_name); + if (pin) { + int transition_count; + float activity, duty; + findVarActivity(var_values, value_bit, + transition_count, activity, duty); + debugPrint(debug_, "read_vcd_activities", 1, + "%s transitions %d activity %.2f duty %.2f", + pin_name, + transition_count, + activity, + duty); + if (sdc_->isLeafPinClock(pin)) + checkClkPeriod(pin, transition_count); + else + power_->setUserActivity(pin, activity, duty, + PwrActivityOrigin::user); + } +} + +void +ReadVcdActivities::findVarActivity(const VcdValues &var_values, + int value_bit, + // Return values. + int &transition_count, + float &activity, + float &duty) +{ + transition_count = 0; char prev_value = var_values[0].value(); VcdTime prev_time = var_values[0].time(); VcdTime high_time = 0; @@ -164,20 +197,23 @@ ReadVcdActivities::findVarActivity(const char *pin_name, VcdTime time_max = vcd_.timeMax(); if (prev_value == '1') high_time += time_max - prev_time; - float duty = static_cast(high_time) / time_max; - float activity = transition_count + duty = static_cast(high_time) / time_max; + activity = transition_count / (time_max * vcd_.timeUnitScale() / clk_period_); +} - Pin *pin = network_->findPin(pin_name); - if (pin) { - debugPrint(debug_, "read_vcd_activities", 1, - "%s transitions %d activity %.2f duty %.2f", - pin_name, - transition_count, - activity, - duty); - power_->setUserActivity(pin, activity, duty, - PwrActivityOrigin::user); +void +ReadVcdActivities::checkClkPeriod(const Pin *pin, + int transition_count) +{ + VcdTime time_max = vcd_.timeMax(); + float sim_period = time_max * vcd_.timeUnitScale() / ((transition_count - 1) / 2.0); + + ClockSet *clks = sdc_->findLeafPinClocks(pin); + if (clks) { + for (Clock *clk : *clks) { + //printf("%.2e %.2e\n", clk->period(), sim_period); + } } } diff --git a/power/Vcd.cc b/power/Vcd.cc index e9990cd1..3fe8d808 100644 --- a/power/Vcd.cc +++ b/power/Vcd.cc @@ -29,7 +29,50 @@ Vcd::Vcd(StaState *sta) : { } -//////////////////////////////////////////////////////////////// +Vcd::Vcd(const Vcd &vcd) : + StaState(vcd), + date_(vcd.date_), + comment_(vcd.comment_), + version_(vcd.version_), + time_scale_(vcd.time_scale_), + time_unit_(vcd.time_unit_), + time_unit_scale_(vcd.time_unit_scale_), + vars_(vcd.vars_), + var_name_map_(vcd.var_name_map_), + max_var_name_length_(vcd.max_var_name_length_), + max_var_width_(vcd.max_var_width_), + id_values_map_(vcd.id_values_map_), + min_delta_time_(vcd.min_delta_time_), + time_max_(vcd.time_max_) +{ +} + +Vcd& +Vcd::operator=(Vcd &&vcd1) +{ + date_ = vcd1.date_; + comment_ = vcd1.comment_; + version_ = vcd1.version_; + time_scale_ = vcd1.time_scale_; + time_unit_ = vcd1.time_unit_; + time_unit_scale_ = vcd1.time_unit_scale_; + vars_ = vcd1.vars_; + var_name_map_ = vcd1.var_name_map_; + max_var_name_length_ = vcd1.max_var_name_length_; + max_var_width_ = vcd1.max_var_width_; + id_values_map_ = vcd1.id_values_map_; + min_delta_time_ = vcd1.min_delta_time_; + time_max_ = vcd1.time_max_; + + vcd1.vars_.clear(); + return *this; +} + +Vcd::~Vcd() +{ + for (VcdVar *var : vars_) + delete var; +} void Vcd::setTimeUnit(const string &time_unit, @@ -72,7 +115,7 @@ Vcd::setMinDeltaTime(VcdTime min_delta_time) void Vcd::setTimeMax(VcdTime time_max) { - time_max_ = time_max; + time_max_ = time_max; } void @@ -81,13 +124,21 @@ Vcd::makeVar(string &name, int width, string &id) { - vars_.push_back(VcdVar(name, type, width, id)); + VcdVar *var = new VcdVar(name, type, width, id); + vars_.push_back(var); + var_name_map_[name] = var; max_var_name_length_ = std::max(max_var_name_length_, name.size()); max_var_width_ = std::max(max_var_width_, width); // Make entry for var ID. id_values_map_[id].clear(); } +VcdVar * +Vcd::var(const string name) +{ + return var_name_map_[name]; +} + bool Vcd::varIdValid(string &id) { @@ -113,17 +164,17 @@ Vcd::varAppendBusValue(string &id, } VcdValues & -Vcd::values(VcdVar &var) +Vcd::values(VcdVar *var) { - if (id_values_map_.find(var.id()) == id_values_map_.end()) { + if (id_values_map_.find(var->id()) == id_values_map_.end()) { report_->error(805, "Unknown variable %s ID %s", - var.name().c_str(), - var.id().c_str()); + var->name().c_str(), + var->id().c_str()); static VcdValues empty; return empty; } else - return id_values_map_[var.id()]; + return id_values_map_[var->id()]; } //////////////////////////////////////////////////////////////// diff --git a/power/Vcd.hh b/power/Vcd.hh index 2d859c19..ea3c376b 100644 --- a/power/Vcd.hh +++ b/power/Vcd.hh @@ -36,6 +36,7 @@ class VcdValue; typedef vector VcdValues; typedef int64_t VcdTime; typedef vector VcdScope; +typedef map VcdNameMap; enum class VcdVarType { wire, reg, parameter, real }; @@ -43,7 +44,12 @@ class Vcd : public StaState { public: Vcd(StaState *sta); - VcdValues &values(VcdVar &var); + Vcd(const Vcd &vcd); + // Move copy assignment. + Vcd& operator=(Vcd &&vcd1); + ~Vcd(); + VcdVar *var(const string name); + VcdValues &values(VcdVar *var); const string &date() const { return date_; } void setDate(const string &date); @@ -61,7 +67,7 @@ public: void setTimeMax(VcdTime time_max); VcdTime minDeltaTime() const { return min_delta_time_; } void setMinDeltaTime(VcdTime min_delta_time); - vector vars() { return vars_; } + vector vars() { return vars_; } void makeVar(string &name, VcdVarType type, int width, @@ -84,7 +90,8 @@ private: string time_unit_; double time_unit_scale_; - vector vars_; + vector vars_; + VcdNameMap var_name_map_; size_t max_var_name_length_; int max_var_width_; map id_values_map_; diff --git a/power/VcdReader.cc b/power/VcdReader.cc index 35d833b3..b1fcfbe3 100644 --- a/power/VcdReader.cc +++ b/power/VcdReader.cc @@ -344,11 +344,11 @@ reportWaveforms(Vcd &vcd, int time_delta = vcd.minDeltaTime(); int max_var_name_length = vcd.maxVarNameLength(); - for (VcdVar &var : vcd.vars()) { + for (VcdVar *var : vcd.vars()) { string line; stringPrint(line, " %-*s", static_cast(max_var_name_length), - var.name().c_str()); + var->name().c_str()); const VcdValues &var_values = vcd.values(var); if (!var_values.empty()) { size_t value_index = 0; @@ -367,7 +367,7 @@ reportWaveforms(Vcd &vcd, // 01UZX char value = var_value.value(); char prev_value = prev_var_value.value(); - if (var.width() == 1) { + if (var->width() == 1) { if (value == '0' || value == '1') { for (int z = 0; z < zoom; z++) { if (z == 0 @@ -404,4 +404,25 @@ reportWaveforms(Vcd &vcd, } } +void +reportVcdVarValues(const char *filename, + const char *var_name, + StaState *sta) +{ + Vcd vcd = readVcdFile(filename, sta); + VcdVar *var = vcd.var(var_name); + if (var) { + Report *report = sta->report(); + for (const VcdValue &var_value : vcd.values(var)) { + double time = var_value.time() * vcd.timeUnitScale(); + char value = var_value.value(); + if (value == '\0') + report->reportLine("%.2e %llu", + time, var_value.busValue()); + else + report->reportLine("%.2e %c", time, value); + } + } +} + } diff --git a/power/VcdReader.hh b/power/VcdReader.hh index d20c1017..87779eef 100644 --- a/power/VcdReader.hh +++ b/power/VcdReader.hh @@ -30,4 +30,10 @@ void reportVcdWaveforms(const char *filename, StaState *sta); -} +void +reportVcdVarValues(const char *filename, + const char *var_name, + StaState *sta); + +} // namespace +