Add undocumented feature
authorEddie Hung <eddie@fpgeh.com>
Fri, 23 Aug 2019 23:41:32 +0000 (16:41 -0700)
committerEddie Hung <eddie@fpgeh.com>
Fri, 23 Aug 2019 23:41:32 +0000 (16:41 -0700)
techlibs/xilinx/synth_xilinx.cc

index 7ba67409b5a368533304c1cc22eb78bf43953eb5..87f4af8f7daa008def5363a46aa74c0b101e4dfe 100644 (file)
@@ -105,6 +105,7 @@ struct SynthXilinxPass : public ScriptPass
 
        std::string top_opt, edif_file, blif_file, family;
        bool flatten, retime, vpr, nobram, nolutram, nosrl, nocarry, nowidelut, abc9;
+       bool flatten_before_abc;
        int widemux;
 
        void clear_flags() YS_OVERRIDE
@@ -123,6 +124,7 @@ struct SynthXilinxPass : public ScriptPass
                nocarry = false;
                nowidelut = false;
                abc9 = false;
+               flatten_before_abc = false;
                widemux = 0;
        }
 
@@ -162,6 +164,10 @@ struct SynthXilinxPass : public ScriptPass
                                flatten = true;
                                continue;
                        }
+                       if (args[argidx] == "-flatten_before_abc") {
+                               flatten_before_abc = true;
+                               continue;
+                       }
                        if (args[argidx] == "-retime") {
                                retime = true;
                                continue;
@@ -385,6 +391,8 @@ struct SynthXilinxPass : public ScriptPass
 
                if (check_label("map_luts")) {
                        run("opt_expr -mux_undef");
+                       if (flatten_before_abc)
+                               run("flatten");
                        if (help_mode)
                                run("abc -luts 2:2,3,6:5[,10,20] [-dff]", "(option for 'nowidelut', option for '-retime')");
                        else if (abc9) {