mirror of https://github.com/YosysHQ/yosys.git
Added "extract -map %<design_name>"
This commit is contained in:
parent
483c99fe46
commit
236fc4209c
|
@ -315,6 +315,10 @@ struct ExtractPass : public Pass {
|
||||||
log(" use the modules in this file as reference. This option can be used\n");
|
log(" use the modules in this file as reference. This option can be used\n");
|
||||||
log(" multiple times.\n");
|
log(" multiple times.\n");
|
||||||
log("\n");
|
log("\n");
|
||||||
|
log(" -map %%<design-name>\n");
|
||||||
|
log(" use the modules in this in-memory design as reference. This option can\n");
|
||||||
|
log(" be used multiple times.\n");
|
||||||
|
log("\n");
|
||||||
log(" -verbose\n");
|
log(" -verbose\n");
|
||||||
log(" print debug output while analyzing\n");
|
log(" print debug output while analyzing\n");
|
||||||
log("\n");
|
log("\n");
|
||||||
|
@ -524,16 +528,32 @@ struct ExtractPass : public Pass {
|
||||||
if (!mine_mode)
|
if (!mine_mode)
|
||||||
{
|
{
|
||||||
map = new RTLIL::Design;
|
map = new RTLIL::Design;
|
||||||
for (auto &filename : map_filenames) {
|
for (auto &filename : map_filenames)
|
||||||
FILE *f = fopen(filename.c_str(), "rt");
|
{
|
||||||
if (f == NULL)
|
if (filename.substr(0, 1) == "%")
|
||||||
log_cmd_error("Can't open map file `%s'.\n", filename.c_str());
|
{
|
||||||
Frontend::frontend_call(map, f, filename, (filename.size() > 3 && filename.substr(filename.size()-3) == ".il") ? "ilang" : "verilog");
|
if (!saved_designs.count(filename.substr(1))) {
|
||||||
fclose(f);
|
delete map;
|
||||||
|
log_cmd_error("Can't saved design `%s'.\n", filename.c_str()+1);
|
||||||
|
}
|
||||||
|
for (auto &it : saved_designs.at(filename.substr(1))->modules)
|
||||||
|
if (!map->modules.count(it.first))
|
||||||
|
map->modules[it.first] = it.second->clone();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
FILE *f = fopen(filename.c_str(), "rt");
|
||||||
|
if (f == NULL) {
|
||||||
|
delete map;
|
||||||
|
log_cmd_error("Can't open map file `%s'.\n", filename.c_str());
|
||||||
|
}
|
||||||
|
Frontend::frontend_call(map, f, filename, (filename.size() > 3 && filename.substr(filename.size()-3) == ".il") ? "ilang" : "verilog");
|
||||||
|
fclose(f);
|
||||||
|
|
||||||
if (filename.size() <= 3 || filename.substr(filename.size()-3) != ".il") {
|
if (filename.size() <= 3 || filename.substr(filename.size()-3) != ".il") {
|
||||||
Pass::call(map, "proc");
|
Pass::call(map, "proc");
|
||||||
Pass::call(map, "opt_clean");
|
Pass::call(map, "opt_clean");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue