You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Bug: a declared plane cannot be stitched on a fine-pitch BGA, and the suggested remedy does not exist #165
Export a four-layer board whose two rails are planes, with a 121-ball 0.8 mm BGA on them.
What are the expected results?
The board declares requires via_in_pad and a tier that fills, so the stitching via goes in the pad.
What are the received results?
Export fails. plane_via_offset only ever places beside the pad, and nothing can grant via-in-pad here.
synth: kicad export failed: power-plane fanout failed: net `net_8`: no legal
stitching-via position beside the pad at (51.85, 39.96) mm on Top: every
candidate is outside the board or within clearance of another pad or via.
Move the part, widen the board, or allow via-in-pad explicitly.
The board declares requires via_in_pad and manufacturer "jlc-filled-via",
and synth validate exits 0 on it, so ERC agrees the process is available.
The export still refuses.
This is not a placement accident. The failing pad is on a plane net, and the
only component within reach of it is the BGA. Its 21 rail-ball connections sit
in an 11 x 11 grid at 0.8 mm pitch, so an interior rail ball has neighbours on
all four sides 0.8 mm away. A beside-pad via needs 0.582 mm of clearance from
pad copper at this floor — 0.3 mm drill plus 2 x 0.13 mm ring is 0.56 mm across
— and 0.400 mm is all there is. Beside-pad stitching is arithmetically
impossible for those balls, which is the same arithmetic that makes via-in-pad
mandatory for the escape.
Steps To Reproduce
Declare two netclasses with plane, join a rail net to each, and put a
121-ball 0.8 mm BGA's supply balls on them.
Declare requires via_in_pad and manufacturer "jlc-filled-via".
The error names a remedy that does not exist: --krt-allow-via-in-pad reaches the router, never build_pcb.
crates/synth-kicad/src/pcb.rs:581, fn plane_via_offset(pad, origin, outline, obstacles), takes no via-in-pad parameter and has no in-pad branch. The
comment above the plane emission says the via is placed beside the pad "so the
board does not silently depend on via-in-pad" — reasonable when nothing could
declare it, but #155 now lets a board declare exactly that, and the exporter
does not read it.
So the suggestion is unreachable by any route: not by flag, since krt_allow_via_in_pad is a router option; not by profile, since build_pcb
takes no FabricationPolicy; and not by declaration, since the board's required_processes never reaches the exporter.
Fixing it looks like threading the granted permission into build_pcb and
letting plane_via_offset return the pad centre when via-in-pad is allowed and
no offset position is legal. Happy to pick this up.
Activity
fix(kicad): a stitching via only goes in a pad the pad can hold
JeffMboya commentedon Oct 30, 2026
#165 scope: this fix refuses the iCE40 BGA naming the 0.35 mm pad and 0.6 mm via; exporting it needs a microvia profile, tracked in #392.