nextpnr/himbaechel
Max Aigner 03223d1950 gatemate: prevent multiplier clusters from overlapping route_mult halos
route_mult binds dedicated, locked routing for each CC_MULT cluster with wires
computed from the cluster's placed location, reaching a couple of tiles outside
the cluster body (the A-passthrough column sits at root.x-1 and its switch-box
routes reach further). Nothing reserved those halo wires during placement and
there was no spacing rule between multiplier clusters, so once the placer packed
two clusters close enough their halos overlapped and route_mult double-bound a
shared wire -> abort in bindPip (base_arch.h: w2n_entry == nullptr). It was
seed-dependent and only surfaced on denser designs.

Add a placement-legality rule in isBelLocationValid: compute a multiplier
cluster's halo bounding box (its placed cells' bbox expanded by a margin that
covers route_mult's reach) and reject the placement if it overlaps another
multiplier cluster's halo. The multiplier cluster roots are cached once in
assign_cell_info (via the existing multiplier_* pools) so the check is cheap.

Verified on a design that reproducibly triggered the collision: seeds that
previously aborted in 'Routing multipliers' now place and route, and a seed that
already routed still routes (the rule does not over-constrain). Pairs with the
route_mult.cc change that turns the residual assert into an actionable error.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-10 16:26:15 +02:00
..
himbaechel_dbgen himbaechel: Extend API to enable cell delay override (#1535) 2025-08-20 06:32:18 +02:00
uarch gatemate: prevent multiplier clusters from overlapping route_mult halos 2026-07-10 16:26:15 +02:00
.gitignore himbächel: Initial implementation 2023-05-13 08:26:41 +02:00
CMakeLists.txt Gatemate FPGA initial support (#1473) 2025-04-22 16:41:01 +02:00
arch.cc himbaechel: Enable use of electrostatic placer (#1657) 2026-03-03 12:19:41 +01:00
arch.h himbaechel: bounds check getBelByLocation 2026-05-04 13:38:04 +02:00
arch_pybindings.cc himbaechel: Add Python binding for get_tile_wire_range 2025-06-25 18:37:17 +02:00
arch_pybindings.h himbächel: Initial implementation 2023-05-13 08:26:41 +02:00
archdefs.h Add GroupId related calls to Himbaechel API (#1399) 2024-12-05 13:59:33 +01:00
chipdb.h himbaechel: Extend API to enable cell delay override (#1535) 2025-08-20 06:32:18 +02:00
himbaechel_api.cc himbaechel: Enable use of electrostatic placer (#1657) 2026-03-03 12:19:41 +01:00
himbaechel_api.h himbaechel: Enable use of electrostatic placer (#1657) 2026-03-03 12:19:41 +01:00
himbaechel_constids.h himbächel: Initial implementation 2023-05-13 08:26:41 +02:00
himbaechel_gfxids.h Add GroupId related calls to Himbaechel API (#1399) 2024-12-05 13:59:33 +01:00
himbaechel_helpers.cc himbaechel: Add support for new constants API 2023-11-07 09:00:03 +01:00
himbaechel_helpers.h clangformat 2024-09-30 14:51:33 +02:00
main.cc himbaechel: add uarch specific options parsing (#1582) 2025-10-21 14:41:53 +02:00