aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEddie Hung <eddie@fpgeh.com>2020-01-07 11:22:48 -0800
committerEddie Hung <eddie@fpgeh.com>2020-01-07 11:22:48 -0800
commitbaba33fbd391d31187695a8d0d9937249a472b2e (patch)
tree6940737fc6d444545881ab2ca140a20f584399b5
parent738af17a26587f6f9438bfa2452e65a5911e58e8 (diff)
downloadyosys-baba33fbd391d31187695a8d0d9937249a472b2e.tar.gz
yosys-baba33fbd391d31187695a8d0d9937249a472b2e.tar.bz2
yosys-baba33fbd391d31187695a8d0d9937249a472b2e.zip
read_aiger: cope with latches and POs with same name
-rw-r--r--frontends/aiger/aigerparse.cc14
1 files changed, 12 insertions, 2 deletions
diff --git a/frontends/aiger/aigerparse.cc b/frontends/aiger/aigerparse.cc
index d7367479b..04530e562 100644
--- a/frontends/aiger/aigerparse.cc
+++ b/frontends/aiger/aigerparse.cc
@@ -271,14 +271,23 @@ end_of_header:
if ((c == 'i' && l1 > inputs.size()) || (c == 'l' && l1 > latches.size()) || (c == 'o' && l1 > outputs.size()))
log_error("Line %u has invalid symbol position!\n", line_count);
+ RTLIL::IdString escaped_s = stringf("\\%s", s.c_str());
RTLIL::Wire* wire;
if (c == 'i') wire = inputs[l1];
else if (c == 'l') wire = latches[l1];
- else if (c == 'o') wire = outputs[l1];
+ else if (c == 'o') {
+ wire = module->wire(escaped_s);
+ if (wire) {
+ // Could have been renamed by a latch
+ module->swap_names(wire, outputs[l1]);
+ goto next;
+ }
+ wire = outputs[l1];
+ }
else if (c == 'b') wire = bad_properties[l1];
else log_abort();
- module->rename(wire, stringf("\\%s", s.c_str()));
+ module->rename(wire, escaped_s);
}
else if (c == 'j' || c == 'f') {
// TODO
@@ -293,6 +302,7 @@ end_of_header:
}
else
log_error("Line %u: cannot interpret first character '%c'!\n", line_count, c);
+next:
std::getline(f, line); // Ignore up to start of next line
}