From ec54c36850e45b8eeb9b611ed35fd05f628bc542 Mon Sep 17 00:00:00 2001 From: abhinavputhran Date: Fri, 6 Mar 2026 15:13:04 -0500 Subject: [PATCH] dfflibmap: pass selection to dfflegalize dfflibmap was calling dfflegalize on the whole design regardless of the active selection, causing unselected modules to be modified. Fix by appending selected module names to the dfflegalize command. Fixes #5650 --- passes/techmap/dfflibmap.cc | 2 ++ tests/techmap/dfflibmap.ys | 11 +++++++++++ 2 files changed, 13 insertions(+) diff --git a/passes/techmap/dfflibmap.cc b/passes/techmap/dfflibmap.cc index e8fc6fc12..fa8939fd3 100644 --- a/passes/techmap/dfflibmap.cc +++ b/passes/techmap/dfflibmap.cc @@ -694,6 +694,8 @@ struct DfflibmapPass : public Pass { for (auto it : cell_mappings) dfflegalize_cmd += stringf(" -cell %s 01", it.first); dfflegalize_cmd += " t:$_DFF* t:$_SDFF*"; + for (auto module : design->selected_modules()) + dfflegalize_cmd += " " + module -> name.str(); if (info_mode) { log("dfflegalize command line: %s\n", dfflegalize_cmd); } else { diff --git a/tests/techmap/dfflibmap.ys b/tests/techmap/dfflibmap.ys index 303daee48..087a0e5ff 100644 --- a/tests/techmap/dfflibmap.ys +++ b/tests/techmap/dfflibmap.ys @@ -97,3 +97,14 @@ select -assert-count 1 t:dffe # but we have to invert it because the CLEAR pin is active low. # ff2.CLEAR = !R select -assert-count 1 c:ff2 %x:+[CLEAR] %ci t:$_NOT_ %i + +# Test that dfflibmap respects selection and doesn't run dfflegalize on unselected modules +design -load orig +copy top top_unmapped +dfflibmap -liberty dfflibmap.lib top +# top should be mapped +select -module top -assert-count 1 t:dffn +# top_unmapped should have no mapped cells +select -module top_unmapped -assert-none t:dffn +select -module top_unmapped -assert-none t:dffe +select -module top_unmapped -assert-none t:dffsr