nexus: Fix slow routing around DQSBUFs

Signed-off-by: gatecat <gatecat@ds0.me>
This commit is contained in:
gatecat 2026-07-22 14:03:42 +02:00
parent f8097c3127
commit da46844ca6
2 changed files with 12 additions and 2 deletions

View File

@ -736,7 +736,10 @@ BoundingBox Arch::getRouteBoundingBox(WireId src, WireId dst) const
bb.y0 = std::max<int>(0, bb.y0 - 7);
bb.y1 = std::min<int>(chip_info->width, bb.y1 + 7);
}
if (dqsbuf_wires.count(src) || dqsbuf_wires.count(dst)) {
bb.x0 = std::max<int>(0, bb.x0 - 6);
bb.x1 = std::min<int>(chip_info->width, bb.x1 + 6);
}
return bb;
}
@ -796,6 +799,13 @@ void Arch::pre_routing()
lram_wires.insert(wire);
}
}
if (ci->type == id_DQSBUF_CORE) {
for (auto &port : ci->ports) {
WireId wire = getBelPinWire(ci->bel, port.first);
if (wire != WireId())
dqsbuf_wires.insert(wire);
}
}
}
}
namespace {

View File

@ -1319,7 +1319,7 @@ struct Arch : BaseArch<ArchRanges>
// for better DSP bounding boxes
void pre_routing();
pool<WireId> dsp_wires, lram_wires;
pool<WireId> dsp_wires, lram_wires, dqsbuf_wires;
// -------------------------------------------------