Copy attributes to _TECHMAP_REPLACE_ cells

This commit is contained in:
Clifford Wolf 2017-02-16 12:28:42 +01:00
parent e6d56d23b5
commit cf25dc9ce7
1 changed files with 8 additions and 2 deletions

View File

@ -327,8 +327,9 @@ struct TechmapWorker
for (auto &it : tpl->cells_) for (auto &it : tpl->cells_)
{ {
std::string c_name = it.second->name.str(); 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; c_name = orig_cell_name;
else else
apply_prefix(cell->name.str(), c_name); apply_prefix(cell->name.str(), c_name);
@ -358,6 +359,11 @@ struct TechmapWorker
if (c->attributes.count("\\src")) if (c->attributes.count("\\src"))
c->add_strpool_attribute("\\src", extra_src_attrs); 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()) { for (auto &it : tpl->connections()) {
@ -1005,7 +1011,7 @@ struct TechmapPass : public Pass {
log("constant value.\n"); log("constant value.\n");
log("\n"); log("\n");
log("A cell with the name _TECHMAP_REPLACE_ in the map file will inherit the name\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("\n");
log("See 'help extract' for a pass that does the opposite thing.\n"); log("See 'help extract' for a pass that does the opposite thing.\n");
log("\n"); log("\n");