mirror of https://github.com/YosysHQ/nextpnr.git
clangformat
This commit is contained in:
parent
49001df290
commit
d26fc19724
|
|
@ -285,7 +285,8 @@ struct BitstreamBackend
|
|||
auto should_be_inverted = user.cell->constr_x % 2 == 1;
|
||||
auto inversion = need_inversion(user.cell, user.port);
|
||||
if (inversion == should_be_inverted)
|
||||
log_warning(" %s.%s at (%d, %d)\n", user.cell->name.c_str(ctx), user.port.c_str(ctx), loc.x, loc.y);
|
||||
log_warning(" %s.%s at (%d, %d)\n", user.cell->name.c_str(ctx), user.port.c_str(ctx), loc.x,
|
||||
loc.y);
|
||||
}
|
||||
|
||||
log_warning(" these ports are inverted:\n");
|
||||
|
|
@ -295,7 +296,8 @@ struct BitstreamBackend
|
|||
auto should_be_inverted = user.cell->constr_x % 2 == 1;
|
||||
auto inversion = need_inversion(user.cell, user.port);
|
||||
if (inversion != should_be_inverted)
|
||||
log_warning(" %s.%s at (%d, %d)\n", user.cell->name.c_str(ctx), user.port.c_str(ctx), loc.x, loc.y);
|
||||
log_warning(" %s.%s at (%d, %d)\n", user.cell->name.c_str(ctx), user.port.c_str(ctx), loc.x,
|
||||
loc.y);
|
||||
}
|
||||
} else if (all_inverted) {
|
||||
net->driver.cell->params[id_INIT_L10] = Property(~driver_l10 & 0b1111, 4);
|
||||
|
|
|
|||
|
|
@ -27,9 +27,10 @@
|
|||
#include "himbaechel_constids.h"
|
||||
|
||||
namespace {
|
||||
USING_NEXTPNR_NAMESPACE;
|
||||
USING_NEXTPNR_NAMESPACE;
|
||||
|
||||
void find_and_bind_downhill_pip(Context *ctx, WireId from, WireId to, NetInfo *net) {
|
||||
void find_and_bind_downhill_pip(Context *ctx, WireId from, WireId to, NetInfo *net)
|
||||
{
|
||||
NPNR_ASSERT(from != WireId());
|
||||
NPNR_ASSERT(to != WireId());
|
||||
for (auto pip : ctx->getPipsDownhill(from)) {
|
||||
|
|
@ -41,9 +42,10 @@ namespace {
|
|||
}
|
||||
}
|
||||
log_error("Couldn't find pip from %s to %s\n", ctx->nameOfWire(from), ctx->nameOfWire(to));
|
||||
}
|
||||
}
|
||||
|
||||
void route_mult_diag(Context *ctx, NetInfo *net, Loc loc, WireId last_wire, int plane) {
|
||||
void route_mult_diag(Context *ctx, NetInfo *net, Loc loc, WireId last_wire, int plane)
|
||||
{
|
||||
auto hops = 0;
|
||||
auto in_port = ctx->idf("IN%d", plane);
|
||||
for (auto user : net->users) {
|
||||
|
|
@ -54,17 +56,20 @@ namespace {
|
|||
log_info(" routing diagonal: %d hops\n", hops);
|
||||
|
||||
for (int i = 0; i < hops; i++) {
|
||||
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)));
|
||||
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, cpe_in, net); // inverting
|
||||
find_and_bind_downhill_pip(ctx, cpe_in, cpe_in_int, net);
|
||||
|
||||
last_wire = cpe_in;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void route_mult_x1y1_lower(Context *ctx, NetInfo *net, CellInfo* lower, Loc loc, bool is_fourgroup_a) {
|
||||
void route_mult_x1y1_lower(Context *ctx, NetInfo *net, CellInfo *lower, Loc loc, bool is_fourgroup_a)
|
||||
{
|
||||
log_info(" routing net '%s' -> IN5 using x1y1\n", net->name.c_str(ctx));
|
||||
|
||||
auto x1y1 = ctx->idf("X%dY%d", loc.x, loc.y);
|
||||
|
|
@ -92,9 +97,10 @@ namespace {
|
|||
}
|
||||
|
||||
route_mult_diag(ctx, net, Loc{loc.x + 1, loc.y, 0}, in_mux, 5);
|
||||
}
|
||||
}
|
||||
|
||||
void route_mult_x1y1_upper_in1(Context *ctx, NetInfo *net, CellInfo* upper, Loc loc, bool is_fourgroup_a) {
|
||||
void route_mult_x1y1_upper_in1(Context *ctx, NetInfo *net, CellInfo *upper, Loc loc, bool is_fourgroup_a)
|
||||
{
|
||||
log_info(" routing net '%s' -> IN1 using x1y1\n", net->name.c_str(ctx));
|
||||
|
||||
auto x1y1 = ctx->idf("X%dY%d", loc.x, loc.y);
|
||||
|
|
@ -122,9 +128,11 @@ namespace {
|
|||
}
|
||||
|
||||
route_mult_diag(ctx, net, Loc{loc.x + 1, loc.y, 0}, in_mux, 1);
|
||||
}
|
||||
}
|
||||
|
||||
void route_mult_x1y1_upper_in8(Context *ctx, NetInfo *net, CellInfo* upper, Loc loc, bool is_fourgroup_a, bool bind_route_start = false) {
|
||||
void route_mult_x1y1_upper_in8(Context *ctx, NetInfo *net, CellInfo *upper, Loc loc, bool is_fourgroup_a,
|
||||
bool bind_route_start = false)
|
||||
{
|
||||
log_info(" routing net '%s' -> IN8 using x1y1\n", net->name.c_str(ctx));
|
||||
|
||||
auto x1y1 = ctx->idf("X%dY%d", loc.x, loc.y);
|
||||
|
|
@ -157,7 +165,8 @@ namespace {
|
|||
find_and_bind_downhill_pip(ctx, sb_big_y1, sb_big_ydiag, net); // inverting
|
||||
find_and_bind_downhill_pip(ctx, sb_big_ydiag, in_mux_p12, net); // inverting
|
||||
} else {
|
||||
auto sb_big = ctx->getWireByName(IdStringList::concat(x2y2, ctx->idf("SB_BIG.P12.Y1"))); // aka x4y2/SB_SML.P12.D2_1
|
||||
auto sb_big =
|
||||
ctx->getWireByName(IdStringList::concat(x2y2, ctx->idf("SB_BIG.P12.Y1"))); // aka x4y2/SB_SML.P12.D2_1
|
||||
auto sb_sml_y1_int = ctx->getWireByName(IdStringList::concat(x4y2, ctx->idf("SB_SML.P12.Y1_int")));
|
||||
auto sb_sml_ydiag_int = ctx->getWireByName(IdStringList::concat(x4y2, ctx->idf("SB_SML.P12.YDIAG_int")));
|
||||
auto sb_sml_y3_int = ctx->getWireByName(IdStringList::concat(x4y2, ctx->idf("SB_SML.P12.Y3_int")));
|
||||
|
|
@ -176,9 +185,10 @@ namespace {
|
|||
find_and_bind_downhill_pip(ctx, in_mux_p04, in_mux_p08, net); // inverting
|
||||
|
||||
route_mult_diag(ctx, net, Loc{loc.x + 1, loc.y + 1, 0}, in_mux_p08, 8);
|
||||
}
|
||||
}
|
||||
|
||||
void route_mult_x1y2_lower(Context *ctx, NetInfo *net, CellInfo* lower, Loc loc, bool is_fourgroup_a) {
|
||||
void route_mult_x1y2_lower(Context *ctx, NetInfo *net, CellInfo *lower, Loc loc, bool is_fourgroup_a)
|
||||
{
|
||||
log_info(" routing net '%s' -> IN5 using x1y2\n", net->name.c_str(ctx));
|
||||
|
||||
auto x1y1 = ctx->idf("X%dY%d", loc.x, loc.y);
|
||||
|
|
@ -196,7 +206,8 @@ namespace {
|
|||
auto sb_sml_p06_d0 = ctx->getWireByName(IdStringList::concat(x2y1, ctx->idf("SB_SML.P06.D0")));
|
||||
auto sb_sml_p06_y1_int = ctx->getWireByName(IdStringList::concat(x2y1, ctx->idf("SB_SML.P06.Y1_int")));
|
||||
auto sb_sml_p06_ydiag_int = ctx->getWireByName(IdStringList::concat(x2y1, ctx->idf("SB_SML.P06.YDIAG_int")));
|
||||
auto sb_sml_p06_ydiag = ctx->getWireByName(IdStringList::concat(x2y1, ctx->idf("SB_SML.P06.YDIAG"))); // AKA SB_SML.P05.X23
|
||||
auto sb_sml_p06_ydiag =
|
||||
ctx->getWireByName(IdStringList::concat(x2y1, ctx->idf("SB_SML.P06.YDIAG"))); // AKA SB_SML.P05.X23
|
||||
auto sb_sml_p05_ydiag_int = ctx->getWireByName(IdStringList::concat(x2y1, ctx->idf("SB_SML.P05.YDIAG_int")));
|
||||
auto sb_sml_p05_y1_int = ctx->getWireByName(IdStringList::concat(x2y1, ctx->idf("SB_SML.P05.Y1_int")));
|
||||
auto sb_sml_p05_y1 = ctx->getWireByName(IdStringList::concat(x2y1, ctx->idf("SB_SML.P05.Y1")));
|
||||
|
|
@ -211,13 +222,14 @@ namespace {
|
|||
find_and_bind_downhill_pip(ctx, sb_sml_p06_ydiag, sb_sml_p05_ydiag_int, net);
|
||||
find_and_bind_downhill_pip(ctx, sb_sml_p05_ydiag_int, sb_sml_p05_y1_int, net);
|
||||
find_and_bind_downhill_pip(ctx, sb_sml_p05_y1_int, sb_sml_p05_y1, net);
|
||||
find_and_bind_downhill_pip(ctx, sb_sml_p05_y1,sb_big_y1, net);
|
||||
find_and_bind_downhill_pip(ctx, sb_sml_p05_y1, sb_big_y1, net);
|
||||
find_and_bind_downhill_pip(ctx, sb_big_y1, sb_big_ydiag, net);
|
||||
find_and_bind_downhill_pip(ctx, sb_big_ydiag, in_mux, net);
|
||||
} else {
|
||||
auto sb_big_p06_d0 = ctx->getWireByName(IdStringList::concat(x2y1, ctx->idf("SB_BIG.P06.D0")));
|
||||
auto sb_big_p06_y1 = ctx->getWireByName(IdStringList::concat(x2y1, ctx->idf("SB_BIG.P06.Y1")));
|
||||
auto sb_big_p06_ydiag = ctx->getWireByName(IdStringList::concat(x2y1, ctx->idf("SB_BIG.P06.YDIAG"))); // AKA SB_BIG.P05.X23
|
||||
auto sb_big_p06_ydiag =
|
||||
ctx->getWireByName(IdStringList::concat(x2y1, ctx->idf("SB_BIG.P06.YDIAG"))); // AKA SB_BIG.P05.X23
|
||||
auto sb_big_p05_ydiag = ctx->getWireByName(IdStringList::concat(x2y1, ctx->idf("SB_BIG.P05.YDIAG")));
|
||||
auto sb_big_p05_y1 = ctx->getWireByName(IdStringList::concat(x2y1, ctx->idf("SB_BIG.P05.Y1")));
|
||||
auto sb_sml_y1_int = ctx->getWireByName(IdStringList::concat(x4y1, ctx->idf("SB_SML.P05.Y1_int")));
|
||||
|
|
@ -230,15 +242,16 @@ namespace {
|
|||
find_and_bind_downhill_pip(ctx, sb_big_p06_ydiag, sb_big_p05_ydiag, net);
|
||||
find_and_bind_downhill_pip(ctx, sb_big_p05_ydiag, sb_big_p05_y1, net);
|
||||
find_and_bind_downhill_pip(ctx, sb_big_p05_y1, sb_sml_y1_int, net);
|
||||
find_and_bind_downhill_pip(ctx, sb_sml_y1_int,sb_sml_ydiag_int, net);
|
||||
find_and_bind_downhill_pip(ctx, sb_sml_y1_int, sb_sml_ydiag_int, net);
|
||||
find_and_bind_downhill_pip(ctx, sb_sml_ydiag_int, sb_sml_y3_int, net);
|
||||
find_and_bind_downhill_pip(ctx, sb_sml_y3_int, in_mux, net);
|
||||
}
|
||||
|
||||
route_mult_diag(ctx, net, Loc{loc.x + 1, loc.y, 0}, in_mux, 5);
|
||||
}
|
||||
}
|
||||
|
||||
void route_mult_x1y2_upper_in1(Context *ctx, NetInfo *net, CellInfo* upper, Loc loc, bool is_fourgroup_a) {
|
||||
void route_mult_x1y2_upper_in1(Context *ctx, NetInfo *net, CellInfo *upper, Loc loc, bool is_fourgroup_a)
|
||||
{
|
||||
log_info(" routing net '%s' -> IN1 using x1y2\n", net->name.c_str(ctx));
|
||||
|
||||
auto x1y1 = ctx->idf("X%dY%d", loc.x, loc.y);
|
||||
|
|
@ -257,7 +270,8 @@ namespace {
|
|||
auto sb_sml_p02_d0 = ctx->getWireByName(IdStringList::concat(x2y1, ctx->idf("SB_SML.P02.D0")));
|
||||
auto sb_sml_p02_y1 = ctx->getWireByName(IdStringList::concat(x2y1, ctx->idf("SB_SML.P02.Y1_int")));
|
||||
auto sb_sml_p02_ydiag_int = ctx->getWireByName(IdStringList::concat(x2y1, ctx->idf("SB_SML.P02.YDIAG_int")));
|
||||
auto sb_sml_p02_ydiag = ctx->getWireByName(IdStringList::concat(x2y1, ctx->idf("SB_SML.P02.YDIAG"))); // AKA SB_SML.P01.X23
|
||||
auto sb_sml_p02_ydiag =
|
||||
ctx->getWireByName(IdStringList::concat(x2y1, ctx->idf("SB_SML.P02.YDIAG"))); // AKA SB_SML.P01.X23
|
||||
auto sb_sml_p01_ydiag = ctx->getWireByName(IdStringList::concat(x2y1, ctx->idf("SB_SML.P01.YDIAG_int")));
|
||||
auto sb_sml_p01_y1 = ctx->getWireByName(IdStringList::concat(x2y1, ctx->idf("SB_SML.P01.Y1_int")));
|
||||
auto sb_big_d2_1 = ctx->getWireByName(IdStringList::concat(x4y1, ctx->idf("SB_BIG.P01.D2_1")));
|
||||
|
|
@ -278,7 +292,8 @@ namespace {
|
|||
} else {
|
||||
auto sb_big_p02_d0 = ctx->getWireByName(IdStringList::concat(x2y1, ctx->idf("SB_BIG.P02.D0")));
|
||||
auto sb_big_p02_y1 = ctx->getWireByName(IdStringList::concat(x2y1, ctx->idf("SB_BIG.P02.Y1")));
|
||||
auto sb_big_p02_ydiag = ctx->getWireByName(IdStringList::concat(x2y1, ctx->idf("SB_BIG.P02.YDIAG"))); // AKA SB_BIG.P01.X23
|
||||
auto sb_big_p02_ydiag =
|
||||
ctx->getWireByName(IdStringList::concat(x2y1, ctx->idf("SB_BIG.P02.YDIAG"))); // AKA SB_BIG.P01.X23
|
||||
auto sb_big_p01_ydiag = ctx->getWireByName(IdStringList::concat(x2y1, ctx->idf("SB_BIG.P01.YDIAG")));
|
||||
auto sb_big_p01_y1 = ctx->getWireByName(IdStringList::concat(x2y1, ctx->idf("SB_BIG.P01.Y1")));
|
||||
auto sb_sml_y1 = ctx->getWireByName(IdStringList::concat(x4y1, ctx->idf("SB_SML.P01.Y1_int")));
|
||||
|
|
@ -297,9 +312,11 @@ namespace {
|
|||
}
|
||||
|
||||
route_mult_diag(ctx, net, Loc{loc.x + 1, loc.y, 0}, in_mux, 1);
|
||||
}
|
||||
}
|
||||
|
||||
void route_mult_x1y2_upper_in8(Context *ctx, NetInfo *net, CellInfo* upper, Loc loc, bool is_fourgroup_a, bool bind_route_start = false) {
|
||||
void route_mult_x1y2_upper_in8(Context *ctx, NetInfo *net, CellInfo *upper, Loc loc, bool is_fourgroup_a,
|
||||
bool bind_route_start = false)
|
||||
{
|
||||
log_info(" routing net '%s' -> IN8 using x1y2\n", net->name.c_str(ctx));
|
||||
|
||||
auto x1y1 = ctx->idf("X%dY%d", loc.x, loc.y);
|
||||
|
|
@ -341,9 +358,10 @@ namespace {
|
|||
find_and_bind_downhill_pip(ctx, in_mux_p04, in_mux_p08, net); // inverting
|
||||
|
||||
route_mult_diag(ctx, net, Loc{loc.x + 1, loc.y + 1, 0}, in_mux_p08, 8);
|
||||
}
|
||||
}
|
||||
|
||||
void route_mult_x2y1_lower(Context *ctx, NetInfo *net, CellInfo* lower, Loc loc, bool is_fourgroup_a) {
|
||||
void route_mult_x2y1_lower(Context *ctx, NetInfo *net, CellInfo *lower, Loc loc, bool is_fourgroup_a)
|
||||
{
|
||||
log_info(" routing net '%s' -> IN5 using x2y1\n", net->name.c_str(ctx));
|
||||
|
||||
auto x0y1 = ctx->idf("X%dY%d", loc.x - 1, loc.y);
|
||||
|
|
@ -360,8 +378,10 @@ namespace {
|
|||
if (is_fourgroup_a) {
|
||||
auto sb_big_p07_d0 = ctx->getWireByName(IdStringList::concat(x0y1, ctx->idf("SB_BIG.P07.D0")));
|
||||
auto sb_big_p07_y1 = ctx->getWireByName(IdStringList::concat(x0y1, ctx->idf("SB_BIG.P07.Y1")));
|
||||
auto sb_big_p07_ydiag = ctx->getWireByName(IdStringList::concat(x0y1, ctx->idf("SB_BIG.P07.YDIAG"))); // AKA SB_BIG.P06.X23
|
||||
auto sb_big_p06_ydiag = ctx->getWireByName(IdStringList::concat(x0y1, ctx->idf("SB_BIG.P06.YDIAG"))); // AKA SB_BIG.P05.X23
|
||||
auto sb_big_p07_ydiag =
|
||||
ctx->getWireByName(IdStringList::concat(x0y1, ctx->idf("SB_BIG.P07.YDIAG"))); // AKA SB_BIG.P06.X23
|
||||
auto sb_big_p06_ydiag =
|
||||
ctx->getWireByName(IdStringList::concat(x0y1, ctx->idf("SB_BIG.P06.YDIAG"))); // AKA SB_BIG.P05.X23
|
||||
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
|
||||
|
||||
|
|
@ -375,9 +395,11 @@ namespace {
|
|||
auto sb_sml_p07_d0 = ctx->getWireByName(IdStringList::concat(x0y1, ctx->idf("SB_SML.P07.D0")));
|
||||
auto sb_sml_p07_y1_int = ctx->getWireByName(IdStringList::concat(x0y1, ctx->idf("SB_SML.P07.Y1_int")));
|
||||
auto sb_sml_p07_ydiag_int = ctx->getWireByName(IdStringList::concat(x0y1, ctx->idf("SB_SML.P07.YDIAG_int")));
|
||||
auto sb_sml_p07_ydiag = ctx->getWireByName(IdStringList::concat(x0y1, ctx->idf("SB_SML.P07.YDIAG"))); // AKA SB_SML.P06.X23
|
||||
auto sb_sml_p07_ydiag =
|
||||
ctx->getWireByName(IdStringList::concat(x0y1, ctx->idf("SB_SML.P07.YDIAG"))); // AKA SB_SML.P06.X23
|
||||
auto sb_sml_p06_ydiag_int = ctx->getWireByName(IdStringList::concat(x0y1, ctx->idf("SB_SML.P06.YDIAG_int")));
|
||||
auto sb_sml_p06_ydiag = ctx->getWireByName(IdStringList::concat(x0y1, ctx->idf("SB_SML.P06.YDIAG"))); // AKA SB_SML.P05.X23
|
||||
auto sb_sml_p06_ydiag =
|
||||
ctx->getWireByName(IdStringList::concat(x0y1, ctx->idf("SB_SML.P06.YDIAG"))); // AKA SB_SML.P05.X23
|
||||
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")));
|
||||
|
||||
|
|
@ -393,9 +415,10 @@ namespace {
|
|||
}
|
||||
|
||||
route_mult_diag(ctx, net, Loc{loc.x + 1, loc.y, 0}, in_mux, 5);
|
||||
}
|
||||
}
|
||||
|
||||
void route_mult_x2y1_upper_in1(Context *ctx, NetInfo *net, CellInfo* upper, Loc loc, bool is_fourgroup_a) {
|
||||
void route_mult_x2y1_upper_in1(Context *ctx, NetInfo *net, CellInfo *upper, Loc loc, bool is_fourgroup_a)
|
||||
{
|
||||
log_info(" routing net '%s' -> IN1 using x2y1\n", net->name.c_str(ctx));
|
||||
|
||||
auto x0y1 = ctx->idf("X%dY%d", loc.x - 1, loc.y);
|
||||
|
|
@ -412,8 +435,10 @@ namespace {
|
|||
if (is_fourgroup_a) {
|
||||
auto sb_big_p03_d0 = ctx->getWireByName(IdStringList::concat(x0y1, ctx->idf("SB_BIG.P03.D0")));
|
||||
auto sb_big_p03_y1 = ctx->getWireByName(IdStringList::concat(x0y1, ctx->idf("SB_BIG.P03.Y1")));
|
||||
auto sb_big_p03_ydiag = ctx->getWireByName(IdStringList::concat(x0y1, ctx->idf("SB_BIG.P03.YDIAG"))); // AKA SB_BIG.P02.X23
|
||||
auto sb_big_p02_ydiag = ctx->getWireByName(IdStringList::concat(x0y1, ctx->idf("SB_BIG.P02.YDIAG"))); // AKA SB_BIG.P01.X23
|
||||
auto sb_big_p03_ydiag =
|
||||
ctx->getWireByName(IdStringList::concat(x0y1, ctx->idf("SB_BIG.P03.YDIAG"))); // AKA SB_BIG.P02.X23
|
||||
auto sb_big_p02_ydiag =
|
||||
ctx->getWireByName(IdStringList::concat(x0y1, ctx->idf("SB_BIG.P02.YDIAG"))); // AKA SB_BIG.P01.X23
|
||||
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
|
||||
|
||||
|
|
@ -427,9 +452,11 @@ namespace {
|
|||
auto sb_sml_p03_d0 = ctx->getWireByName(IdStringList::concat(x0y1, ctx->idf("SB_SML.P03.D0")));
|
||||
auto sb_sml_p03_y1_int = ctx->getWireByName(IdStringList::concat(x0y1, ctx->idf("SB_SML.P03.Y1_int")));
|
||||
auto sb_sml_p03_ydiag_int = ctx->getWireByName(IdStringList::concat(x0y1, ctx->idf("SB_SML.P03.YDIAG_int")));
|
||||
auto sb_sml_p03_ydiag = ctx->getWireByName(IdStringList::concat(x0y1, ctx->idf("SB_SML.P03.YDIAG"))); // AKA SB_SML.P02.X23
|
||||
auto sb_sml_p03_ydiag =
|
||||
ctx->getWireByName(IdStringList::concat(x0y1, ctx->idf("SB_SML.P03.YDIAG"))); // AKA SB_SML.P02.X23
|
||||
auto sb_sml_p02_ydiag_int = ctx->getWireByName(IdStringList::concat(x0y1, ctx->idf("SB_SML.P02.YDIAG_int")));
|
||||
auto sb_sml_p02_ydiag = ctx->getWireByName(IdStringList::concat(x0y1, ctx->idf("SB_SML.P02.YDIAG"))); // AKA SB_SML.P01.X23
|
||||
auto sb_sml_p02_ydiag =
|
||||
ctx->getWireByName(IdStringList::concat(x0y1, ctx->idf("SB_SML.P02.YDIAG"))); // AKA SB_SML.P01.X23
|
||||
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")));
|
||||
|
||||
|
|
@ -445,9 +472,11 @@ namespace {
|
|||
}
|
||||
|
||||
route_mult_diag(ctx, net, Loc{loc.x + 1, loc.y, 0}, in_mux, 1);
|
||||
}
|
||||
}
|
||||
|
||||
void route_mult_x2y1_upper_in8(Context *ctx, NetInfo *net, CellInfo* upper, Loc loc, bool is_fourgroup_a, bool bind_route_start = false) {
|
||||
void route_mult_x2y1_upper_in8(Context *ctx, NetInfo *net, CellInfo *upper, Loc loc, bool is_fourgroup_a,
|
||||
bool bind_route_start = false)
|
||||
{
|
||||
log_info(" routing net '%s' -> IN8 using x2y1\n", net->name.c_str(ctx));
|
||||
|
||||
auto x1y1 = ctx->idf("X%dY%d", loc.x, loc.y);
|
||||
|
|
@ -489,9 +518,10 @@ namespace {
|
|||
find_and_bind_downhill_pip(ctx, in_mux_p04, in_mux_p08, net); // inverting
|
||||
|
||||
route_mult_diag(ctx, net, Loc{loc.x + 1, loc.y + 1, 0}, in_mux_p08, 8);
|
||||
}
|
||||
}
|
||||
|
||||
void route_mult_x2y2_lower(Context *ctx, NetInfo *net, CellInfo* lower, Loc loc, bool is_fourgroup_a) {
|
||||
void route_mult_x2y2_lower(Context *ctx, NetInfo *net, CellInfo *lower, Loc loc, bool is_fourgroup_a)
|
||||
{
|
||||
log_info(" routing net '%s' -> IN5 using x2y2\n", net->name.c_str(ctx));
|
||||
|
||||
auto x1y1 = ctx->idf("X%dY%d", loc.x, loc.y);
|
||||
|
|
@ -508,11 +538,14 @@ namespace {
|
|||
auto sb_sml_p08_d0 = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("SB_SML.P08.D0")));
|
||||
auto sb_sml_p08_y1_int = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("SB_SML.P08.Y1_int")));
|
||||
auto sb_sml_p08_ydiag_int = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("SB_SML.P08.YDIAG_int")));
|
||||
auto sb_sml_p08_ydiag = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("SB_SML.P08.YDIAG"))); // AKA SB_SML.P07.X23
|
||||
auto sb_sml_p08_ydiag =
|
||||
ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("SB_SML.P08.YDIAG"))); // AKA SB_SML.P07.X23
|
||||
auto sb_sml_p07_ydiag_int = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("SB_SML.P07.YDIAG_int")));
|
||||
auto sb_sml_p07_ydiag = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("SB_SML.P07.YDIAG"))); // AKA SB_SML.P06.X23
|
||||
auto sb_sml_p07_ydiag =
|
||||
ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("SB_SML.P07.YDIAG"))); // AKA SB_SML.P06.X23
|
||||
auto sb_sml_p06_ydiag_int = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("SB_SML.P06.YDIAG_int")));
|
||||
auto sb_sml_p06_ydiag = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("SB_SML.P06.YDIAG"))); // AKA SB_SML.P05.X23
|
||||
auto sb_sml_p06_ydiag =
|
||||
ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("SB_SML.P06.YDIAG"))); // AKA SB_SML.P05.X23
|
||||
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")));
|
||||
|
||||
|
|
@ -530,9 +563,12 @@ namespace {
|
|||
} else {
|
||||
auto sb_big_p08_d0 = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("SB_BIG.P08.D0")));
|
||||
auto sb_big_p08_y1 = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("SB_BIG.P08.Y1")));
|
||||
auto sb_big_p08_ydiag = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("SB_BIG.P08.YDIAG"))); // AKA SB_BIG.P07.X23
|
||||
auto sb_big_p07_ydiag = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("SB_BIG.P07.YDIAG"))); // AKA SB_BIG.P06.X23
|
||||
auto sb_big_p06_ydiag = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("SB_BIG.P06.YDIAG"))); // AKA SB_BIG.P05.X23
|
||||
auto sb_big_p08_ydiag =
|
||||
ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("SB_BIG.P08.YDIAG"))); // AKA SB_BIG.P07.X23
|
||||
auto sb_big_p07_ydiag =
|
||||
ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("SB_BIG.P07.YDIAG"))); // AKA SB_BIG.P06.X23
|
||||
auto sb_big_p06_ydiag =
|
||||
ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("SB_BIG.P06.YDIAG"))); // AKA SB_BIG.P05.X23
|
||||
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
|
||||
|
||||
|
|
@ -546,9 +582,10 @@ namespace {
|
|||
}
|
||||
|
||||
route_mult_diag(ctx, net, Loc{loc.x + 1, loc.y, 0}, in_mux, 5);
|
||||
}
|
||||
}
|
||||
|
||||
void route_mult_x2y2_upper_in1(Context *ctx, NetInfo *net, CellInfo* upper, Loc loc, bool is_fourgroup_a) {
|
||||
void route_mult_x2y2_upper_in1(Context *ctx, NetInfo *net, CellInfo *upper, Loc loc, bool is_fourgroup_a)
|
||||
{
|
||||
log_info(" routing net '%s' -> IN1 using x2y2\n", net->name.c_str(ctx));
|
||||
|
||||
auto x1y1 = ctx->idf("X%dY%d", loc.x, loc.y);
|
||||
|
|
@ -565,11 +602,14 @@ namespace {
|
|||
auto sb_sml_p04_d0 = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("SB_SML.P04.D0")));
|
||||
auto sb_sml_p04_y1_int = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("SB_SML.P04.Y1_int")));
|
||||
auto sb_sml_p04_ydiag_int = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("SB_SML.P04.YDIAG_int")));
|
||||
auto sb_sml_p04_ydiag = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("SB_SML.P04.YDIAG"))); // AKA SB_SML.P03.X23
|
||||
auto sb_sml_p04_ydiag =
|
||||
ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("SB_SML.P04.YDIAG"))); // AKA SB_SML.P03.X23
|
||||
auto sb_sml_p03_ydiag_int = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("SB_SML.P03.YDIAG_int")));
|
||||
auto sb_sml_p03_ydiag = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("SB_SML.P03.YDIAG"))); // AKA SB_SML.P02.X23
|
||||
auto sb_sml_p03_ydiag =
|
||||
ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("SB_SML.P03.YDIAG"))); // AKA SB_SML.P02.X23
|
||||
auto sb_sml_p02_ydiag_int = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("SB_SML.P02.YDIAG_int")));
|
||||
auto sb_sml_p02_ydiag = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("SB_SML.P02.YDIAG"))); // AKA SB_SML.P01.X23
|
||||
auto sb_sml_p02_ydiag =
|
||||
ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("SB_SML.P02.YDIAG"))); // AKA SB_SML.P01.X23
|
||||
auto sb_sml_p01_ydiag_int = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("SB_SML.P01.YDIAG_int")));
|
||||
auto sb_sml_p01_y1_int = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("SB_SML.P01.Y1_int")));
|
||||
|
||||
|
|
@ -587,9 +627,12 @@ namespace {
|
|||
} else {
|
||||
auto sb_big_p04_d0 = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("SB_BIG.P04.D0")));
|
||||
auto sb_big_p04_y1 = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("SB_BIG.P04.Y1")));
|
||||
auto sb_big_p04_ydiag = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("SB_BIG.P04.YDIAG"))); // AKA SB_BIG.P07.X23
|
||||
auto sb_big_p03_ydiag = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("SB_BIG.P03.YDIAG"))); // AKA SB_BIG.P05.X23
|
||||
auto sb_big_p02_ydiag = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("SB_BIG.P02.YDIAG"))); // AKA SB_BIG.P05.X23
|
||||
auto sb_big_p04_ydiag =
|
||||
ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("SB_BIG.P04.YDIAG"))); // AKA SB_BIG.P07.X23
|
||||
auto sb_big_p03_ydiag =
|
||||
ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("SB_BIG.P03.YDIAG"))); // AKA SB_BIG.P05.X23
|
||||
auto sb_big_p02_ydiag =
|
||||
ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("SB_BIG.P02.YDIAG"))); // AKA SB_BIG.P05.X23
|
||||
auto sb_big_p01_ydiag = ctx->getWireByName(IdStringList::concat(x1y1, ctx->idf("SB_BIG.P01.YDIAG")));
|
||||
// x2y1/IM.P05.D0 is x1y1/SB_BIG.P05.Y1
|
||||
|
||||
|
|
@ -603,9 +646,11 @@ namespace {
|
|||
}
|
||||
|
||||
route_mult_diag(ctx, net, Loc{loc.x + 1, loc.y, 0}, in_mux, 1);
|
||||
}
|
||||
}
|
||||
|
||||
void route_mult_x2y2_upper_in8(Context *ctx, NetInfo *net, CellInfo* upper, Loc loc, bool is_fourgroup_a, bool bind_route_start = false) {
|
||||
void route_mult_x2y2_upper_in8(Context *ctx, NetInfo *net, CellInfo *upper, Loc loc, bool is_fourgroup_a,
|
||||
bool bind_route_start = false)
|
||||
{
|
||||
log_info(" routing net '%s' -> IN8 using x2y2\n", net->name.c_str(ctx));
|
||||
|
||||
auto x0y0 = ctx->idf("X%dY%d", loc.x - 1, loc.y - 1);
|
||||
|
|
@ -657,12 +702,13 @@ namespace {
|
|||
}
|
||||
|
||||
route_mult_diag(ctx, net, Loc{loc.x + 1, loc.y + 1, 0}, in_mux, 8);
|
||||
}
|
||||
}
|
||||
} // namespace
|
||||
|
||||
NEXTPNR_NAMESPACE_BEGIN
|
||||
|
||||
void GateMateImpl::route_mult() {
|
||||
void GateMateImpl::route_mult()
|
||||
{
|
||||
log_info("Routing multipliers...\n");
|
||||
|
||||
// I am fully aware the nextpnr API is absolutely not designed around naming specific pips.
|
||||
|
|
@ -690,7 +736,8 @@ void GateMateImpl::route_mult() {
|
|||
log_info(" lower.OUT [OUT1] = %s\n", ctx->nameOfWire(ctx->getBelPinWire(lower->bel, id_OUT)));
|
||||
for (auto sink_port : lower->ports.at(id_OUT).net->users) {
|
||||
auto sink_loc = ctx->getBelLocation(sink_port.cell->bel);
|
||||
log_info(" -> %s.%s at (%d, %d)\n", sink_port.cell->name.c_str(ctx), sink_port.port.c_str(ctx), sink_loc.x, sink_loc.y);
|
||||
log_info(" -> %s.%s at (%d, %d)\n", sink_port.cell->name.c_str(ctx), sink_port.port.c_str(ctx),
|
||||
sink_loc.x, sink_loc.y);
|
||||
}
|
||||
|
||||
log_info(" upper.OUT [OUT2] = %s\n", ctx->nameOfWire(ctx->getBelPinWire(upper->bel, id_OUT)));
|
||||
|
|
@ -698,7 +745,8 @@ void GateMateImpl::route_mult() {
|
|||
if (sink_port.port == id_IN8)
|
||||
needs_in8_route = true;
|
||||
auto sink_loc = ctx->getBelLocation(sink_port.cell->bel);
|
||||
log_info(" -> %s.%s at (%d, %d)\n", sink_port.cell->name.c_str(ctx), sink_port.port.c_str(ctx), sink_loc.x, sink_loc.y);
|
||||
log_info(" -> %s.%s at (%d, %d)\n", sink_port.cell->name.c_str(ctx), sink_port.port.c_str(ctx),
|
||||
sink_loc.x, sink_loc.y);
|
||||
}
|
||||
|
||||
if (x_within_fourgroup == 0 && y_within_fourgroup == 0) {
|
||||
|
|
@ -740,7 +788,8 @@ void GateMateImpl::route_mult() {
|
|||
log_info(" zero_driver.OUT [OUT2] = %s\n", ctx->nameOfWire(ctx->getBelPinWire(zero_driver->bel, id_OUT)));
|
||||
for (auto sink_port : zero_driver->ports.at(id_OUT).net->users) {
|
||||
auto sink_loc = ctx->getBelLocation(sink_port.cell->bel);
|
||||
log_info(" -> %s.%s at (%d, %d)\n", sink_port.cell->name.c_str(ctx), sink_port.port.c_str(ctx), sink_loc.x, sink_loc.y);
|
||||
log_info(" -> %s.%s at (%d, %d)\n", sink_port.cell->name.c_str(ctx), sink_port.port.c_str(ctx),
|
||||
sink_loc.x, sink_loc.y);
|
||||
}
|
||||
|
||||
if (x_within_fourgroup == 0 && y_within_fourgroup == 0) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue