From e621e9b7615f9bf1d13b5c647ae839679d180cd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Povi=C5=A1er?= Date: Thu, 25 Jul 2024 11:41:22 +0200 Subject: [PATCH 1/3] simplemap: Do not mismap `$eqx` `$nex` `$bweqx` In general those are unsynthesizable primitives. Do not simply map them like they are an ordinary equality operator as that can hide issues. --- passes/techmap/simplemap.cc | 3 --- 1 file changed, 3 deletions(-) diff --git a/passes/techmap/simplemap.cc b/passes/techmap/simplemap.cc index 7461460fe..ab247a6d7 100644 --- a/passes/techmap/simplemap.cc +++ b/passes/techmap/simplemap.cc @@ -415,7 +415,6 @@ void simplemap_get_mappers(dict mappers[ID($or)] = simplemap_bitop; mappers[ID($xor)] = simplemap_bitop; mappers[ID($xnor)] = simplemap_bitop; - mappers[ID($bweqx)] = simplemap_bitop; mappers[ID($reduce_and)] = simplemap_reduce; mappers[ID($reduce_or)] = simplemap_reduce; mappers[ID($reduce_xor)] = simplemap_reduce; @@ -425,9 +424,7 @@ void simplemap_get_mappers(dict mappers[ID($logic_and)] = simplemap_logbin; mappers[ID($logic_or)] = simplemap_logbin; mappers[ID($eq)] = simplemap_eqne; - mappers[ID($eqx)] = simplemap_eqne; mappers[ID($ne)] = simplemap_eqne; - mappers[ID($nex)] = simplemap_eqne; mappers[ID($mux)] = simplemap_mux; mappers[ID($bwmux)] = simplemap_bwmux; mappers[ID($tribuf)] = simplemap_tribuf; From a0ab6ad7b088337a9990c655ca93bcf0f10ef695 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Povi=C5=A1er?= Date: Thu, 25 Jul 2024 11:41:42 +0200 Subject: [PATCH 2/3] simplemap: Autogenerate the help --- passes/techmap/simplemap.cc | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/passes/techmap/simplemap.cc b/passes/techmap/simplemap.cc index ab247a6d7..a7bc7ac15 100644 --- a/passes/techmap/simplemap.cc +++ b/passes/techmap/simplemap.cc @@ -478,11 +478,10 @@ struct SimplemapPass : public Pass { log("This pass maps a small selection of simple coarse-grain cells to yosys gate\n"); log("primitives. The following internal cell types are mapped by this pass:\n"); log("\n"); - log(" $not, $pos, $and, $or, $xor, $xnor\n"); - log(" $reduce_and, $reduce_or, $reduce_xor, $reduce_xnor, $reduce_bool\n"); - log(" $logic_not, $logic_and, $logic_or, $mux, $tribuf\n"); - log(" $sr, $ff, $dff, $dffe, $dffsr, $dffsre, $adff, $adffe, $aldff, $aldffe, $sdff,\n"); - log(" $sdffe, $sdffce, $dlatch, $adlatch, $dlatchsr\n"); + dict mappers; + simplemap_get_mappers(mappers); + for (auto pair : mappers) + log(" - %s\n", log_id(pair.first)); log("\n"); } void execute(std::vector args, RTLIL::Design *design) override From 52c7ebe734913baa8bfca741581921eba875365d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Povi=C5=A1er?= Date: Thu, 25 Jul 2024 11:49:16 +0200 Subject: [PATCH 3/3] common: In default techmap do not call `simplemap` on `$eqx` and friends --- techlibs/common/techmap.v | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/techlibs/common/techmap.v b/techlibs/common/techmap.v index 68b276588..cddec914c 100644 --- a/techlibs/common/techmap.v +++ b/techlibs/common/techmap.v @@ -54,12 +54,12 @@ module _90_simplemap_logic_ops; endmodule (* techmap_simplemap *) -(* techmap_celltype = "$eq $eqx $ne $nex" *) +(* techmap_celltype = "$eq $ne" *) module _90_simplemap_compare_ops; endmodule (* techmap_simplemap *) -(* techmap_celltype = "$pos $slice $concat $mux $tribuf $bmux $bwmux $bweqx" *) +(* techmap_celltype = "$pos $slice $concat $mux $tribuf $bmux $bwmux" *) module _90_simplemap_various; endmodule