From a5ba1d2ebafd6a3c5e65d238811f59db55414b10 Mon Sep 17 00:00:00 2001 From: "N. Engelhardt" Date: Thu, 16 Jan 2025 12:57:08 +0100 Subject: [PATCH] fix bugs in handling last id in hdlname to scopename conversion --- kernel/scopeinfo.h | 4 +++- passes/fsm/fsm_extract.cc | 10 ++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/kernel/scopeinfo.h b/kernel/scopeinfo.h index 45d867b62..3bc1a8162 100644 --- a/kernel/scopeinfo.h +++ b/kernel/scopeinfo.h @@ -341,8 +341,10 @@ std::vector parse_hdlname(const O* object) path.push_back("\\" + item); if (path.empty() && object->name.isPublic()) path.push_back(object->name); - if (!path.empty() && !(object->name.isPublic() || object->name.begins_with("$paramod") || object->name.begins_with("$abstract"))) + if (!path.empty() && !(object->name.isPublic() || object->name.begins_with("$paramod") || object->name.begins_with("$abstract"))) { path.pop_back(); + path.push_back(object->name); + } return path; } diff --git a/passes/fsm/fsm_extract.cc b/passes/fsm/fsm_extract.cc index 17675b402..143ae7b54 100644 --- a/passes/fsm/fsm_extract.cc +++ b/passes/fsm/fsm_extract.cc @@ -378,7 +378,10 @@ static void extract_fsm(RTLIL::Wire *wire) fsm_cell->parameters[ID::NAME] = RTLIL::Const(wire->name.str()); fsm_cell->attributes = wire->attributes; if(fsm_cell->attributes.count(ID::hdlname)) { - fsm_cell->attributes[ID(scopename)] = fsm_cell->attributes[ID::hdlname]; + auto hdlname = fsm_cell->get_hdlname_attribute(); + hdlname.pop_back(); + fsm_cell->set_hdlname_attribute(hdlname); + fsm_cell->set_string_attribute(ID(scopename), fsm_cell->get_string_attribute(ID::hdlname)); fsm_cell->attributes.erase(ID::hdlname); } fsm_data.copy_to_cell(fsm_cell); @@ -390,7 +393,10 @@ static void extract_fsm(RTLIL::Wire *wire) wire->name = stringf("$fsm$oldstate%s", wire->name.c_str()); module->wires_[wire->name] = wire; if(wire->attributes.count(ID::hdlname)) { - wire->attributes[ID(scopename)] = wire->attributes[ID::hdlname]; + auto hdlname = wire->get_hdlname_attribute(); + hdlname.pop_back(); + wire->set_hdlname_attribute(hdlname); + wire->set_string_attribute(ID(scopename), wire->get_string_attribute(ID::hdlname)); wire->attributes.erase(ID::hdlname); }