From 88f52bcaba40fcb4c87fb63de054208b8630daaf Mon Sep 17 00:00:00 2001 From: Miodrag Milanovic Date: Mon, 4 Aug 2025 13:26:26 +0200 Subject: [PATCH] Fix multipliers on hardware --- himbaechel/uarch/gatemate/bitstream.cc | 2 +- himbaechel/uarch/gatemate/pack_mult.cc | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/himbaechel/uarch/gatemate/bitstream.cc b/himbaechel/uarch/gatemate/bitstream.cc index 492cb183..1ddb74d4 100644 --- a/himbaechel/uarch/gatemate/bitstream.cc +++ b/himbaechel/uarch/gatemate/bitstream.cc @@ -225,7 +225,7 @@ struct BitstreamBackend auto *net = ctx->cells.at(cell_name)->ports.at(id_OUT).net; int64_t driver_l10 = ctx->cells.at(cell_name)->params[id_INIT_L10].as_int64(); - bool driver_is_inverted = driver_l10 == LUT_ONE || driver_l10 == LUT_INV_D0; + bool driver_is_inverted = driver_l10 == LUT_INV_D0; bool all_correct = true; bool all_inverted = true; diff --git a/himbaechel/uarch/gatemate/pack_mult.cc b/himbaechel/uarch/gatemate/pack_mult.cc index 9fe0683c..f2005526 100644 --- a/himbaechel/uarch/gatemate/pack_mult.cc +++ b/himbaechel/uarch/gatemate/pack_mult.cc @@ -360,8 +360,9 @@ MultCell::MultCell(CellInfo *lower, CellInfo *upper, IdString name, bool is_msb) lower->params[id_C_C_P] = Property(0, 1); } - // upper->params[id_C_O1] = Property(0b10, 2); // CP_OUT1 -> OUT1 - // upper->params[id_C_O2] = Property(0b10, 2); // CP_OUT2 -> OUT2 + // Must force this one, even if outputs are not used to preserve logic + lower->params[id_C_O1] = Property(0b10, 2); // CP_OUT1 -> OUT1 + lower->params[id_C_O2] = Property(0b10, 2); // CP_OUT2 -> OUT2 } MsbRoutingCell::MsbRoutingCell(CellInfo *lower, CellInfo *upper, CellInfo *comp, CellInfo *cplines, IdString name)