nextpnr/common
Joris van Zwieten 35cbbaec1f router2: fix no-op ripup of constant-net arcs
ripup_arc walks from the sink wire back to the net source, unbinding
pips as it goes. For nets with constant_value set, the walk condition
required every wire on the path to itself carry that constant value
(getWireConstantValue(cursor) == net->constant_value). This is false
for all general-purpose routing wires, so the walk terminated at the
sink immediately and ripup never unbound anything.

Consequences on congested designs with const routing (observed on
himbaechel/xilinx, where GND/VCC use const-net mode):
- re-routing the arc rebound the same path on top of itself, leaking
  one wire refcount per ripup/re-route cycle
- congestion on contested constant tap wires could never resolve; the
  router livelocked with a handful of wires stuck overused for
  thousands of iterations

Constant-net arc trees root at a tap wire bound with a null pip (the
const_mode midpoint bind in route_arc), so terminate the walk there
instead: walk to the net source as usual, and stop at the first
null-pip binding.

Hardware-verified on xc7a100t: a MEGA65 core port (~34k LCs) that
previously livelocked (>3000 iterations, 6 wires pinned overused) now
routes to 0 overused wires in ~30 iterations.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-30 15:27:30 +02:00
..
kernel python: Fix binding for getNetinfoRouteDelay 2026-07-12 11:39:41 +02:00
place qt: remove qt5 as it's no longer relevant and clean up some warnings 2026-07-28 19:09:50 +02:00
route router2: fix no-op ripup of constant-net arcs 2026-07-30 15:27:30 +02:00
CMakeLists.txt CMake: refactor architecture-specific build system parts. 2025-01-21 17:13:03 +00:00
version.h.in Change version to git describe and make set-able from outside 2020-01-11 11:38:45 +01:00