D50 — Differential pairs searched as one object¶
Decision¶
Differential pairs (doc 05 §15) are searched as one object: A* over (layer, lattice point, direction, side) with straight steps, 45° turns followed by a miter-safe straight run, and coupled via pairs, every move checked exactly on both tracks; breakout/fan-in legs validated lazily when a start or goal is popped; gap from the custom diff_pair_gap rule, else the net class's diff-pair gap, else the clearance between the halves. A ripped half takes its partner and the pair is re-tried coupled; the clean-up re-couples split pairs with exact restore; a pair that boxes in a pin between its pins is taken back. Off by default (--diff-pairs, pair_nets)
Alternatives¶
v1's centreline with an envelope disk and legs checked afterwards; routing the halves separately with a coupling cost; coupled copper dearer to cross in negotiation; budget held back for re-coupling; refusing pairs that straddle a pin
Reason¶
v1 coupled none of the USB hub's 5 pairs; v2 couples them at 84–94 % with 0 KiCad errors. On 18 boards (59 pairs) 35 pairs are ≥ 50 % coupled at the rule gap, completion 2,201 → 2,210, two boards −1 within fixed-budget noise. Separate routing cannot guarantee the gap; the dearer crossing cost PmodHDMIIn two connections; refusing straddling pairs lost edid-injector's 88 % coupling for nothing. Off by default because coupling costs space on dense boards and the pair detection is by name only