Added "synth_ice40 -abc2"
authorClifford Wolf <clifford@clifford.at>
Tue, 8 Dec 2015 10:16:26 +0000 (11:16 +0100)
committerClifford Wolf <clifford@clifford.at>
Tue, 8 Dec 2015 10:16:26 +0000 (11:16 +0100)
techlibs/ice40/synth_ice40.cc

index 75cab7bda8b57796f36fc74c74931a1cab4397dd..935f71c1c110f240dfa2f975f6e53e211d35a238 100644 (file)
@@ -72,6 +72,9 @@ struct SynthIce40Pass : public Pass {
                log("    -nobram\n");
                log("        do not use SB_RAM40_4K* cells in output netlist\n");
                log("\n");
+               log("    -abc2\n");
+               log("        run two passes of 'abc' for slightly improved logic density\n");
+               log("\n");
                log("\n");
                log("The following commands are executed by this synthesis command:\n");
                log("\n");
@@ -109,6 +112,7 @@ struct SynthIce40Pass : public Pass {
                log("        ice40_opt -full\n");
                log("\n");
                log("    map_luts:\n");
+               log("        abc          (only if -abc2)\n");
                log("        abc -lut 4\n");
                log("        clean\n");
                log("\n");
@@ -137,6 +141,7 @@ struct SynthIce40Pass : public Pass {
                bool nobram = false;
                bool flatten = true;
                bool retime = false;
+               bool abc2 = false;
 
                size_t argidx;
                for (argidx = 1; argidx < args.size(); argidx++)
@@ -181,6 +186,10 @@ struct SynthIce40Pass : public Pass {
                                nobram = true;
                                continue;
                        }
+                       if (args[argidx] == "-abc2") {
+                               abc2 = true;
+                               continue;
+                       }
                        break;
                }
                extra_args(args, argidx, design);
@@ -244,6 +253,8 @@ struct SynthIce40Pass : public Pass {
 
                if (check_label(active, run_from, run_to, "map_luts"))
                {
+                       if (abc2)
+                               Pass::call(design, "abc");
                        Pass::call(design, "abc -lut 4");
                        Pass::call(design, "clean");
                }