From cb592504f41b10c821069fdb3fdb392119890127 Mon Sep 17 00:00:00 2001 From: Clifford Wolf Date: Thu, 28 Feb 2013 11:14:59 +0100 Subject: Added more help messages (extract, abc, dfflibmap) --- passes/abc/abc.cc | 51 ++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 42 insertions(+), 9 deletions(-) (limited to 'passes/abc/abc.cc') diff --git a/passes/abc/abc.cc b/passes/abc/abc.cc index 251d0ba0..ba3494d1 100644 --- a/passes/abc/abc.cc +++ b/passes/abc/abc.cc @@ -309,7 +309,7 @@ static void handle_loops() fclose(dot_f); } -static void abc_module(RTLIL::Module *current_module, std::string script_file, std::string exe_file, std::string liberty_file, bool cleanup) +static void abc_module(RTLIL::Design *design, RTLIL::Module *current_module, std::string script_file, std::string exe_file, std::string liberty_file, bool cleanup) { module = current_module; map_autoidx = RTLIL::autoidx++; @@ -328,7 +328,8 @@ static void abc_module(RTLIL::Module *current_module, std::string script_file, s std::vector cells; cells.reserve(module->cells.size()); for (auto &it : module->cells) - cells.push_back(it.second); + if (design->selected(current_module, it.second)) + cells.push_back(it.second); for (auto c : cells) extract_cell(c); @@ -589,7 +590,38 @@ static void abc_module(RTLIL::Module *current_module, std::string script_file, s } struct AbcPass : public Pass { - AbcPass() : Pass("abc") { } + AbcPass() : Pass("abc", "use ABC for technology mapping") { } + virtual void help() + { + log("\n"); + log(" abc [options] [selection]\n"); + log("\n"); + log("This pass uses the ABC tool [1] for technology mapping of yosys's internal gate\n"); + log("library to a target architecture.\n"); + log("\n"); + log(" -exe \n"); + log(" use the specified command name instead of \"abc\" to execute ABC. This\n"); + log(" can e.g. be used to call a specific version of ABC or a wrapper script.\n"); + log("\n"); + log(" -script \n"); + log(" use the specified ABC script file instead of the default script.\n"); + log("\n"); + log(" -liberty \n"); + log(" generate netlists for the specified cell library (using the liberty\n"); + log(" file format). This option is ignored if also -script option is also\n"); + log(" used. Without this option, ABC is used to optimize the netlist but\n"); + log(" keeps using yosys's internal gate library.\n"); + log("\n"); + log(" -nocleanup\n"); + log(" when this option is used, the tempprary files created be this pass\n"); + log(" are not removed. this is usefull for debugging.\n"); + log("\n"); + log("This pass does not operate on modules with uprocessed processes in it.\n"); + log("(I.e. the 'proc' pass should be used first to convert processes to netlists.)\n"); + log("\n"); + log("[1] http://www.eecs.berkeley.edu/~alanmi/abc/\n"); + log("\n"); + } virtual void execute(std::vector args, RTLIL::Design *design) { log_header("Executing ABC pass (technology mapping using ABC).\n"); @@ -628,12 +660,13 @@ struct AbcPass : public Pass { free(pwd); extra_args(args, argidx, design); - for (auto &mod_it : design->modules) { - if (mod_it.second->processes.size() > 0) - log("Skipping module %s as it contains processes.\n", mod_it.second->name.c_str()); - else - abc_module(mod_it.second, script_file, exe_file, liberty_file, cleanup); - } + for (auto &mod_it : design->modules) + if (design->selected(mod_it.second)) { + if (mod_it.second->processes.size() > 0) + log("Skipping module %s as it contains processes.\n", mod_it.second->name.c_str()); + else + abc_module(design, mod_it.second, script_file, exe_file, liberty_file, cleanup); + } assign_map.clear(); signal_list.clear(); -- cgit v1.2.3