Converted "prep" to ScriptPass
authorClifford Wolf <clifford@clifford.at>
Sat, 23 Apr 2016 22:48:06 +0000 (00:48 +0200)
committerClifford Wolf <clifford@clifford.at>
Sat, 23 Apr 2016 22:48:06 +0000 (00:48 +0200)
techlibs/common/prep.cc
techlibs/common/synth.cc

index 25530648880f6d1d83c5b3223cfb863b3f8e54a8..9f1b7763cf24873780b1864ad853b078a3cba3c8 100644 (file)
 USING_YOSYS_NAMESPACE
 PRIVATE_NAMESPACE_BEGIN
 
-bool check_label(bool &active, std::string run_from, std::string run_to, std::string label)
+struct PrepPass : public ScriptPass
 {
-       if (!run_from.empty() && run_from == run_to) {
-               active = (label == run_from);
-       } else {
-               if (label == run_from)
-                       active = true;
-               if (label == run_to)
-                       active = false;
-       }
-       return active;
-}
+       PrepPass() : ScriptPass("prep", "generic synthesis script") { }
 
-struct PrepPass : public Pass {
-       PrepPass() : Pass("prep", "generic synthesis script") { }
-       virtual void help()
+       virtual void help() YS_OVERRIDE
        {
                //   |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|
                log("\n");
@@ -63,31 +52,21 @@ struct PrepPass : public Pass {
                log("\n");
                log("\n");
                log("The following commands are executed by this synthesis command:\n");
+               help_script();
                log("\n");
-               log("    begin:\n");
-               log("        hierarchy -check [-top <top>]\n");
-               log("\n");
-               log("    prep:\n");
-               log("        proc\n");
-               log("        opt_expr -keepdc\n");
-               log("        opt_clean\n");
-               log("        check\n");
-               log("        opt -keepdc\n");
-               log("        wreduce\n");
-               log("        memory_dff [-nordff]\n");
-               log("        opt_clean\n");
-               log("        memory_collect\n");
-               log("        opt -keepdc -fast\n");
-               log("\n");
-               log("    check:\n");
-               log("        stat\n");
-               log("        check\n");
-               log("\n");
        }
-       virtual void execute(std::vector<std::string> args, RTLIL::Design *design)
+
+       string top_module, fsm_opts, memory_opts;
+
+       virtual void clear_flags() YS_OVERRIDE
+       {
+               top_module.clear();
+               memory_opts.clear();
+       }
+
+       virtual void execute(std::vector<std::string> args, RTLIL::Design *design) YS_OVERRIDE
        {
-               std::string top_module, memory_opts;
-               std::string run_from, run_to;
+               string run_from, run_to;
 
                size_t argidx;
                for (argidx = 1; argidx < args.size(); argidx++)
@@ -118,40 +97,48 @@ struct PrepPass : public Pass {
                if (!design->full_selection())
                        log_cmd_error("This comannd only operates on fully selected designs!\n");
 
-               bool active = run_from.empty();
-
                log_header(design, "Executing PREP pass.\n");
                log_push();
 
-               if (check_label(active, run_from, run_to, "begin"))
+               run_script(design, run_from, run_to);
+
+               log_pop();
+       }
+
+       virtual void script() YS_OVERRIDE
+       {
+
+               if (check_label("begin"))
                {
-                       if (top_module.empty())
-                               Pass::call(design, stringf("hierarchy -check"));
-                       else
-                               Pass::call(design, stringf("hierarchy -check -top %s", top_module.c_str()));
+                       if (help_mode) {
+                               run("hierarchy -check [-top <top>]");
+                       } else {
+                               if (top_module.empty())
+                                       run("hierarchy -check");
+                               else
+                                       run(stringf("hierarchy -check -top %s", top_module.c_str()));
+                       }
                }
 
-               if (check_label(active, run_from, run_to, "coarse"))
+               if (check_label("coarse"))
                {
-                       Pass::call(design, "proc");
-                       Pass::call(design, "opt_expr -keepdc");
-                       Pass::call(design, "opt_clean");
-                       Pass::call(design, "check");
-                       Pass::call(design, "opt -keepdc");
-                       Pass::call(design, "wreduce");
-                       Pass::call(design, "memory_dff" + memory_opts);
-                       Pass::call(design, "opt_clean");
-                       Pass::call(design, "memory_collect");
-                       Pass::call(design, "opt -keepdc -fast");
+                       run("proc");
+                       run("opt_expr -keepdc");
+                       run("opt_clean");
+                       run("check");
+                       run("opt -keepdc");
+                       run("wreduce");
+                       run("memory_dff" + (help_mode ? " [-nordff]" : memory_opts));
+                       run("opt_clean");
+                       run("memory_collect");
+                       run("opt -keepdc -fast");
                }
 
-               if (check_label(active, run_from, run_to, "check"))
+               if (check_label("check"))
                {
-                       Pass::call(design, "stat");
-                       Pass::call(design, "check");
+                       run("stat");
+                       run("check");
                }
-
-               log_pop();
        }
 } PrepPass;
 
index acfe888d9393a6ae13724c4f37b682b4356d7a76..949678f36ded0b525f99b089ae8d3561b27bb452 100644 (file)
@@ -68,7 +68,7 @@ struct SynthPass : public ScriptPass
                log("\n");
        }
 
-       std::string top_module, fsm_opts, memory_opts;
+       string top_module, fsm_opts, memory_opts;
        bool noalumacc, nofsm, noabc;
 
        virtual void clear_flags() YS_OVERRIDE