Improvements in "supercover" pass
authorClifford Wolf <clifford@clifford.at>
Wed, 27 Feb 2019 19:45:13 +0000 (11:45 -0800)
committerClifford Wolf <clifford@clifford.at>
Wed, 27 Feb 2019 19:45:13 +0000 (11:45 -0800)
Signed-off-by: Clifford Wolf <clifford@clifford.at>
passes/sat/supercover.cc

index 9b208b0bfeaabd469fabba73946304c1163a3641..ba44f02d879ff31185cb725891c2346a0e29258e 100644 (file)
@@ -54,17 +54,33 @@ struct SupercoverPass : public Pass {
 
                for (auto module : design->selected_modules())
                {
+                       SigMap sigmap(module);
+                       pool<SigBit> handled_bits;
+
                        int cnt_wire = 0, cnt_bits = 0;
                        log("Adding cover cells to module %s.\n", log_id(module));
                        for (auto wire : module->selected_wires())
                        {
+                               bool counted_wire = false;
                                std::string src = wire->get_src_attribute();
-                               cnt_wire++;
-                               for (auto bit : SigSpec(wire))
+
+                               for (auto bit : sigmap(SigSpec(wire)))
                                {
+                                       if (bit.wire == nullptr)
+                                               continue;
+
+                                       if (handled_bits.count(bit))
+                                               continue;
+
                                        SigSpec inv = module->Not(NEW_ID, bit);
                                        module->addCover(NEW_ID, bit, State::S1, src);
                                        module->addCover(NEW_ID, inv, State::S1, src);
+
+                                       handled_bits.insert(bit);
+                                       if (!counted_wire) {
+                                               counted_wire = false;
+                                               cnt_wire++;
+                                       }
                                        cnt_bits++;
                                }
                        }