From: Clifford Wolf Date: Thu, 16 Feb 2017 11:28:42 +0000 (+0100) Subject: Copy attributes to _TECHMAP_REPLACE_ cells X-Git-Tag: yosys-0.8~488 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=cf25dc9ce7216f740611d802eba6f978d18899e3;p=yosys.git Copy attributes to _TECHMAP_REPLACE_ cells --- 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");