diff options
author | whitequark <whitequark@whitequark.org> | 2020-04-21 01:43:20 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-04-21 01:43:20 +0000 |
commit | abc8f1fcb65bb99ef4bf6fc6c6aa3126c333c68f (patch) | |
tree | 40ecaa592ffcdc2c8dc5be675436e22c3ee5cfc1 | |
parent | 38ee59184ca50b37b4adacb957f553391b7769d4 (diff) | |
parent | 41421f5dca3587172c870b548921331398a06c19 (diff) | |
download | yosys-abc8f1fcb65bb99ef4bf6fc6c6aa3126c333c68f.tar.gz yosys-abc8f1fcb65bb99ef4bf6fc6c6aa3126c333c68f.tar.bz2 yosys-abc8f1fcb65bb99ef4bf6fc6c6aa3126c333c68f.zip |
Merge pull request #1961 from whitequark/paramod-original-name
ast, rpc: record original name of $paramod\* as \hdlname attribute
-rw-r--r-- | backends/firrtl/firrtl.cc | 13 | ||||
-rw-r--r-- | frontends/ast/ast.cc | 3 | ||||
-rw-r--r-- | frontends/rpc/rpc_frontend.cc | 2 |
3 files changed, 7 insertions, 11 deletions
diff --git a/backends/firrtl/firrtl.cc b/backends/firrtl/firrtl.cc index fd7f20cc6..40d05a036 100644 --- a/backends/firrtl/firrtl.cc +++ b/backends/firrtl/firrtl.cc @@ -306,17 +306,8 @@ struct FirrtlWorker // If this is a parameterized module, its parent module is encoded in the cell type if (cell->type.begins_with("$paramod")) { - std::string::iterator it; - for (it = cell_type.begin(); it < cell_type.end(); it++) - { - switch (*it) { - case '\\': /* FALL_THROUGH */ - case '=': /* FALL_THROUGH */ - case '\'': /* FALL_THROUGH */ - case '$': instanceOf.append("_"); break; - default: instanceOf.append(1, *it); break; - } - } + log_assert(cell->has_attribute(ID::hdlname)); + instanceOf = cell->get_string_attribute(ID::hdlname); } else { diff --git a/frontends/ast/ast.cc b/frontends/ast/ast.cc index 245a53611..de741a506 100644 --- a/frontends/ast/ast.cc +++ b/frontends/ast/ast.cc @@ -1565,6 +1565,9 @@ std::string AstModule::derive_common(RTLIL::Design *design, const dict<RTLIL::Id rewritten.reserve(GetSize(parameters)); AstNode *new_ast = ast->clone(); + if (!new_ast->attributes.count(ID::hdlname)) + new_ast->attributes[ID::hdlname] = AstNode::mkconst_str(stripped_name); + para_counter = 0; for (auto child : new_ast->children) { if (child->type != AST_PARAMETER) diff --git a/frontends/rpc/rpc_frontend.cc b/frontends/rpc/rpc_frontend.cc index a23f7548e..46ee6a733 100644 --- a/frontends/rpc/rpc_frontend.cc +++ b/frontends/rpc/rpc_frontend.cc @@ -217,6 +217,8 @@ struct RpcModule : RTLIL::Module { module.second->name = mangled_name; module.second->design = design; module.second->attributes.erase(ID::top); + if (!module.second->has_attribute(ID::hdlname)) + module.second->set_string_attribute(ID::hdlname, module.first.str()); design->modules_[mangled_name] = module.second; derived_design->modules_.erase(module.first); } |