Harmonize BRAM/LUTRAM descriptions across all of Yosys.
[yosys.git] / techlibs / efinix / synth_efinix.cc
index 3f17bafa3a6056840396fe911a06d3f3d3d86209..3e52743855afc02f05d4299bc714563ded5af5b8 100644 (file)
@@ -60,6 +60,9 @@ struct SynthEfinixPass : public ScriptPass
                log("    -retime\n");
                log("        run 'abc' with -dff option\n");
                log("\n");
+               log("    -nobram\n");
+               log("        do not use EFX_RAM_5K cells in output netlist\n");
+               log("\n");
                log("\n");
                log("The following commands are executed by this synthesis command:\n");
                help_script();
@@ -67,7 +70,7 @@ struct SynthEfinixPass : public ScriptPass
        }
 
        string top_opt, edif_file, json_file;
-       bool flatten, retime;
+       bool flatten, retime, nobram;
 
        void clear_flags() YS_OVERRIDE
        {
@@ -76,6 +79,7 @@ struct SynthEfinixPass : public ScriptPass
                json_file = "";
                flatten = true;
                retime = false;
+               nobram = false;
        }
 
        void execute(std::vector<std::string> args, RTLIL::Design *design) YS_OVERRIDE
@@ -114,6 +118,10 @@ struct SynthEfinixPass : public ScriptPass
                                retime = true;
                                continue;
                        }
+                       if (args[argidx] == "-nobram") {
+                               nobram = true;
+                               continue;
+                       }
                        break;
                }
                extra_args(args, argidx, design);
@@ -150,11 +158,22 @@ struct SynthEfinixPass : public ScriptPass
                        run("synth -run coarse");
                }
 
-               if (check_label("fine"))
+               if (!nobram || check_label("map_bram", "(skip if -nobram)"))
+               {
+                       run("memory_bram -rules +/efinix/brams.txt");
+                       run("techmap -map +/efinix/brams_map.v");
+                       run("setundef -zero -params t:EFX_RAM_5K");
+               }
+
+               if (check_label("map_ffram"))
                {
                        run("opt -fast -mux_undef -undriven -fine");
                        run("memory_map");
                        run("opt -undriven -fine");
+               }
+
+               if (check_label("map_gates"))
+               {
                        run("techmap -map +/techmap.v -map +/efinix/arith_map.v");
                        if (retime || help_mode)
                                run("abc -dff", "(only if -retime)");
@@ -184,9 +203,10 @@ struct SynthEfinixPass : public ScriptPass
                if (check_label("map_gbuf"))
                {
                        run("efinix_gbuf");
+                       run("efinix_fixcarry");
                        run("clean");
                }
-               
+
                if (check_label("check"))
                {
                        run("hierarchy -check");