From 77aa2031e7e93b3d91b7594ad21d84e946b7cb04 Mon Sep 17 00:00:00 2001 From: Clifford Wolf Date: Sun, 24 Apr 2016 00:48:06 +0200 Subject: Converted "prep" to ScriptPass --- techlibs/common/prep.cc | 105 +++++++++++++++++++++-------------------------- techlibs/common/synth.cc | 2 +- 2 files changed, 47 insertions(+), 60 deletions(-) (limited to 'techlibs') diff --git a/techlibs/common/prep.cc b/techlibs/common/prep.cc index 255306488..9f1b7763c 100644 --- a/techlibs/common/prep.cc +++ b/techlibs/common/prep.cc @@ -25,22 +25,11 @@ 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 ]\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 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 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 ]"); + } 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; diff --git a/techlibs/common/synth.cc b/techlibs/common/synth.cc index acfe888d9..949678f36 100644 --- a/techlibs/common/synth.cc +++ b/techlibs/common/synth.cc @@ -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 -- cgit v1.2.3 From 09ffebb9959510cacdc04c926800223235f50313 Mon Sep 17 00:00:00 2001 From: Clifford Wolf Date: Sun, 24 Apr 2016 00:48:33 +0200 Subject: Added "prep -flatten" and "synth -flatten" --- techlibs/common/prep.cc | 21 ++++++++++++++++++--- techlibs/common/synth.cc | 22 ++++++++++++++++++---- 2 files changed, 36 insertions(+), 7 deletions(-) (limited to 'techlibs') diff --git a/techlibs/common/prep.cc b/techlibs/common/prep.cc index 9f1b7763c..cdd908e04 100644 --- a/techlibs/common/prep.cc +++ b/techlibs/common/prep.cc @@ -42,6 +42,10 @@ struct PrepPass : public ScriptPass log(" -top \n"); log(" use the specified module as top module (default='top')\n"); log("\n"); + log(" -flatten\n"); + log(" flatten the design before synthesis. this will pass '-auto-top' to\n"); + log(" 'hierarchy' if no top module is specified.\n"); + log("\n"); log(" -nordff\n"); log(" passed to 'memory_dff'. prohibits merging of FFs into memory read ports\n"); log("\n"); @@ -57,11 +61,13 @@ struct PrepPass : public ScriptPass } string top_module, fsm_opts, memory_opts; + bool flatten; virtual void clear_flags() YS_OVERRIDE { top_module.clear(); memory_opts.clear(); + flatten = false; } virtual void execute(std::vector args, RTLIL::Design *design) YS_OVERRIDE @@ -86,6 +92,10 @@ struct PrepPass : public ScriptPass } continue; } + if (args[argidx] == "-flatten") { + flatten = true; + continue; + } if (args[argidx] == "-nordff") { memory_opts += " -nordff"; continue; @@ -113,9 +123,12 @@ struct PrepPass : public ScriptPass if (help_mode) { run("hierarchy -check [-top ]"); } else { - if (top_module.empty()) - run("hierarchy -check"); - else + if (top_module.empty()) { + if (flatten) + run("hierarchy -check -auto-top"); + else + run("hierarchy -check"); + } else run(stringf("hierarchy -check -top %s", top_module.c_str())); } } @@ -123,6 +136,8 @@ struct PrepPass : public ScriptPass if (check_label("coarse")) { run("proc"); + if (help_mode || flatten) + run("flatten", "(if -flatten)"); run("opt_expr -keepdc"); run("opt_clean"); run("check"); diff --git a/techlibs/common/synth.cc b/techlibs/common/synth.cc index 949678f36..859a6606f 100644 --- a/techlibs/common/synth.cc +++ b/techlibs/common/synth.cc @@ -41,6 +41,10 @@ struct SynthPass : public ScriptPass log(" -top \n"); log(" use the specified module as top module (default='top')\n"); log("\n"); + log(" -flatten\n"); + log(" flatten the design before synthesis. this will pass '-auto-top' to\n"); + log(" 'hierarchy' if no top module is specified.\n"); + log("\n"); log(" -encfile \n"); log(" passed to 'fsm_recode' via 'fsm'\n"); log("\n"); @@ -69,7 +73,7 @@ struct SynthPass : public ScriptPass } string top_module, fsm_opts, memory_opts; - bool noalumacc, nofsm, noabc; + bool flatten, noalumacc, nofsm, noabc; virtual void clear_flags() YS_OVERRIDE { @@ -77,6 +81,7 @@ struct SynthPass : public ScriptPass fsm_opts.clear(); memory_opts.clear(); + flatten = false; noalumacc = false; nofsm = false; noabc = false; @@ -109,6 +114,10 @@ struct SynthPass : public ScriptPass } continue; } + if (args[argidx] == "-flatten") { + flatten = true; + continue; + } if (args[argidx] == "-nofsm") { nofsm = true; continue; @@ -147,9 +156,12 @@ struct SynthPass : public ScriptPass if (help_mode) { run("hierarchy -check [-top ]"); } else { - if (top_module.empty()) - run(stringf("hierarchy -check")); - else + if (top_module.empty()) { + if (flatten) + run("hierarchy -check -auto-top"); + else + run("hierarchy -check"); + } else run(stringf("hierarchy -check -top %s", top_module.c_str())); } } @@ -157,6 +169,8 @@ struct SynthPass : public ScriptPass if (check_label("coarse")) { run("proc"); + if (help_mode || flatten) + run("flatten", "(if -flatten)"); run("opt_expr"); run("opt_clean"); run("check"); -- cgit v1.2.3