aboutsummaryrefslogtreecommitdiffstats
path: root/frontends/aiger
diff options
context:
space:
mode:
authorEddie Hung <eddieh@ece.ubc.ca>2019-02-26 11:37:34 -0800
committerEddie Hung <eddieh@ece.ubc.ca>2019-02-26 11:37:34 -0800
commit8f02c846f602882478469e86dbd598ade23d1d74 (patch)
treeae0d93f77da723caec17ee1d448099e48b20bec5 /frontends/aiger
parent967297cd57f80f0b55f7e1d1e00fd6c20b8fb52a (diff)
downloadyosys-8f02c846f602882478469e86dbd598ade23d1d74.tar.gz
yosys-8f02c846f602882478469e86dbd598ade23d1d74.tar.bz2
yosys-8f02c846f602882478469e86dbd598ade23d1d74.zip
parse_xaiger() to cope with multi bit inouts
Diffstat (limited to 'frontends/aiger')
-rw-r--r--frontends/aiger/aigerparse.cc11
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;
}