From eaf7d9675de7e54ef55b5cd45784c2ea7556e8cf Mon Sep 17 00:00:00 2001 From: Clifford Wolf Date: Fri, 20 Dec 2013 12:34:34 +0100 Subject: [PATCH] Further improved dfflibmap cellmap exploration --- passes/techmap/dfflibmap.cc | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/passes/techmap/dfflibmap.cc b/passes/techmap/dfflibmap.cc index c35a09c26..a38ec66b2 100644 --- a/passes/techmap/dfflibmap.cc +++ b/passes/techmap/dfflibmap.cc @@ -473,20 +473,24 @@ struct DfflibmapPass : public Pass { find_cell_sr(libparser.ast, "$_DFFSR_PPN_", true, true, false); find_cell_sr(libparser.ast, "$_DFFSR_PPP_", true, true, true); - bool keep_running; - do { - keep_running = false; - keep_running |= expand_cellmap("$_DFF_?*?_", "R"); - keep_running |= expand_cellmap("$_DFF_??*_", "DQ"); - keep_running |= expand_cellmap("$_DFFSR_?*?_", "S"); - keep_running |= expand_cellmap("$_DFFSR_??*_", "R"); - } while (keep_running); - do { - keep_running = false; - keep_running |= expand_cellmap("$_DFF_*_", "C"); - keep_running |= expand_cellmap("$_DFF_*??_", "C"); - keep_running |= expand_cellmap("$_DFFSR_*??_", "C"); - } while (keep_running); + int level = 0; + while (level < 3) { + bool did_something = false; + switch (level) { + case 2: + did_something |= expand_cellmap("$_DFF_*_", "C"); + did_something |= expand_cellmap("$_DFF_*??_", "C"); + did_something |= expand_cellmap("$_DFFSR_*??_", "C"); + case 1: + did_something |= expand_cellmap("$_DFF_??*_", "DQ"); + case 0: + did_something |= expand_cellmap("$_DFF_?*?_", "R"); + did_something |= expand_cellmap("$_DFFSR_?*?_", "S"); + did_something |= expand_cellmap("$_DFFSR_??*_", "R"); + } + if (!did_something) + level++; + } map_sr_to_arst("$_DFFSR_NNN_", "$_DFF_NN0_"); map_sr_to_arst("$_DFFSR_NNN_", "$_DFF_NN1_"); -- 2.30.2