D152 — Delay tuning rips the routed connections a meander needs and routes them again¶
Context¶
With D139 (custom rules keep the per-class cache), RoyalBlue54L-Feather-delay routes 125 of 147 connections instead of 119, but
KiCad reports one more error: skew_out_of_range on the USB pair /Debugger/D+ and D-, 2.69 ps against the 0.5 ps rule
usb_pair_skew (within_diff_pairs). D+ leaves the connector about 8.6 ps short of D-. The tuner (doc 05 §59) adds meanders only
where nothing else is: here its 1.5 to 0.4 mm meanders were blocked by the extra routed connections. The free room took only
0.25 mm meanders, and D+ stopped at 76.8 of 79.5 ps. One of the router's eight variants tuned the pair, but it was not the best one.
Doc 05 §61, records in bench/records/d152-room.
Decision¶
Router::tune_with_room, used by tune_delays for each net with a ps length window and for each net brought to its group's or
pair's delay:
- The plain tuner runs first. If the net is in range, nothing else happens.
- Otherwise the board goes back to the untuned net and the tuner runs again. At each meander height, after both free sides, it tries
each side that only routed copper of other nets blocks (
Obstacles::segment_state, rippable owners). It rips those connections and places the meander. A connection may be ripped only if it is routed, not implicit, not coupled, not a bus or bundle lane, of another net and not the pair partner, and its net has nolength, ps or mmskewrule. At most 16 connections are ripped. - The ripped connections, and any connections of their nets that lose their implicit route, are routed again strictly, in
connection order, each with the transaction cap (
txn_cap, else 200,000 expansions). This happens after the search budget is spent, so they get 400,000 work units of their own (with--time, 2 % of the time limit). - The result is kept only if the net is in range and every one of them routes again. Otherwise the board goes back to the plain attempt's result, as before.
Alternatives¶
- Rip by proximity. Rip every connection within a meander's height of the net's tracks, then tune. Tried first. It never helped on RoyalBlue: the plain tuner had already filled the free room with small meanders. In the room it left, fixed copper blocked the last 0.22 mm one.
- Tune before the late routes go in. Tuning runs once, on the best state at the end. Tuning each variant at its own end, or before clean-up, would change every board with a length rule. It would also not stop later routes from taking the room.
- Keep D139 without the fix. One KiCad error more on a board with a 0.5 ps rule.
Consequences¶
- RoyalBlue54L-Feather-delay: 125/147, no added KiCad errors (main: 119/147, none). One connection is ripped and routed again; D+ is
tuned to 79.43 ps against D-'s 79.49 ps. The other three B2 boards never reach the room step. New test
delay_room: it skips without the prepared demos. - The tuner can now change routed connections of other nets. Each change is an ordinary strict route, checked exactly, and kept only if all of them route again.
- Only delay tuning makes room.
tune_lengths(mm windows),tune_skew(mm pair skew) and the bus tuner do not (open).