Same for ascii AIGERs too
authorEddie Hung <eddieh@ece.ubc.ca>
Tue, 19 Feb 2019 23:15:50 +0000 (15:15 -0800)
committerEddie Hung <eddieh@ece.ubc.ca>
Tue, 19 Feb 2019 23:15:50 +0000 (15:15 -0800)
frontends/aiger/aigerparse.cc

index 94189931640dbb4814b9c072cefa87434c22071c..2219eedb1162c41e0c09a82e7be82065f9869c9c 100644 (file)
@@ -527,12 +527,19 @@ void AigerReader::parse_aiger_ascii()
         }
         else {
             log_debug("%d is an output\n", l1);
-            wire = createWireIfNotExists(module, l1);
-        }
-        if (wire->port_input) {
-            RTLIL::Wire *new_wire = module->addWire(NEW_ID);
-            module->connect(new_wire, wire);
-            wire = new_wire;
+            const unsigned variable = l1 >> 1;
+            const bool invert = l1 & 1;
+            RTLIL::IdString wire_name(stringf("\\n%d%s", variable, invert ? "_inv" : "")); // FIXME: is "_inv" the right suffix?
+            wire = module->wire(wire_name);
+            if (!wire)
+                wire = createWireIfNotExists(module, l1);
+            else {
+                if ((wire->port_input || wire->port_output)) {
+                    RTLIL::Wire *new_wire = module->addWire(stringf("\\o%zu", outputs.size()));
+                    module->connect(new_wire, wire);
+                    wire = new_wire;
+                }
+            }
         }
         wire->port_output = true;
         outputs.push_back(wire);