Merge pull request #1897 from YosysHQ/dave/bram-rejection-fix
[yosys.git] / techlibs / efinix / synth_efinix.cc
index 6fe0182ac250cf7b019cc48925b3915b050eb0ac..f9a7ef8654bdb8e06cccf2b9a56a5af77a0a02ac 100644 (file)
@@ -60,6 +60,9 @@ struct SynthEfinixPass : public ScriptPass
                log("    -retime\n");
                log("        run 'abc' with '-dff -D 1' options\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,26 +158,30 @@ struct SynthEfinixPass : public ScriptPass
                        run("synth -run coarse");
                }
 
-               if (check_label("map_bram", "(skip if -nobram)"))
+               if (!nobram || check_label("map_bram", "(skip if -nobram)"))
                {
-                       run("memory_bram -rules +/efinix/bram.txt");
+                       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("fine"))
+               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");
+                       run("opt -fast");
                        if (retime || help_mode)
                                run("abc -dff -D 1", "(only if -retime)");
                }
 
                if (check_label("map_ffs"))
                {
-                       run("dffsr2dff");
                        run("techmap -D NO_LUT -map +/efinix/cells_map.v");
                        run("dffinit -strinit SET RESET -ff AL_MAP_SEQ q REGSET -noreinit");
                        run("opt_expr -mux_undef");
@@ -194,7 +206,7 @@ struct SynthEfinixPass : public ScriptPass
                        run("efinix_fixcarry");
                        run("clean");
                }
-               
+
                if (check_label("check"))
                {
                        run("hierarchy -check");