diff --git a/power/ReadVcdActivities.cc b/power/ReadVcdActivities.cc index 8763e0ff..853ef7bd 100644 --- a/power/ReadVcdActivities.cc +++ b/power/ReadVcdActivities.cc @@ -180,6 +180,7 @@ ReadVcdActivities::setVarActivity(const char *pin_name, { const Pin *pin = sdc_network_->findPin(pin_name); if (pin) { + debugPrint(debug_, "read_vcd_activities", 3, "%s values", pin_name); double transition_count, activity, duty; findVarActivity(var_values, value_bit, transition_count, activity, duty); @@ -205,16 +206,13 @@ ReadVcdActivities::findVarActivity(const VcdValues &var_values, double &duty) { transition_count = 0.0; - char prev_value = var_values[0].value(); + char prev_value = var_values[0].value(value_bit); VcdTime prev_time = var_values[0].time(); VcdTime high_time = 0; for (const VcdValue &var_value : var_values) { VcdTime time = var_value.time(); - char value = var_value.value(); - if (value == '\0') { - uint64_t bus_value = var_value.busValue(); - value = ((bus_value >> value_bit) & 0x1) ? '1' : '0'; - } + char value = var_value.value(value_bit); + debugPrint(debug_, "read_vcd_activities", 3, " %llu %c", time, value); if (prev_value == '1') high_time += time - prev_time; if (value != prev_value) diff --git a/power/Vcd.cc b/power/Vcd.cc index 1ea9d8c3..a140528c 100644 --- a/power/Vcd.cc +++ b/power/Vcd.cc @@ -201,4 +201,13 @@ VcdValue::VcdValue(VcdTime time, { } +char +VcdValue::value(int value_bit) const +{ + if (value_ == '\0') + return ((bus_value_ >> value_bit) & 0x1) ? '1' : '0'; + else + return value_; +} + } diff --git a/power/Vcd.hh b/power/Vcd.hh index 76d904b5..b61d3935 100644 --- a/power/Vcd.hh +++ b/power/Vcd.hh @@ -146,6 +146,7 @@ public: VcdTime time() const { return time_; } char value() const { return value_; } uint64_t busValue() const { return bus_value_; } + char value(int value_bit) const; private: VcdTime time_;