summaryrefslogtreecommitdiff
path: root/passes
diff options
context:
space:
mode:
authorClifford Wolf <clifford@clifford.at>2014-07-29 16:06:27 +0200
committerClifford Wolf <clifford@clifford.at>2014-07-29 16:35:13 +0200
commit03c96f9ce7120adf1c9bab93485a3b4bf6493ae9 (patch)
treec59b7586ba36ebc0dc1576337c882b44db5f8dc5 /passes
parent397b00252dc0c4af725614bd12fc299147ba8efa (diff)
Added "techmap -map %{design-name}"
Diffstat (limited to 'passes')
-rw-r--r--passes/techmap/extract.cc6
-rw-r--r--passes/techmap/techmap.cc23
2 files changed, 19 insertions, 10 deletions
diff --git a/passes/techmap/extract.cc b/passes/techmap/extract.cc
index 9c5fa7f7..19d32334 100644
--- a/passes/techmap/extract.cc
+++ b/passes/techmap/extract.cc
@@ -603,9 +603,9 @@ struct ExtractPass : public Pass {
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();
+ for (auto mod : saved_designs.at(filename.substr(1))->modules())
+ if (!map->has(mod->name))
+ map->add(mod->clone());
}
else
{
diff --git a/passes/techmap/techmap.cc b/passes/techmap/techmap.cc
index 5a69baca..0ae5220e 100644
--- a/passes/techmap/techmap.cc
+++ b/passes/techmap/techmap.cc
@@ -656,13 +656,22 @@ struct TechmapPass : public Pass {
Frontend::frontend_call(map, f, "<stdcells.v>", verilog_frontend);
fclose(f);
} else
- for (auto &fn : map_files) {
- FILE *f = fopen(fn.c_str(), "rt");
- if (f == NULL)
- log_cmd_error("Can't open map file `%s'\n", fn.c_str());
- Frontend::frontend_call(map, f, fn, (fn.size() > 3 && fn.substr(fn.size()-3) == ".il") ? "ilang" : verilog_frontend);
- fclose(f);
- }
+ for (auto &fn : map_files)
+ if (fn.substr(0, 1) == "%") {
+ if (!saved_designs.count(fn.substr(1))) {
+ delete map;
+ log_cmd_error("Can't saved design `%s'.\n", fn.c_str()+1);
+ }
+ for (auto mod : saved_designs.at(fn.substr(1))->modules())
+ if (!map->has(mod->name))
+ map->add(mod->clone());
+ } else {
+ FILE *f = fopen(fn.c_str(), "rt");
+ if (f == NULL)
+ log_cmd_error("Can't open map file `%s'\n", fn.c_str());
+ Frontend::frontend_call(map, f, fn, (fn.size() > 3 && fn.substr(fn.size()-3) == ".il") ? "ilang" : verilog_frontend);
+ fclose(f);
+ }
std::map<RTLIL::IdString, RTLIL::Module*> modules_new;
for (auto &it : map->modules_) {