ecp5: Fix constant and inverted CEMUX

Signed-off-by: gatecat <gatecat@ds0.me>
This commit is contained in:
gatecat 2025-01-27 09:00:07 +01:00 committed by myrtle
parent 0c060512c1
commit ede78f3730
1 changed files with 2 additions and 1 deletions

View File

@ -924,7 +924,8 @@ class Ecp5Packer
if (is_lut(ctx, uc)) { if (is_lut(ctx, uc)) {
set_lut_input_constant(uc, user.port, constval); set_lut_input_constant(uc, user.port, constval);
} else if (is_ff(ctx, uc) && user.port == id_CE) { } else if (is_ff(ctx, uc) && user.port == id_CE) {
uc->params[id_CEMUX] = std::string(constval ? "1" : "0"); bool inv = (str_or_default(uc->params, id_CEMUX, "CE") == "INV");
uc->params[id_CEMUX] = std::string((constval ^ inv) ? "1" : "0");
uc->ports[user.port].net = nullptr; uc->ports[user.port].net = nullptr;
} else if (is_carry(ctx, uc)) { } else if (is_carry(ctx, uc)) {
if (constval && (user.port.in(id_A0, id_A1, id_B0, id_B1, id_C0, id_C1, id_D0, id_D1))) { if (constval && (user.port.in(id_A0, id_A1, id_B0, id_B1, id_C0, id_C1, id_D0, id_D1))) {