diff options
author | Eddie Hung <eddie@fpgeh.com> | 2020-01-07 11:22:48 -0800 |
---|---|---|
committer | Eddie Hung <eddie@fpgeh.com> | 2020-01-07 11:22:48 -0800 |
commit | baba33fbd391d31187695a8d0d9937249a472b2e (patch) | |
tree | 6940737fc6d444545881ab2ca140a20f584399b5 /frontends | |
parent | 738af17a26587f6f9438bfa2452e65a5911e58e8 (diff) | |
download | yosys-baba33fbd391d31187695a8d0d9937249a472b2e.tar.gz yosys-baba33fbd391d31187695a8d0d9937249a472b2e.tar.bz2 yosys-baba33fbd391d31187695a8d0d9937249a472b2e.zip |
read_aiger: cope with latches and POs with same name
Diffstat (limited to 'frontends')
-rw-r--r-- | frontends/aiger/aigerparse.cc | 14 |
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 } |