diff options
author | Eddie Hung <eddieh@ece.ubc.ca> | 2019-02-26 11:37:34 -0800 |
---|---|---|
committer | Eddie Hung <eddieh@ece.ubc.ca> | 2019-02-26 11:37:34 -0800 |
commit | 8f02c846f602882478469e86dbd598ade23d1d74 (patch) | |
tree | ae0d93f77da723caec17ee1d448099e48b20bec5 /frontends/aiger/aigerparse.cc | |
parent | 967297cd57f80f0b55f7e1d1e00fd6c20b8fb52a (diff) | |
download | yosys-8f02c846f602882478469e86dbd598ade23d1d74.tar.gz yosys-8f02c846f602882478469e86dbd598ade23d1d74.tar.bz2 yosys-8f02c846f602882478469e86dbd598ade23d1d74.zip |
parse_xaiger() to cope with multi bit inouts
Diffstat (limited to 'frontends/aiger/aigerparse.cc')
-rw-r--r-- | frontends/aiger/aigerparse.cc | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/frontends/aiger/aigerparse.cc b/frontends/aiger/aigerparse.cc index 8f0338f7e..9a9f2b2d8 100644 --- a/frontends/aiger/aigerparse.cc +++ b/frontends/aiger/aigerparse.cc @@ -380,11 +380,22 @@ void AigerReader::parse_xaiger() else if (c == 'o') wire = outputs[l1]; else log_abort(); + if (wideports && (wire->port_input || wire->port_output)) { + RTLIL::IdString escaped_symbol; + int index; + std::tie(escaped_symbol,index) = wideports_split(RTLIL::escape_id(s)); + if (escaped_symbol.size() > 10 && escaped_symbol.substr(escaped_symbol.size()-10) == "$inout.out") { + deferred_inouts.emplace_back(wire, stringf("%s[%d]", escaped_symbol.substr(0, escaped_symbol.size()-10).c_str(), index)); + goto next_line; + } + } + if (s.size() > 10 && s.substr(s.size()-10) == "$inout.out") deferred_inouts.emplace_back(wire, RTLIL::escape_id(s.substr(0, s.size()-10))); else deferred_renames.emplace_back(wire, RTLIL::escape_id(s)); +next_line: std::getline(f, line); // Ignore up to start of next line ++line_count; } |