gatemate: do not use special serdes pins for auto placement

This commit is contained in:
Miodrag Milanovic 2025-06-18 09:56:54 +02:00
parent f58dd2d719
commit 311a1a711d
2 changed files with 16 additions and 4 deletions

View File

@ -51,13 +51,13 @@ void GateMateImpl::init(Context *ctx)
HimbaechelAPI::init(ctx);
for (const auto &pad : ctx->package_info->pads) {
available_pads.emplace(IdString(pad.package_pin));
available_pads.emplace(ctx->id("SER_CLK"));
available_pads.emplace(ctx->id("SER_CLK_N"));
BelId bel = ctx->getBelByName(IdStringList::concat(IdString(pad.tile), IdString(pad.bel)));
bel_to_pad.emplace(bel, &pad);
locations.emplace(std::make_pair(IdString(pad.package_pin), tile_extra_data(bel.tile)->die),
ctx->getBelLocation(bel));
}
available_pads.emplace(ctx->id("SER_CLK"));
available_pads.emplace(ctx->id("SER_CLK_N"));
for (auto bel : ctx->getBels()) {
auto *ptr = bel_extra_data(bel);
std::map<IdString, const GateMateBelPinConstraintPOD *> pins;

View File

@ -276,9 +276,21 @@ void GateMatePacker::pack_io()
ci.type = map_types[ci.type];
if (loc.empty() || loc == "UNPLACED") {
if (uarch->available_pads.empty())
// Skip SER_CLK and SER_CLK_N if found in available_pads
auto it = uarch->available_pads.begin();
while (it != uarch->available_pads.end()) {
std::string pad_name = it->str(ctx);
if (pad_name == "SER_CLK" || pad_name == "SER_CLK_N") {
++it;
continue;
}
break;
}
if (it == uarch->available_pads.end())
log_error("No more pads available.\n");
IdString id = *(uarch->available_pads.begin());
IdString id = *it;
uarch->available_pads.erase(id);
loc = id.c_str(ctx);
}