aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorClifford Wolf <clifford@clifford.at>2017-02-16 12:28:42 +0100
committerClifford Wolf <clifford@clifford.at>2017-02-16 12:28:42 +0100
commitcf25dc9ce7216f740611d802eba6f978d18899e3 (patch)
tree19576ff96dadc4de4527ece6b35415c6c69bfc99
parente6d56d23b5a283dbb1d220e28168abf4c59c58c2 (diff)
downloadyosys-cf25dc9ce7216f740611d802eba6f978d18899e3.tar.gz
yosys-cf25dc9ce7216f740611d802eba6f978d18899e3.tar.bz2
yosys-cf25dc9ce7216f740611d802eba6f978d18899e3.zip
Copy attributes to _TECHMAP_REPLACE_ cells
-rw-r--r--passes/techmap/techmap.cc10
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");