Closed bug report

analyze current: on a 4-layer board the whole-net IPC-2221 screen leaves only a pour (any pour) as a pass; branch model is 2-layer only

Drew Owens · ·closed by John Lauer

adom-aiflow 0.2.20 · adom-fields 0.10.2 · KiCad 10.0.7 · a 4-layer board (F.Cu, In1 GND plane, In2 3V3A plane, B.Cu)

What happened: analyze current failed six power nets on the whole-net IPC-2221 screen:

VBUS fail: VBUS carries 1.5 A on a 0.30 mm bottleneck (25 C rise, limit 10 C) and has no pour: pour it on the outer layers or widen to 1 mm
VBUS_C ... 0.30 mm, VTILE ... 0.30 mm, VTILE_EDGE ... 0.30 mm, VSYS 1.2 A ... 0.25 mm, VBAT 1.0 A ... 0.25 mm

analyze_current takes the narrowest track over 0.2 mm anywhere on the net and judges it at the full load. On this board those pieces are:

  • the necks into small pins (a charger QFN, an SC-70 ideal diode);
  • the side strips and rungs of tracks widened by laying same-net copper alongside;
  • short branches.

The same-input Fields solve on that board measured 30 to 72 A/mm² along those pieces, and its own review.checks.ampacity gave solved rises of 3.5 to 19.5 °C at each net's narrowest neck, U3's heat included. So no piece carries the full load at 25 °C.

What I could not use:

  • --ack covers only the Fields peaks.
  • currentModel: resistive-branches refuses at once: branch model requires exactly F.Cu and B.Cu.

That leaves a pour as the only way through on a multilayer board. Any pour on the net passes (pour on X carries the load), even a small patch that carries none of the neck. A careful user can't express "this net is fine" honestly, and a careless one can pass with a token patch.

What I did: pours that follow each power net's tracks (union + 0.4 mm, 0.5 mm minimum width; 120 zones, KiCad DRC 0/0). It's a reasonable board change, but it came from the screen, not from the physics.

Ask (any of):

  1. Run the branch model on multilayer boards when the net's tracks and vias are on the outer layers (through vias, inner planes of other nets).
  2. When a same-input Fields solve exists, judge the IPC check per neck from review.checks.ampacity (solved rise at each neck) instead of the narrowest-piece-at-full-load approximation.
  3. Require a pour to cover the net's bottleneck, not merely exist, before "pour carries the load" passes.

1 Reply

John Lauer ·

Fixed in adom-aiflow 0.2.24, all three asks.

  1. Branch model on multilayer boards. currentModel: resistive-branches now runs on any F.Cu, In1..InN, B.Cu stack. A net with copper only on the outer layers is modelled exactly as on two layers; other nets' planes don't matter. Inner-layer tracks are supported when the board saves its physical stackup. It still refuses, and names why, for: inner copper with no stackup, a pour or plane on the net itself, and blind, buried or micro vias on the net. Also fixed: the Fields cross-check compared layer names against adom-fields 0.10's six fixed slots, so it refused even on 2-layer boards; it now compares board.copperLayers with the board's stack.
  2. The Fields solve can judge the width screen. Once the same-input field screen has passed, a net whose only failure was the width approximation or pour coverage passes if review.checks.ampacity's solved rise is within its maxRiseC. It's recorded as judgedBy: fields-solve, with the original screen kept beside it. Missing copper and too few stitching vias are never passed this way.
  3. The token-pour loophole is closed. A pour now counts only when every track that fails at full load lies inside a same-net fill on its own layer, or when one pour reaches every current-carrying terminal of the net. Terminals declared at 0 A, and parts that by the spec's own load list carry no load (feedback dividers, bootstrap caps, test points), don't count.

Caveat: the solved rise includes heat from nearby parts, so it's conservative. Your 3.5 to 19.5 °C necks against a 10 °C limit still fail on the solve; a per-net maxRiseC you can justify, or copper, is the honest way through. Closing the loophole also flagged two nets on one of our own boards that had been passing only on a token pour.

Upgrade: tell your AI "give me the latest adom-aiflow" (or adom-wiki pkg install adom/adom-aiflow); adom-aiflow --version says 0.2.24.

John Lauer closed this ·

Log in to reply.