D91 — Bus routing inside the existing search¶
Decision¶
Buses are routed inside the existing search, not by a second router (doc 05 §38, opt-in: --bus NAME=PATTERN, --buses, --bus-skew-mm, --bus-first). A group's connections between two components are routed one after the other in pin order; each is searched inside a guide around the neighbour lane routed before it (same layers along its tracks, any layer at its vias) and kept only with the neighbour's layers, as many vias and a bounded detour; otherwise it is routed freely and reported as having left the bus. Nets outside the groups do not rip a group (as --first-nets). A bundle stays where the router's order put its first connection. Skew matching uses the length-tuning meanders, with a limit only from a custom skew rule or the option; tracemaker buses measures any routed board
Alternatives¶
A coupled multi-track search like the pair router's (state space grows with the lane count; pins are not at lane pitch); the global router's corridors or the per-net layer masks as the carrier (corridors are per tile of eight pitches and belong to the global plan; a mask holds for the whole net, not per stretch: the guide is the corridor test on lattice cells); buses first by default (four dense mid boards routed 11 / 1009, 40 / 1616, 11 / 634, 1 / 410 at 20 M work: kept as --bus-first); ripping a group as a whole, or no protection (936 and 947 against 952 connections on six boards at 100 M); a default skew limit
Reason¶
Seven generated boards at 20 M work: every group within its limit (0.16–0.35 mm against 0.25–2 mm; 0.56–9.3 mm without), completion equal, no KiCad error added, equal vias per member wherever no member left. Six real boards: 957 → 952 connections at 100 M, 89 → 99 bus nets on their group's vias and layers; 886 → 853 at 20 M. quick byte-identical with the options off