Skip to content

Bug: a signal via on a two-layer board has no ground return via beside it - #299

Open
JeffMboya wants to merge 6 commits into
absmach:mainfrom
JeffMboya:SYN-return-vias
Open

JeffMboya wants to merge 6 commits into
absmach:mainfrom
JeffMboya:SYN-return-vias

Conversation

@JeffMboya

Copy link
Copy Markdown
Contributor

What type of PR is this?

This is a bug fix

What does this do?

island_vias::stitch_vias adds a ground via within 1.4 mm of each signal via lacking one, inside both pours.

Which issue(s) does this PR fix/relate to?

Have you included tests for your changes?

Yes, five stitch_vias tests; on the irrigation board findings fell from 70 to 1.

Did you document any new/modified features?

No, the pass is internal to routing delivery.

Notes

Stacked on #289; its commits show here until that merges.

…ng it

refill_zones filled and installed in one step. Split out filled_text so a pass can read the poured polygons first.
Tracks cut a pour into regions, and a region holding copper of its own but no via to the other layer is tied to nothing. KiCad reports it as a zone against itself at the zone origin, so the router's repair had no place to put a bridge. Read the poured polygons, join them through vias, plated pads and tracks, and add a via where an island and the main pour on another layer both have room. Runs on the candidate before it is validated.
The smallest copied a router's one escalated via, which is under the board's minimum via diameter. Use the size the net has most of, the larger on a tie.
A decoupling capacitor's ground pad sat in a 2.67 mm2 F.Cu island on the
irrigation controller. Its widest circle has a radius of 0.387 mm, and the
pass asked for 0.4 mm: the 0.3 mm via pad and 0.1 mm of slack. It tied
nothing, and KiCad reported the zone against itself.

The slack is now 0.05 mm, since the pour edge already stands off foreign
copper by the clearance rule. The search grid no longer starts at 0.2 mm,
which could step over a window that narrow, and comparisons allow for
rounding.
W-SYNTH-DRC-016 flags a signal via with no ground via within 1.53 mm, because
return current follows the reference plane and has to jump layers with the
signal. The irrigation controller had 70, and nothing added ground vias after
routing.

After the islands are tied, every non-ground via with no ground via within
1.4 mm along either axis gets one at the nearest point that lies inside the
ground pour on both layers with room for the via. The pour edge already stands
off other copper by the clearance rule. A new via counts for the signal vias
after it, so neighbours share one, and it keeps 0.2 mm of pad from other vias.

On that board the pass adds 65 vias and leaves 1 layer change without a return;
KiCad DRC is unchanged, with no errors and nothing unconnected.
cargo doc -D warnings rejects an intra-doc link from stitch_vias to the private
RETURN_REACH_MM.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Bug: a signal via on a two-layer board has no ground return via beside it

1 participant