Chipfoot BGA FootprintsUse it in VS CodeThis extension registers the Chipfoot BGA Footprints MCP server with VS Code. Open Copilot Chat in Agent mode and the server's tools appear in the tools list; The first start creates a private Python environment (Python 3.10 or newer must be installed; set Environment variables for the server go in the A footprint for almost any BGA chip, every Nvidia GPU included, from one of these sources:
Each run writes Universal method: scan the chipLay the chip balls down on a flatbed scanner, close the lid and scan at
1200 dpi or more. Grey or colour, no ruler needed. Then call
The image pipeline has no package-specific constants:
Validation
Fixes found by these tests:
Real Nvidia ball patterns (
|
| Chip(s) | Generation | Balls found | Counted rings with a ball | Mean offset |
|---|---|---|---|---|
| TU102 (RTX 2080 Ti) | Turing | 2824 | 2824 / 2824 | 0.016 mm |
| TU104 / TU106 / TU116 | Turing | 2228 | 2105 / 2105 | 0.019 mm |
| GA102 / AD102 (RTX 3090, 4090) | Ampere / Ada | 3318 | 3250 / 3250 | 0.022 mm |
| GA104 / GA106 / AD104 / AD106 | Ampere / Ada | 2714 | 2714 / 2714 | 0.016 mm |
- Balls on uncounted rings are real balls. Rings that touch the frame, a printed helper line or the watermark merge with it and cannot be counted as components. chipfoot still finds these balls: on TU106, 86 lie on the two helper lines and 37 touch the right frame.
- AD102 agrees with the manual footprint at 99.55 % (all differences are under the watermark).
Blackwell (RTX 50, current generation). The images are seller listings (AliExpress). The truth is the package ball count the listing gives (BGAxxxx) plus, where the balls are separate disks, an independent disk count.
| Chip | Package | Image | chipfoot | Check |
|---|---|---|---|---|
| GB203 (RTX 5080 / 5070 Ti) | BGA3064 | artwork 1 | 3064 | 3064 / 3064 disks hit |
| GB203 (RTX 5080 / 5070 Ti) | BGA3064 | artwork 2 | 3064 | 3064 / 3064 disks hit; image 1 vs image 2: 100 % matched, mean 0.017 mm |
| GB205 (RTX 5070) | BGA3064 (shared with GB203) | artwork, other listing | 3064 | 3064 / 3064 disks hit; same footprint as GB203: 100 % matched, mean 0.015 mm |
| GB206 (RTX 5060 / 5060 Ti) | BGA2112 | cropped artwork | 2088 | the crop shows 2088 disks: all 2088 hit (24 lie outside the crop) |
| GB202 (RTX 5090) | BGA5830 | render | 5797 (99.4 %) | balls merge in the image, so only the count can be checked |
- GB207 (RTX 5050) is not covered. No stencil or image is offered for it yet.
- Photos of the plate need care. The GB202 photo of the steel plate (
photo=True) gives 4775 of 5830; glare wipes out part of the field. - Too-small photos are refused. The 600 px gpufix.de photos are rejected ("resolution too low").
- The skew fix stays small. It turns by at most 22.5 degrees (square grids) or 15 degrees (staggered). A Blackwell core rotated 45 degrees, or a staggered field with vertical rows, keeps the package axes.
New and unknown chips (test_fuzz.py)
chipfoot has no package catalogue: every chip is just a point in the space of
ball patterns, and a newly released chip is a point it has not seen before.
test_fuzz.py draws random packages over the whole range Nvidia uses and
recovers each from a 1200 dpi scan (2400 dpi below 0.5 mm pitch), dpi only.
The random packages vary:
- Pitch: 0.4 to 1.27 mm, square or rectangular.
- Field: up to 95 mm (datacenter class), up to 20,000 balls.
- Layout: edge zones with their own pitch, a moat and diagonal seams (AD102 style); a depopulated centre; random holes; staggered rows.
- Appearance: bright solder balls or dark pads.
- Scan defects: up to 3 degrees tilt, blur and noise.
A case passes only if every ball is found, there is nothing extra, the mean error is under 0.01 mm and the maximum error is under 0.05 mm.
| Set | Packages | Balls | Passed | Worst mean | Worst max |
|---|---|---|---|---|---|
| seed 2026 (fresh, never tuned on) | 45 | 140,142 | 45 / 45 | 0.0021 mm | 0.022 mm |
| seed 11 | 35 | 126,680 | 35 / 35 | 0.0026 mm | 0.021 mm |
| seed 7 | 17 | 41,116 | 17 / 17 | 0.0019 mm | 0.025 mm |
Fixes found by the fuzz runs:
- Pitch: candidates come from 2D spectrum peaks, including hex and diagonal plane spacings, each checked by the blob area it explains. This is rotation invariant.
- Tolerances: chain, merge, snap and bridge tolerances come from the measured position noise (5 sigma) instead of fixed fractions of the pitch. Seams between zones therefore stay apart on scans, while the noisy stencil still merges.
- Line pieces: pieces that overlap along a line are different lines.
- Lone balls: a lone ball inside the field is kept where it was measured.
- Speed: sub-pixel upsampling follows the ball size; a 95 mm package takes 17 s.
Limits
photo=Trueis experimental: it searches only where the image repeats in two directions. It is not used by default because it can cut off real balls on clean artwork.Resolution: at least 6 px per ball pitch, 8 or more recommended. Below that the tool refuses the image.
Ball names are row and column indices of the found lines, not the vendor's names. Use
footprint_from_boardviewfor real pin names and nets.Boardviews: only OpenBoardView ASCII .brd and CSV. Encrypted formats (.fz, .tvw, many .bvr) must be exported first.
Phone photos: need the whole package edge visible on a contrasting background.
Balls under labels or dirt are only filled when some detection supports them.