From 1ba1829a8f8d2c4de749451808b9d625c86bf9de Mon Sep 17 00:00:00 2001 From: Lofty Date: Fri, 12 Sep 2025 16:47:45 +0100 Subject: [PATCH] more multiplier fixes --- himbaechel/uarch/gatemate/route_mult.cc | 70 +++++++++++++++++-------- 1 file changed, 49 insertions(+), 21 deletions(-) diff --git a/himbaechel/uarch/gatemate/route_mult.cc b/himbaechel/uarch/gatemate/route_mult.cc index 0c75a30d..93275b4e 100644 --- a/himbaechel/uarch/gatemate/route_mult.cc +++ b/himbaechel/uarch/gatemate/route_mult.cc @@ -66,16 +66,20 @@ void route_mult_diag(Context *ctx, NetInfo *net, Loc loc, WireId last_wire, int for (int i = 0; i < hops; i++) { auto in_mux_y = ctx->getWireByName( IdStringList::concat(ctx->idf("X%dY%d", loc.x + i, loc.y + i), ctx->idf("IM.P%02d.Y", plane))); + auto d4 = ctx->getWireByName( + IdStringList::concat(ctx->idf("X%dY%d", loc.x + i + 1, loc.y + i + 1), ctx->idf("IM.P%02d.D4", plane))); auto cpe_in = ctx->getWireByName( IdStringList::concat(ctx->idf("X%dY%d", loc.x + i, loc.y + i), ctx->idf("CPE.IN%d", plane))); auto cpe_in_int = ctx->getWireByName( IdStringList::concat(ctx->idf("X%dY%d", loc.x + i, loc.y + i), ctx->idf("CPE.IN%d_int", plane))); - find_and_bind_downhill_pip(ctx, last_wire, in_mux_y, net); // inverting - find_and_bind_downhill_pip(ctx, in_mux_y, cpe_in, net); // inverting + find_and_bind_downhill_pip(ctx, last_wire, in_mux_y, net); + find_and_bind_downhill_pip(ctx, in_mux_y, cpe_in, net); find_and_bind_downhill_pip(ctx, cpe_in, cpe_in_int, net); - last_wire = in_mux_y; + find_and_bind_downhill_pip(ctx, in_mux_y, d4, net); + + last_wire = d4; } } @@ -89,23 +93,27 @@ void route_mult_x1y1_lower(Context *ctx, NetInfo *net, CellInfo *lower, Loc loc, auto cpe_combout1 = ctx->getBelPinWire(lower->bel, id_OUT); auto cpe_out1_int = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("CPE.OUT1_int"))); + auto cpe_out1 = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("CPE.OUT1"))); auto in_mux = ctx->getWireByName(IdStringList::concat(x2y1, ctx->idf("IM.P05.D0"))); ctx->bindWire(cpe_combout1, net, STRENGTH_LOCKED); find_and_bind_downhill_pip(ctx, cpe_combout1, cpe_out1_int, net); + find_and_bind_downhill_pip(ctx, cpe_out1_int, cpe_out1, net); if (is_fourgroup_a) { auto sb_big = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("SB_BIG.P05.D0"))); - find_and_bind_downhill_pip(ctx, cpe_out1_int, sb_big, net); + find_and_bind_downhill_pip(ctx, cpe_out1, sb_big, net); find_and_bind_downhill_pip(ctx, sb_big, in_mux, net); // inverting } else { auto sb_sml_d0 = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("SB_SML.P05.D0"))); auto sb_sml_y1_int = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("SB_SML.P05.Y1_int"))); + auto sb_sml_y1 = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("SB_SML.P05.Y1"))); - find_and_bind_downhill_pip(ctx, cpe_out1_int, sb_sml_d0, net); + find_and_bind_downhill_pip(ctx, cpe_out1, sb_sml_d0, net); find_and_bind_downhill_pip(ctx, sb_sml_d0, sb_sml_y1_int, net); - find_and_bind_downhill_pip(ctx, sb_sml_y1_int, in_mux, net); // inverting + find_and_bind_downhill_pip(ctx, sb_sml_y1_int, sb_sml_y1, net); + find_and_bind_downhill_pip(ctx, sb_sml_y1, in_mux, net); // inverting } route_mult_diag(ctx, net, Loc{loc.x + 1, loc.y, 0}, in_mux, 5); @@ -121,21 +129,23 @@ void route_mult_x1y1_upper_in1(Context *ctx, NetInfo *net, CellInfo *upper, Loc auto cpe_combout2 = ctx->getBelPinWire(upper->bel, id_OUT); auto cpe_out2_int = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("CPE.OUT2_int"))); + auto cpe_out2 = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("CPE.OUT2"))); auto in_mux = ctx->getWireByName(IdStringList::concat(x2y1, ctx->idf("IM.P01.D0"))); ctx->bindWire(cpe_combout2, net, STRENGTH_LOCKED); find_and_bind_downhill_pip(ctx, cpe_combout2, cpe_out2_int, net); + find_and_bind_downhill_pip(ctx, cpe_out2_int, cpe_out2, net); if (is_fourgroup_a) { auto sb_big = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("SB_BIG.P01.D0"))); - find_and_bind_downhill_pip(ctx, cpe_out2_int, sb_big, net); + find_and_bind_downhill_pip(ctx, cpe_out2, sb_big, net); find_and_bind_downhill_pip(ctx, sb_big, in_mux, net); // inverting } else { auto sb_sml_d0 = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("SB_SML.P01.D0"))); auto sb_sml_y1_int = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("SB_SML.P01.Y1_int"))); - find_and_bind_downhill_pip(ctx, cpe_out2_int, sb_sml_d0, net); + find_and_bind_downhill_pip(ctx, cpe_out2, sb_sml_d0, net); find_and_bind_downhill_pip(ctx, sb_sml_d0, sb_sml_y1_int, net); find_and_bind_downhill_pip(ctx, sb_sml_y1_int, in_mux, net); // inverting } @@ -155,6 +165,7 @@ void route_mult_x1y1_upper_in8(Context *ctx, NetInfo *net, CellInfo *upper, Loc auto cpe_combout2 = ctx->getBelPinWire(upper->bel, id_OUT); auto cpe_out2_int = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("CPE.OUT2_int"))); + auto cpe_out2 = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("CPE.OUT2"))); auto out_mux_d0 = ctx->getWireByName(IdStringList::concat(x2y2, ctx->idf("OM.P12.D0"))); auto out_mux_y = ctx->getWireByName(IdStringList::concat(x2y2, ctx->idf("OM.P12.Y"))); auto in_mux_p12 = ctx->getWireByName(IdStringList::concat(x2y2, ctx->idf("IM.P12.D2"))); @@ -162,7 +173,8 @@ void route_mult_x1y1_upper_in8(Context *ctx, NetInfo *net, CellInfo *upper, Loc if (bind_route_start) { ctx->bindWire(cpe_combout2, net, STRENGTH_LOCKED); find_and_bind_downhill_pip(ctx, cpe_combout2, cpe_out2_int, net); - find_and_bind_downhill_pip(ctx, cpe_out2_int, out_mux_d0, net); + find_and_bind_downhill_pip(ctx, cpe_out2_int, cpe_out2, net); + find_and_bind_downhill_pip(ctx, cpe_out2, out_mux_d0, net); } find_and_bind_downhill_pip(ctx, out_mux_d0, out_mux_y, net); // inverting @@ -284,9 +296,11 @@ void route_mult_x1y2_upper_in1(Context *ctx, NetInfo *net, CellInfo *upper, Loc auto cpe_combout2 = ctx->getBelPinWire(upper->bel, id_OUT); auto cpe_out2_int = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("CPE.OUT2_int"))); + auto cpe_out2 = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("CPE.OUT2"))); ctx->bindWire(cpe_combout2, net, STRENGTH_LOCKED); find_and_bind_downhill_pip(ctx, cpe_combout2, cpe_out2_int, net); + find_and_bind_downhill_pip(ctx, cpe_out2_int, cpe_out2, net); auto in_mux = ctx->getWireByName(IdStringList::concat(x2y1, ctx->idf("IM.P01.D2"))); @@ -303,7 +317,7 @@ void route_mult_x1y2_upper_in1(Context *ctx, NetInfo *net, CellInfo *upper, Loc auto sb_big_ydiag = ctx->getWireByName(IdStringList::concat(x4y1, ctx->idf("SB_BIG.P01.YDIAG"))); // x2y1/IM.P01.D2 is x4y1/SB_BIG.P01.Y3 - find_and_bind_downhill_pip(ctx, cpe_out2_int, sb_sml_p02_d0, net); + find_and_bind_downhill_pip(ctx, cpe_out2, sb_sml_p02_d0, net); find_and_bind_downhill_pip(ctx, sb_sml_p02_d0, sb_sml_p02_y1, net); find_and_bind_downhill_pip(ctx, sb_sml_p02_y1, sb_sml_p02_ydiag_int, net); find_and_bind_downhill_pip(ctx, sb_sml_p02_ydiag_int, sb_sml_p02_ydiag, net); @@ -324,7 +338,7 @@ void route_mult_x1y2_upper_in1(Context *ctx, NetInfo *net, CellInfo *upper, Loc auto sb_sml_ydiag = ctx->getWireByName(IdStringList::concat(x4y1, ctx->idf("SB_SML.P01.YDIAG_int"))); auto sb_sml_y3 = ctx->getWireByName(IdStringList::concat(x4y1, ctx->idf("SB_SML.P01.Y3_int"))); - find_and_bind_downhill_pip(ctx, cpe_out2_int, sb_big_p02_d0, net); + find_and_bind_downhill_pip(ctx, cpe_out2, sb_big_p02_d0, net); find_and_bind_downhill_pip(ctx, sb_big_p02_d0, sb_big_p02_y1, net); find_and_bind_downhill_pip(ctx, sb_big_p02_y1, sb_big_p02_ydiag, net); find_and_bind_downhill_pip(ctx, sb_big_p02_ydiag, sb_big_p01_ydiag, net); @@ -350,6 +364,7 @@ void route_mult_x1y2_upper_in8(Context *ctx, NetInfo *net, CellInfo *upper, Loc auto cpe_combout2 = ctx->getBelPinWire(upper->bel, id_OUT); auto cpe_out2_int = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("CPE.OUT2_int"))); + auto cpe_out2 = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("CPE.OUT2"))); auto out_mux_d1 = ctx->getWireByName(IdStringList::concat(x2y1, ctx->idf("OM.P10.D1"))); auto out_mux_y = ctx->getWireByName(IdStringList::concat(x2y1, ctx->idf("OM.P10.Y"))); auto in_mux_p10 = ctx->getWireByName(IdStringList::concat(x2y2, ctx->idf("IM.P10.D1"))); @@ -357,7 +372,8 @@ void route_mult_x1y2_upper_in8(Context *ctx, NetInfo *net, CellInfo *upper, Loc if (bind_route_start) { ctx->bindWire(cpe_combout2, net, STRENGTH_LOCKED); find_and_bind_downhill_pip(ctx, cpe_combout2, cpe_out2_int, net); - find_and_bind_downhill_pip(ctx, cpe_out2_int, out_mux_d1, net); + find_and_bind_downhill_pip(ctx, cpe_out2_int, cpe_out2, net); + find_and_bind_downhill_pip(ctx, cpe_out2, out_mux_d1, net); } find_and_bind_downhill_pip(ctx, out_mux_d1, out_mux_y, net); // inverting @@ -396,10 +412,12 @@ void route_mult_x2y1_lower(Context *ctx, NetInfo *net, CellInfo *lower, Loc loc, auto cpe_combout1 = ctx->getBelPinWire(lower->bel, id_OUT); auto cpe_out1_int = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("CPE.OUT1_int"))); + auto cpe_out1 = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("CPE.OUT1"))); auto in_mux = ctx->getWireByName(IdStringList::concat(x2y1, ctx->idf("IM.P05.D0"))); ctx->bindWire(cpe_combout1, net, STRENGTH_LOCKED); find_and_bind_downhill_pip(ctx, cpe_combout1, cpe_out1_int, net); + find_and_bind_downhill_pip(ctx, cpe_out1_int, cpe_out1, net); if (is_fourgroup_a) { auto sb_big_p07_d0 = ctx->getWireByName(IdStringList::concat(x0y1, ctx->idf("SB_BIG.P07.D0"))); @@ -411,7 +429,7 @@ void route_mult_x2y1_lower(Context *ctx, NetInfo *net, CellInfo *lower, Loc loc, auto sb_big_p05_ydiag = ctx->getWireByName(IdStringList::concat(x0y1, ctx->idf("SB_BIG.P05.YDIAG"))); // x2y1/IM.P05.D0 is x0y1/SB_BIG.P05.Y1 - find_and_bind_downhill_pip(ctx, cpe_out1_int, sb_big_p07_d0, net); + find_and_bind_downhill_pip(ctx, cpe_out1, sb_big_p07_d0, net); find_and_bind_downhill_pip(ctx, sb_big_p07_d0, sb_big_p07_y1, net); find_and_bind_downhill_pip(ctx, sb_big_p07_y1, sb_big_p07_ydiag, net); find_and_bind_downhill_pip(ctx, sb_big_p07_ydiag, sb_big_p06_ydiag, net); @@ -429,7 +447,7 @@ void route_mult_x2y1_lower(Context *ctx, NetInfo *net, CellInfo *lower, Loc loc, auto sb_sml_p05_ydiag_int = ctx->getWireByName(IdStringList::concat(x0y1, ctx->idf("SB_SML.P05.YDIAG_int"))); auto sb_sml_p05_y1_int = ctx->getWireByName(IdStringList::concat(x0y1, ctx->idf("SB_SML.P05.Y1_int"))); - find_and_bind_downhill_pip(ctx, cpe_out1_int, sb_sml_p07_d0, net); + find_and_bind_downhill_pip(ctx, cpe_out1, sb_sml_p07_d0, net); find_and_bind_downhill_pip(ctx, sb_sml_p07_d0, sb_sml_p07_y1_int, net); find_and_bind_downhill_pip(ctx, sb_sml_p07_y1_int, sb_sml_p07_ydiag_int, net); find_and_bind_downhill_pip(ctx, sb_sml_p07_ydiag_int, sb_sml_p07_ydiag, net); @@ -454,10 +472,12 @@ void route_mult_x2y1_upper_in1(Context *ctx, NetInfo *net, CellInfo *upper, Loc auto cpe_combout2 = ctx->getBelPinWire(upper->bel, id_OUT); auto cpe_out2_int = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("CPE.OUT2_int"))); + auto cpe_out2 = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("CPE.OUT2"))); auto in_mux = ctx->getWireByName(IdStringList::concat(x2y1, ctx->idf("IM.P01.D0"))); ctx->bindWire(cpe_combout2, net, STRENGTH_LOCKED); find_and_bind_downhill_pip(ctx, cpe_combout2, cpe_out2_int, net); + find_and_bind_downhill_pip(ctx, cpe_out2_int, cpe_out2, net); if (is_fourgroup_a) { auto sb_big_p03_d0 = ctx->getWireByName(IdStringList::concat(x0y1, ctx->idf("SB_BIG.P03.D0"))); @@ -469,7 +489,7 @@ void route_mult_x2y1_upper_in1(Context *ctx, NetInfo *net, CellInfo *upper, Loc auto sb_big_p01_ydiag = ctx->getWireByName(IdStringList::concat(x0y1, ctx->idf("SB_BIG.P01.YDIAG"))); // x2y1/IM.P01.D0 is x0y1/SB_BIG.P01.Y1 - find_and_bind_downhill_pip(ctx, cpe_out2_int, sb_big_p03_d0, net); + find_and_bind_downhill_pip(ctx, cpe_out2, sb_big_p03_d0, net); find_and_bind_downhill_pip(ctx, sb_big_p03_d0, sb_big_p03_y1, net); find_and_bind_downhill_pip(ctx, sb_big_p03_y1, sb_big_p03_ydiag, net); find_and_bind_downhill_pip(ctx, sb_big_p03_ydiag, sb_big_p02_ydiag, net); @@ -487,7 +507,7 @@ void route_mult_x2y1_upper_in1(Context *ctx, NetInfo *net, CellInfo *upper, Loc auto sb_sml_p01_ydiag_int = ctx->getWireByName(IdStringList::concat(x0y1, ctx->idf("SB_SML.P01.YDIAG_int"))); auto sb_sml_p01_y1_int = ctx->getWireByName(IdStringList::concat(x0y1, ctx->idf("SB_SML.P01.Y1_int"))); - find_and_bind_downhill_pip(ctx, cpe_out2_int, sb_sml_p03_d0, net); + find_and_bind_downhill_pip(ctx, cpe_out2, sb_sml_p03_d0, net); find_and_bind_downhill_pip(ctx, sb_sml_p03_d0, sb_sml_p03_y1_int, net); find_and_bind_downhill_pip(ctx, sb_sml_p03_y1_int, sb_sml_p03_ydiag_int, net); find_and_bind_downhill_pip(ctx, sb_sml_p03_ydiag_int, sb_sml_p03_ydiag, net); @@ -513,6 +533,7 @@ void route_mult_x2y1_upper_in8(Context *ctx, NetInfo *net, CellInfo *upper, Loc auto cpe_combout2 = ctx->getBelPinWire(upper->bel, id_OUT); auto cpe_out2_int = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("CPE.OUT2_int"))); + auto cpe_out2 = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("CPE.OUT2"))); auto out_mux_d2 = ctx->getWireByName(IdStringList::concat(x1y2, ctx->idf("OM.P09.D2"))); auto out_mux_y = ctx->getWireByName(IdStringList::concat(x1y2, ctx->idf("OM.P09.Y"))); auto in_mux_p09 = ctx->getWireByName(IdStringList::concat(x2y2, ctx->idf("IM.P09.D0"))); @@ -520,7 +541,8 @@ void route_mult_x2y1_upper_in8(Context *ctx, NetInfo *net, CellInfo *upper, Loc if (bind_route_start) { ctx->bindWire(cpe_combout2, net, STRENGTH_LOCKED); find_and_bind_downhill_pip(ctx, cpe_combout2, cpe_out2_int, net); - find_and_bind_downhill_pip(ctx, cpe_out2_int, out_mux_d2, net); + find_and_bind_downhill_pip(ctx, cpe_out2_int, cpe_out2, net); + find_and_bind_downhill_pip(ctx, cpe_out2, out_mux_d2, net); } find_and_bind_downhill_pip(ctx, out_mux_d2, out_mux_y, net); // inverting @@ -558,10 +580,12 @@ void route_mult_x2y2_lower(Context *ctx, NetInfo *net, CellInfo *lower, Loc loc, auto cpe_combout1 = ctx->getBelPinWire(lower->bel, id_OUT); auto cpe_out1_int = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("CPE.OUT1_int"))); + auto cpe_out1 = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("CPE.OUT1"))); auto in_mux = ctx->getWireByName(IdStringList::concat(x2y1, ctx->idf("IM.P05.D0"))); ctx->bindWire(cpe_combout1, net, STRENGTH_LOCKED); find_and_bind_downhill_pip(ctx, cpe_combout1, cpe_out1_int, net); + find_and_bind_downhill_pip(ctx, cpe_out1_int, cpe_out1, net); if (is_fourgroup_a) { auto sb_sml_p08_d0 = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("SB_SML.P08.D0"))); @@ -578,7 +602,7 @@ void route_mult_x2y2_lower(Context *ctx, NetInfo *net, CellInfo *lower, Loc loc, auto sb_sml_p05_ydiag_int = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("SB_SML.P05.YDIAG_int"))); auto sb_sml_p05_y1_int = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("SB_SML.P05.Y1_int"))); - find_and_bind_downhill_pip(ctx, cpe_out1_int, sb_sml_p08_d0, net); + find_and_bind_downhill_pip(ctx, cpe_out1, sb_sml_p08_d0, net); find_and_bind_downhill_pip(ctx, sb_sml_p08_d0, sb_sml_p08_y1_int, net); find_and_bind_downhill_pip(ctx, sb_sml_p08_y1_int, sb_sml_p08_ydiag_int, net); find_and_bind_downhill_pip(ctx, sb_sml_p08_ydiag_int, sb_sml_p08_ydiag, net); // inverting @@ -601,7 +625,7 @@ void route_mult_x2y2_lower(Context *ctx, NetInfo *net, CellInfo *lower, Loc loc, auto sb_big_p05_ydiag = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("SB_BIG.P05.YDIAG"))); // x2y1/IM.P05.D0 is x1y1/SB_BIG.P05.Y1 - find_and_bind_downhill_pip(ctx, cpe_out1_int, sb_big_p08_d0, net); + find_and_bind_downhill_pip(ctx, cpe_out1, sb_big_p08_d0, net); find_and_bind_downhill_pip(ctx, sb_big_p08_d0, sb_big_p08_y1, net); find_and_bind_downhill_pip(ctx, sb_big_p08_y1, sb_big_p08_ydiag, net); find_and_bind_downhill_pip(ctx, sb_big_p08_ydiag, sb_big_p07_ydiag, net); @@ -623,10 +647,12 @@ void route_mult_x2y2_upper_in1(Context *ctx, NetInfo *net, CellInfo *upper, Loc auto cpe_combout2 = ctx->getBelPinWire(upper->bel, id_OUT); auto cpe_out2_int = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("CPE.OUT2_int"))); + auto cpe_out2 = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("CPE.OUT2"))); auto in_mux = ctx->getWireByName(IdStringList::concat(x2y1, ctx->idf("IM.P01.D0"))); ctx->bindWire(cpe_combout2, net, STRENGTH_LOCKED); find_and_bind_downhill_pip(ctx, cpe_combout2, cpe_out2_int, net); + find_and_bind_downhill_pip(ctx, cpe_out2_int, cpe_out2, net); if (is_fourgroup_a) { auto sb_sml_p04_d0 = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("SB_SML.P04.D0"))); @@ -691,17 +717,19 @@ void route_mult_x2y2_upper_in8(Context *ctx, NetInfo *net, CellInfo *upper, Loc auto cpe_combout2 = ctx->getBelPinWire(upper->bel, id_OUT); auto cpe_out2_int = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("CPE.OUT2_int"))); + auto cpe_out2 = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("CPE.OUT2"))); auto in_mux = ctx->getWireByName(IdStringList::concat(x2y2, ctx->idf("IM.P08.D1"))); if (bind_route_start) { ctx->bindWire(cpe_combout2, net, STRENGTH_LOCKED); find_and_bind_downhill_pip(ctx, cpe_combout2, cpe_out2_int, net); + find_and_bind_downhill_pip(ctx, cpe_out2_int, cpe_out2, net); if (is_fourgroup_a) { auto sb_big_d0 = ctx->getWireByName(IdStringList::concat(x0y0, ctx->idf("SB_BIG.P08.D0"))); - find_and_bind_downhill_pip(ctx, cpe_out2_int, sb_big_d0, net); + find_and_bind_downhill_pip(ctx, cpe_out2, sb_big_d0, net); } else { auto sb_sml_d0 = ctx->getWireByName(IdStringList::concat(x0y0, ctx->idf("SB_SML.P08.D0"))); - find_and_bind_downhill_pip(ctx, cpe_out2_int, sb_sml_d0, net); + find_and_bind_downhill_pip(ctx, cpe_out2, sb_sml_d0, net); } }