diff --git a/himbaechel/uarch/gatemate/constids.inc b/himbaechel/uarch/gatemate/constids.inc index 7b7e5e35..87b694b1 100644 --- a/himbaechel/uarch/gatemate/constids.inc +++ b/himbaechel/uarch/gatemate/constids.inc @@ -2500,6 +2500,14 @@ X(2B) X(DIE) X(GATEMATE_DIE) +// LUT permutation +X(LUT2_00) +X(LUT2_01) +X(LUT2_02) +X(LUT2_03) +X(LUT2_10) +X(LUT2_11) + // Timing X(timing_ADDF2x_IN5_8_comb2) X(timing_CIN_C_CINI) diff --git a/himbaechel/uarch/gatemate/gatemate.cc b/himbaechel/uarch/gatemate/gatemate.cc index 2bf1f683..ceeb3a2c 100644 --- a/himbaechel/uarch/gatemate/gatemate.cc +++ b/himbaechel/uarch/gatemate/gatemate.cc @@ -524,52 +524,52 @@ void GateMateImpl::postRoute() check_input(cell.second.get(), id_D1_01, false); check_input(cell.second.get(), id_D0_10, false); check_input(cell.second.get(), id_D1_10, false); - if (cfg.count(ctx->id("LUT2_11")) || cfg.count(ctx->id("LUT2_10"))) { - if (cfg.count(ctx->id("LUT2_11"))) { // lower - if (cfg.count(ctx->id("LUT2_02")) && !cfg.count(ctx->id("LUT2_03"))) { + if (cfg.count(id_LUT2_11) || cfg.count(id_LUT2_10)) { + if (cfg.count(id_LUT2_11)) { // lower + if (cfg.count(id_LUT2_02) && !cfg.count(id_LUT2_03)) { // both inputs on 02 l00 = l10; // config is now in 02 l10 = 0b1010; // LUT_D0 - we propagate only - } else if (!cfg.count(ctx->id("LUT2_02")) && cfg.count(ctx->id("LUT2_03"))) { + } else if (!cfg.count(id_LUT2_02) && cfg.count(id_LUT2_03)) { // both inputs on 03 l01 = l10; // config is now in 03 l10 = 0b1010; // LUT_D0 - we propagate only } else { // one input on 02, other on 03 (or LUT1) - if (cfg.count(ctx->id("LUT2_02"))) + if (cfg.count(id_LUT2_02)) l00 = 0b1010; // LUT_D0 - we propagate only - if (cfg.count(ctx->id("LUT2_03"))) + if (cfg.count(id_LUT2_03)) l01 = 0b1010; // LUT_D0 - we propagate only } - if (cfg.at(ctx->id("LUT2_11")) == 1) + if (cfg.at(id_LUT2_11) == 1) l10 = swap_lut2_inputs(l10); - if (cfg.count(ctx->id("LUT2_02")) && (cfg.at(ctx->id("LUT2_02")) == 1)) + if (cfg.count(id_LUT2_02) && (cfg.at(id_LUT2_02) == 1)) l00 = swap_lut2_inputs(l00); - if (cfg.count(ctx->id("LUT2_03")) && (cfg.at(ctx->id("LUT2_03")) == 1)) + if (cfg.count(id_LUT2_03) && (cfg.at(id_LUT2_03) == 1)) l01 = swap_lut2_inputs(l01); } else { // upper part - if (cfg.count(ctx->id("LUT2_00")) && !cfg.count(ctx->id("LUT2_01"))) { + if (cfg.count(id_LUT2_00) && !cfg.count(id_LUT2_01)) { // both inputs on 02 l00 = l10; // config is now in 02 l10 = 0b1010; // LUT_D0 - we propagate only - } else if (!cfg.count(ctx->id("LUT2_00")) && cfg.count(ctx->id("LUT2_01"))) { + } else if (!cfg.count(id_LUT2_00) && cfg.count(id_LUT2_01)) { // both inputs on 03 l01 = l10; // config is now in 03 l10 = 0b1010; // LUT_D0 - we propagate only } else { // one input on 02, other on 03 (or LUT1) - if (cfg.count(ctx->id("LUT2_00"))) + if (cfg.count(id_LUT2_00)) l00 = 0b1010; // LUT_D0 - we propagate only - if (cfg.count(ctx->id("LUT2_01"))) + if (cfg.count(id_LUT2_01)) l01 = 0b1010; // LUT_D0 - we propagate only } - if (cfg.at(ctx->id("LUT2_10")) == 1) + if (cfg.at(id_LUT2_10) == 1) l10 = swap_lut2_inputs(l10); - if (cfg.count(ctx->id("LUT2_00")) && (cfg.at(ctx->id("LUT2_00")) == 1)) + if (cfg.count(id_LUT2_00) && (cfg.at(id_LUT2_00) == 1)) l00 = swap_lut2_inputs(l00); - if (cfg.count(ctx->id("LUT2_01")) && (cfg.at(ctx->id("LUT2_01")) == 1)) + if (cfg.count(id_LUT2_01) && (cfg.at(id_LUT2_01) == 1)) l01 = swap_lut2_inputs(l01); } cell.second->params[id_INIT_L00] = Property(l00, 4); @@ -579,13 +579,13 @@ void GateMateImpl::postRoute() cell.second->renamePort(id_D0_10, port_mapping[id_D0_10]); cell.second->renamePort(id_D1_10, port_mapping[id_D1_10]); } else { - if (cfg.count(ctx->id("LUT2_00")) && cfg.at(ctx->id("LUT2_00")) == 1) + if (cfg.count(id_LUT2_00) && cfg.at(id_LUT2_00) == 1) l00 = swap_lut2_inputs(l00); - if (cfg.count(ctx->id("LUT2_01")) && cfg.at(ctx->id("LUT2_01")) == 1) + if (cfg.count(id_LUT2_01) && cfg.at(id_LUT2_01) == 1) l01 = swap_lut2_inputs(l01); - if (cfg.count(ctx->id("LUT2_02")) && cfg.at(ctx->id("LUT2_02")) == 1) + if (cfg.count(id_LUT2_02) && cfg.at(id_LUT2_02) == 1) l00 = swap_lut2_inputs(l00); - if (cfg.count(ctx->id("LUT2_03")) && cfg.at(ctx->id("LUT2_03")) == 1) + if (cfg.count(id_LUT2_03) && cfg.at(id_LUT2_03) == 1) l01 = swap_lut2_inputs(l01); cell.second->params[id_INIT_L00] = Property(l00, 4); @@ -616,13 +616,13 @@ void GateMateImpl::postRoute() check_input(cell.second.get(), id_D0_03, true); check_input(cell.second.get(), id_D1_03, true); - if (cfg.count(ctx->id("LUT2_00")) && cfg.at(ctx->id("LUT2_00")) == 1) + if (cfg.count(id_LUT2_00) && cfg.at(id_LUT2_00) == 1) l00 = swap_lut2_inputs(l00); - if (cfg.count(ctx->id("LUT2_01")) && cfg.at(ctx->id("LUT2_01")) == 1) + if (cfg.count(id_LUT2_01) && cfg.at(id_LUT2_01) == 1) l01 = swap_lut2_inputs(l01); - if (cfg.count(ctx->id("LUT2_02")) && cfg.at(ctx->id("LUT2_02")) == 1) + if (cfg.count(id_LUT2_02) && cfg.at(id_LUT2_02) == 1) l02 = swap_lut2_inputs(l02); - if (cfg.count(ctx->id("LUT2_03")) && cfg.at(ctx->id("LUT2_03")) == 1) + if (cfg.count(id_LUT2_03) && cfg.at(id_LUT2_03) == 1) l03 = swap_lut2_inputs(l03); cell.second->params[id_INIT_L00] = Property(l00, 4);