From ed076bc168de5fa6f9c8b058fd0098b02610fc4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=98ystein=20Hovind?= Date: Wed, 30 Oct 2024 17:30:56 +0100 Subject: [PATCH] extract_fa: Invert xor3/xnor3 output when inverting majority3 input --- passes/techmap/extract_fa.cc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/passes/techmap/extract_fa.cc b/passes/techmap/extract_fa.cc index ec1979f3b..1984f82f5 100644 --- a/passes/techmap/extract_fa.cc +++ b/passes/techmap/extract_fa.cc @@ -412,14 +412,15 @@ struct ExtractFaWorker facache[fakey] = make_tuple(X, Y, cell); } + bool invert_y = f3i.inv_a ^ f3i.inv_b ^ f3i.inv_c; if (func3.at(key).count(xor3_func)) { - SigBit YY = invert_xy ? module->NotGate(NEW_ID, Y) : Y; + SigBit YY = invert_xy ^ invert_y ? module->NotGate(NEW_ID, Y) : Y; for (auto bit : func3.at(key).at(xor3_func)) assign_new_driver(bit, YY); } if (func3.at(key).count(xnor3_func)) { - SigBit YY = invert_xy ? Y : module->NotGate(NEW_ID, Y); + SigBit YY = invert_xy ^ invert_y ? Y : module->NotGate(NEW_ID, Y); for (auto bit : func3.at(key).at(xnor3_func)) assign_new_driver(bit, YY); }