diff options
author | Clifford Wolf <clifford@clifford.at> | 2017-02-16 12:28:42 +0100 |
---|---|---|
committer | Clifford Wolf <clifford@clifford.at> | 2017-02-16 12:28:42 +0100 |
commit | cf25dc9ce7216f740611d802eba6f978d18899e3 (patch) | |
tree | 19576ff96dadc4de4527ece6b35415c6c69bfc99 /passes | |
parent | e6d56d23b5a283dbb1d220e28168abf4c59c58c2 (diff) | |
download | yosys-cf25dc9ce7216f740611d802eba6f978d18899e3.tar.gz yosys-cf25dc9ce7216f740611d802eba6f978d18899e3.tar.bz2 yosys-cf25dc9ce7216f740611d802eba6f978d18899e3.zip |
Copy attributes to _TECHMAP_REPLACE_ cells
Diffstat (limited to 'passes')
-rw-r--r-- | passes/techmap/techmap.cc | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/passes/techmap/techmap.cc b/passes/techmap/techmap.cc index b351d3be8..e85714b57 100644 --- a/passes/techmap/techmap.cc +++ b/passes/techmap/techmap.cc @@ -327,8 +327,9 @@ struct TechmapWorker for (auto &it : tpl->cells_) { std::string c_name = it.second->name.str(); + bool techmap_replace_cell = (!flatten_mode) && (c_name == "\\_TECHMAP_REPLACE_"); - if (!flatten_mode && c_name == "\\_TECHMAP_REPLACE_") + if (techmap_replace_cell) c_name = orig_cell_name; else apply_prefix(cell->name.str(), c_name); @@ -358,6 +359,11 @@ struct TechmapWorker if (c->attributes.count("\\src")) c->add_strpool_attribute("\\src", extra_src_attrs); + + if (techmap_replace_cell) + for (auto attr : cell->attributes) + if (!c->attributes.count(attr.first)) + c->attributes[attr.first] = attr.second; } for (auto &it : tpl->connections()) { @@ -1005,7 +1011,7 @@ struct TechmapPass : public Pass { log("constant value.\n"); log("\n"); log("A cell with the name _TECHMAP_REPLACE_ in the map file will inherit the name\n"); - log("of the cell that is being replaced.\n"); + log("and attributes of the cell that is being replaced.\n"); log("\n"); log("See 'help extract' for a pass that does the opposite thing.\n"); log("\n"); |