From 5748b37b1c914a25087b2087d8f66733ba6d78be Mon Sep 17 00:00:00 2001 From: Krystine Sherwin <93062060+KrystalDelusion@users.noreply.github.com> Date: Fri, 7 Mar 2025 10:10:05 +1300 Subject: [PATCH 1/2] tests: Add test for reassigning localparam i.e. Wrong error message mentioning defparam when overriding localparam #4927 --- tests/various/hierarchy_reassign_localparam.ys | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 tests/various/hierarchy_reassign_localparam.ys diff --git a/tests/various/hierarchy_reassign_localparam.ys b/tests/various/hierarchy_reassign_localparam.ys new file mode 100644 index 000000000..e39203465 --- /dev/null +++ b/tests/various/hierarchy_reassign_localparam.ys @@ -0,0 +1,18 @@ +read_verilog -defer < Date: Fri, 7 Mar 2025 10:12:29 +1300 Subject: [PATCH 2/2] hierarchy: Derive abstract cells in top mod Previously abstract cells would only be derived if there was no top module declared, this means that `-check` would miss certain kinds of errors that it would normally detect. This fixes #4927. --- passes/hierarchy/hierarchy.cc | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/passes/hierarchy/hierarchy.cc b/passes/hierarchy/hierarchy.cc index 8372c0339..c1edf90fc 100644 --- a/passes/hierarchy/hierarchy.cc +++ b/passes/hierarchy/hierarchy.cc @@ -1066,6 +1066,17 @@ struct HierarchyPass : public Pass { mod->attributes[ID::initial_top] = RTLIL::Const(1); else mod->attributes.erase(ID::initial_top); + + std::vector abstract_ids; + for (auto cell : top_mod->cells()) { + IdString abstract_id = "$abstract" + cell->type.str(); + if (design->module(cell->type) == nullptr && design->module(abstract_id)) + abstract_ids.push_back(abstract_id); + } + for (auto abstract_id : abstract_ids) + design->module(abstract_id)->derive(design, {}); + for (auto abstract_id : abstract_ids) + design->remove(design->module(abstract_id)); } bool did_something = true;