diff options
Diffstat (limited to 'techlibs/common/prep.cc')
-rw-r--r-- | techlibs/common/prep.cc | 21 |
1 files changed, 18 insertions, 3 deletions
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 <module>\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<std::string> 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 <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"); |