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

View File

@ -194,7 +194,7 @@ VcdReader::parseVar()
type_name.c_str()); type_name.c_str());
else { else {
int width = stoi(tokens[1]); int width = stoi(tokens[1]);
string id = tokens[2]; string &id = tokens[2];
string name; string name;
for (string &context : scope_) { for (string &context : scope_) {
@ -203,8 +203,12 @@ VcdReader::parseVar()
} }
name += tokens[3]; name += tokens[3];
// iverilog separates bus base name from bit range. // 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]; name += tokens[4];
}
vcd_->makeVar(name, type, width, id); vcd_->makeVar(name, type, width, id);
} }