nextpnr/himbaechel
Joris van Zwieten c39f26e93a himbaechel/xilinx: don't pair FFs with SRL/LUTRAM on a different clock
pack_lutffs constrains an FF into the same slice position as the LUT
driving its D input. When that driver is an SRL or LUTRAM cell it has
a CLK of its own: the slice write clock. A slice has a single CLK
input per half, so the placement validity check
(xc7_logic_tile_valid) rejects any slice where the FF clock and the
memory write clock differ in net or polarity.

Pairing such an FF anyway creates a relatively-constrained cluster
that is invalid at every bel on the device; the placer's strict
legalisation phase then spins forever trying to place it (observed as
a static-placer hang on a design clocking an SRL and its capture FF
from different clocks).

Only pair the FF when the driving cell either has no CLK or shares
the FF's clock net and IS_CLK_INVERTED polarity.

Hardware-verified on xc7a100t as part of a MEGA65 core port that
previously hung in placement.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-30 15:44:01 +02:00
..
himbaechel_dbgen himbaechel: Extend API to enable cell delay override (#1535) 2025-08-20 06:32:18 +02:00
uarch himbaechel/xilinx: don't pair FFs with SRL/LUTRAM on a different clock 2026-07-30 15:44:01 +02:00
.gitignore himbächel: Initial implementation 2023-05-13 08:26:41 +02:00
CMakeLists.txt himbaechel: Merge all test entrypoints into one 2026-07-27 11:01:32 +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
test_main.cc himbaechel: Merge all test entrypoints into one 2026-07-27 11:01:32 +02:00