read_power_activities escaped bus name issue

Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
James Cherry 2023-10-16 20:44:39 -07:00
parent b00ac00485
commit 8f5216dc13
2 changed files with 34 additions and 26 deletions

View File

@ -131,36 +131,42 @@ ReadVcdActivities::setVarActivity(VcdVar *var,
string &var_name,
const VcdValues &var_values)
{
string sta_name = netVerilogToSta(var_name.c_str());
if (var->width() == 1)
if (var->width() == 1) {
string sta_name = netVerilogToSta(var_name.c_str());
setVarActivity(sta_name.c_str(), var_values, 0);
}
else {
bool is_bus, is_range, subscript_wild;
string bus_name;
int from, to;
parseBusName(sta_name.c_str(), '[', ']', '\\',
parseBusName(var_name.c_str(), '[', ']', '\\',
is_bus, is_range, bus_name, from, to, subscript_wild);
int value_bit = 0;
if (to < from) {
for (int bus_bit = to; bus_bit <= from; bus_bit++) {
string pin_name = bus_name;
pin_name += '[';
pin_name += to_string(bus_bit);
pin_name += ']';
setVarActivity(pin_name.c_str(), var_values, value_bit);
value_bit++;
}
}
else {
for (int bus_bit = to; bus_bit >= from; bus_bit--) {
string pin_name = bus_name;
pin_name += '[';
pin_name += to_string(bus_bit);
pin_name += ']';
setVarActivity(pin_name.c_str(), var_values, value_bit);
value_bit++;
if (is_bus) {
string sta_bus_name = netVerilogToSta(bus_name.c_str());
int value_bit = 0;
if (to < from) {
for (int bus_bit = to; bus_bit <= from; bus_bit++) {
string pin_name = sta_bus_name;
pin_name += '[';
pin_name += to_string(bus_bit);
pin_name += ']';
setVarActivity(pin_name.c_str(), var_values, value_bit);
value_bit++;
}
}
else {
for (int bus_bit = to; bus_bit >= from; bus_bit--) {
string pin_name = sta_bus_name;
pin_name += '[';
pin_name += to_string(bus_bit);
pin_name += ']';
setVarActivity(pin_name.c_str(), var_values, value_bit);
value_bit++;
}
}
}
else
report_->warn(807, "problem parsing bus %s.", var_name.c_str());
}
}
@ -185,8 +191,6 @@ ReadVcdActivities::setVarActivity(const char *pin_name,
else {
power_->setUserActivity(pin, activity, duty,
PwrActivityOrigin::user);
if (annotated_pins_.hasKey(pin))
printf("luse\n");
annotated_pins_.insert(pin);
}
}

View File

@ -194,7 +194,7 @@ VcdReader::parseVar()
type_name.c_str());
else {
int width = stoi(tokens[1]);
string id = tokens[2];
string &id = tokens[2];
string name;
for (string &context : scope_) {
@ -203,8 +203,12 @@ VcdReader::parseVar()
}
name += tokens[3];
// iverilog separates bus base name from bit range.
if (tokens.size() == 5)
if (tokens.size() == 5) {
// Preserve space after esacaped name.
if (name[0] == '\\')
name += ' ';
name += tokens[4];
}
vcd_->makeVar(name, type, width, id);
}