From 5db1765bee29f7f55fadba52ee86cf8f59583b3a Mon Sep 17 00:00:00 2001 From: "N. Engelhardt" Date: Thu, 17 Apr 2025 18:17:42 +0200 Subject: [PATCH] add flatten -nocleanup option --- passes/techmap/flatten.cc | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/passes/techmap/flatten.cc b/passes/techmap/flatten.cc index 3425509b1..6363b3432 100644 --- a/passes/techmap/flatten.cc +++ b/passes/techmap/flatten.cc @@ -349,6 +349,10 @@ struct FlattenPass : public Pass { log(" -separator \n"); log(" Use this separator char instead of '.' when concatenating design levels.\n"); log("\n"); + log(" -nocleanup\n"); + log(" Don't remove unused submodules, leave a flattened version of each\n"); + log(" submodule in the design.\n"); + log("\n"); } void execute(std::vector args, RTLIL::Design *design) override { @@ -360,6 +364,8 @@ struct FlattenPass : public Pass { if (design->scratchpad.count("flatten.separator")) worker.separator = design->scratchpad_get_string("flatten.separator"); + bool cleanup = true; + size_t argidx; for (argidx = 1; argidx < args.size(); argidx++) { if (args[argidx] == "-wb") { @@ -378,6 +384,10 @@ struct FlattenPass : public Pass { worker.separator = args[++argidx]; continue; } + if (args[argidx] == "-nocleanup") { + cleanup = false; + continue; + } break; } extra_args(args, argidx, design); @@ -414,7 +424,7 @@ struct FlattenPass : public Pass { for (auto module : topo_modules.sorted) worker.flatten_module(design, module, used_modules, worker.separator); - if (top != nullptr) + if (cleanup && top != nullptr) for (auto module : design->modules().to_vector()) if (!used_modules[module] && !module->get_blackbox_attribute(worker.ignore_wb)) { log("Deleting now unused module %s.\n", log_id(module));