From 7fccad92f76ddeee653d5dfec17868e9766a683a Mon Sep 17 00:00:00 2001 From: Clifford Wolf Date: Fri, 1 Mar 2013 00:36:19 +0100 Subject: Added more help messages --- passes/techmap/techmap.cc | 40 ++++++++++++++++++++++++++++++++++------ 1 file changed, 34 insertions(+), 6 deletions(-) (limited to 'passes/techmap') diff --git a/passes/techmap/techmap.cc b/passes/techmap/techmap.cc index 99fa15b9..d959dbe1 100644 --- a/passes/techmap/techmap.cc +++ b/passes/techmap/techmap.cc @@ -48,8 +48,11 @@ static void apply_prefix(std::string prefix, RTLIL::SigSpec &sig, RTLIL::Module std::map>, RTLIL::Module*> techmap_cache; -static bool techmap_module(RTLIL::Module *module, RTLIL::Design *map) +static bool techmap_module(RTLIL::Design *design, RTLIL::Module *module, RTLIL::Design *map) { + if (!design->selected(module)) + return false; + bool did_something = false; std::vector cell_names; @@ -64,6 +67,9 @@ static bool techmap_module(RTLIL::Module *module, RTLIL::Design *map) RTLIL::Cell *cell = module->cells[cell_name]; + if (!design->selected(module, cell)) + continue; + if (map->modules.count(cell->type) == 0) continue; @@ -157,7 +163,26 @@ static bool techmap_module(RTLIL::Module *module, RTLIL::Design *map) } struct TechmapPass : public Pass { - TechmapPass() : Pass("techmap") { } + TechmapPass() : Pass("techmap", "simple technology mapper") { } + virtual void help() + { + // |---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---|---v---| + log("\n"); + log(" techmap [-map filename] [selection]\n"); + log("\n"); + log("This pass implements a very simple technology mapper than replaces cells in\n"); + log("the design with implementations given in form of a verilog or ilang source\n"); + log("file.\n"); + log("\n"); + log(" -map filename\n"); + log(" the library of cell implementations to be used.\n"); + log(" without this parameter a builtin library is used that\n"); + log(" transform the internal RTL cells to the internal gate\n"); + log(" library.\n"); + log("\n"); + log("See 'help extract' for a pass that does the opposite thing.\n"); + log("\n"); + } virtual void execute(std::vector args, RTLIL::Design *design) { log_header("Executing TECHMAP pass (map to technology primitives).\n"); @@ -175,11 +200,14 @@ struct TechmapPass : public Pass { } extra_args(args, argidx, design); - RTLIL::Design *map = new RTLIL::Design; FILE *f = filename.empty() ? fmemopen(stdcells_code, strlen(stdcells_code), "rt") : fopen(filename.c_str(), "rt"); if (f == NULL) - log_error("Can't open map file `%s'\n", filename.c_str()); - Frontend::frontend_call(map, f, filename.empty() ? "" : filename, "verilog"); + log_cmd_error("Can't open map file `%s'\n", filename.c_str()); + + RTLIL::Design *map = new RTLIL::Design; + Frontend::frontend_call(map, f, filename.empty() ? "" : filename, + (filename.size() > 3 && filename.substr(filename.size()-3) == ".il") ? "ilang" : "verilog"); + fclose(f); std::map modules_new; @@ -194,7 +222,7 @@ struct TechmapPass : public Pass { while (did_something) { did_something = false; for (auto &mod_it : design->modules) - if (techmap_module(mod_it.second, map)) + if (techmap_module(design, mod_it.second, map)) did_something = true; } -- cgit v1.2.3