Properly duplicate GCKs

This commit is contained in:
Miodrag Milanovic 2024-06-26 11:21:39 +02:00
parent 7b929650ee
commit 120a3685a0

View File

@ -2107,23 +2107,30 @@ void NgUltraPacker::duplicate_gck()
} }
} }
} }
int cnt = 0;
if (connections.size()>1) CellInfo *driver = glb_net->driver.cell;
log_error("Unhandled\n"); NetInfo *si1 = driver->getPort(id_SI1);
NetInfo *si2 = driver->getPort(id_SI2);
NetInfo *cmd = driver->getPort(id_CMD);
for (auto &conn : connections) { for (auto &conn : connections) {
pool<BelId>& gck = uarch->gck_per_lobe[conn.first]; pool<BelId>& gck = uarch->gck_per_lobe[conn.first];
if (gck.size()==0) if (gck.size()==0)
log_error("No GCK left to promote global signal.\n"); log_error("No GCK left to promote global signal.\n");
BelId bel = gck.pop(); BelId bel = gck.pop();
CellInfo *gck_cell = glb_net->driver.cell; CellInfo *gck_cell = nullptr;
log_info(" Assign GCK '%s' to lobe %d\n",gck_cell->name.c_str(ctx), conn.first); if (cnt==0) {
/* gck_cell = driver;
log_info(" Create GCK for lobe %d\n",conn.first); log_info(" Assign GCK '%s' to lobe %d\n",gck_cell->name.c_str(ctx), conn.first);
CellInfo *gck_cell = create_cell_ptr(id_GCK, ctx->id(glb_net->name.str(ctx) + "$gck_"+ std::to_string(conn.first))); } else {
gck_cell->params[id_std_mode] = Property("BYPASS"); gck_cell = create_cell_ptr(id_GCK, ctx->id(driver->name.str(ctx) + "$gck_"+ std::to_string(conn.first)));
gck_cell->connectPort(id_SI1, glb_net);*/ log_info(" Create GCK '%s' for lobe %d\n",gck_cell->name.c_str(ctx), conn.first);
for (auto &params : driver->params)
gck_cell->params[params.first] = params.second;
if (si1) gck_cell->connectPort(id_SI1, si1);
if (si2) gck_cell->connectPort(id_SI2, si2);
if (cmd) gck_cell->connectPort(id_CMD, cmd);
}
gck_cell->disconnectPort(id_SO); gck_cell->disconnectPort(id_SO);
NetInfo *new_clk = ctx->createNet(ctx->id(gck_cell->name.str(ctx) + "$gck_"+ std::to_string(conn.first))); NetInfo *new_clk = ctx->createNet(ctx->id(gck_cell->name.str(ctx) + "$gck_"+ std::to_string(conn.first)));
gck_cell->connectPort(id_SO, new_clk); gck_cell->connectPort(id_SO, new_clk);
@ -2134,6 +2141,7 @@ void NgUltraPacker::duplicate_gck()
} }
ctx->bindBel(bel, gck_cell, PlaceStrength::STRENGTH_LOCKED); ctx->bindBel(bel, gck_cell, PlaceStrength::STRENGTH_LOCKED);
cnt++;
} }
} }