Finished the board including the connector and mousebites
This commit is contained in:
+207
-37
@@ -6,6 +6,125 @@ manufacturing limits. Status 2026-07-18: **all three critical findings fixed
|
||||
in schematic AND PCB** (ERC 0, DRC 0 errors / 0 unconnected / 0 parity);
|
||||
remaining work is the Functional/Broader/ordering lists below.
|
||||
|
||||
**Status 2026-07-22 (last-check pass):** ERC still clean (2 known-benign
|
||||
`lib_symbol_issues` on the generic Q_NPN_BEC/Q_PNP_BEC library symbols, not
|
||||
real problems). DRC: 0 unconnected items board-wide (incl. J3 — all 24 pads
|
||||
now carry real net copper, confirmed by direct pad/net inspection, not just
|
||||
the ratsnest count); 242 total violations, of which only **4 are errors**
|
||||
(2× `clearance` + 2× `hole_clearance`, two GND vias at (190.78/190.34, 58.58)
|
||||
0 mm from the `/Power/3V3` zone on In2.Cu — see Functional/robustness below),
|
||||
1 `track_dangling` (a 0.06 mm stub on `/exi/EXI_MOSI_RAW` near (188.39,
|
||||
57.52), likely harmless routing debris), and the rest are silkscreen
|
||||
warnings (171 overlap, 60 over-copper, 6 edge-clearance). This session also
|
||||
did extensive photo-based mechanical verification and a real J3 Y-position
|
||||
correction — see "Verify mechanical fit" below — and re-added fiducials with
|
||||
a different footprint/position than this file previously documented.
|
||||
|
||||
**Status 2026-07-24 (major session):** ERC 0 (same 2 known-benign warnings +
|
||||
1 expected `power_pin_not_driven` on J5's `EXI_GND`, see below — not a real
|
||||
problem, that net has no power-symbol driver by design). DRC: 0 unconnected
|
||||
items, 280 total violations — same silkscreen-warning baseline as before
|
||||
plus `npth_inside_courtyard` (27, J5's mouse-bite holes sit close to J2's
|
||||
courtyard, judged benign — holes, not a component body) and 1 harmless
|
||||
`track_dangling`. The 2 GND-vias-vs-3V3-zone short from 2026-07-22 is
|
||||
**gone** (resolved somewhere in this session's PCB work, confirmed via fresh
|
||||
DRC). Gerbers/BOM/CPL all regenerated and verified current as of this pass.
|
||||
Major work this session:
|
||||
- **D6/D8/D9/D12 green LEDs swapped** Everlight 19-217/GHC-YR1S2/3T (C72043,
|
||||
out of stock) → Hubei KENTO KT-0603G (C12624) — same 0603 footprint, same
|
||||
manufacturer family as the already-used red KT-0603R (D7/D11). Series
|
||||
resistors R37/R41/R42 changed 330 Ω → **49.9 Ω** (reused C25120, the same
|
||||
part already on R26–R29 — no new BOM line) to compensate for KT-0603G's
|
||||
higher Vf (3.1 V typ.) and restore comparable brightness (~4 mA vs the
|
||||
~0.6 mA the old resistor value would have given it). D12/D13 (RGB channels,
|
||||
driven directly by the FPGA's `SB_RGBA_DRV` hard macro, no series resistor)
|
||||
need no resistor change — flagged as slightly reduced current-source
|
||||
headroom at the higher Vf, not fixed (nothing to fix, no resistor exists).
|
||||
- [ ] **D13 (yellow, Everlight C72038) and the 10 kΩ 0402 resistor
|
||||
(UNI-ROYAL C25744, used by 12 designators) are ALSO reported out of
|
||||
stock** — real in-stock alternatives were being researched
|
||||
(candidates: Hubei KENTO KT-0603Y/KT-0805Y for D13; YAGEO
|
||||
RC0402FR-0710KL C60490 or Vishay CRCW040210K0FKED C71617 for the
|
||||
10k) but never confirmed/committed — stock claims from web search
|
||||
proved unreliable earlier this session (contradicted by direct
|
||||
JLCPCB part-page checks twice), so these need a live stock check
|
||||
before ordering, same as the green LED did.
|
||||
- **J5 added**: a second SP1 gold-finger connector, footprint copied from
|
||||
the eth2sp1 open-source project (github.com/jochemvdmeulen/eth2sp1),
|
||||
library file `hardware/SP1_eth2sp1_reference.kicad_mod`. Real purpose:
|
||||
hand-solder insert for J3 — J5 is fabricated on this same board/panel via
|
||||
a mouse-bite tab, snapped off after production, and soldered onto J3 so
|
||||
its gold fingers protrude past the board edge into the GC slot (J3 itself
|
||||
uses thru-hole insert pads, not bare gold fingers). Pad length tuned to
|
||||
13.5 mm + board thickness (1.1412 mm) = 14.6412 mm, then trimmed −1.0 mm to
|
||||
**13.6412 mm** (near/board-edge-side pad edge held fixed 0.6 mm off the
|
||||
nose throughout, matching eth2sp1's original tip clearance). J5 pins
|
||||
1,3–10 stay no-connect (DNP, no live signals); pins 2/11/12 (shield/ground)
|
||||
tie to a new **`EXI_GND`** net — a dedicated reference-plane net for the
|
||||
fingers, deliberately kept separate from board `GND` until physically
|
||||
joined to J3 by solder (J5 is a separate PCB fragment until then).
|
||||
- [x] Mouse-bite tab: 27× 0.4 mm NPTH holes at X=106.8900, spanning the
|
||||
full Y=48.1–66.6 tongue height (both endpoints landing on the
|
||||
original tongue corners as half-moon scallops) — footprint
|
||||
`MouseBites_J5`. **Has disappeared from the PCB and needed
|
||||
re-adding twice this session** (cause unknown — likely an
|
||||
accidental GUI selection/delete, watch for a third time).
|
||||
- [ ] **User is routing the `EXI_GND` reference plane + stitching vias
|
||||
under J5's fingers** — in progress, not finished. Guidance given:
|
||||
multiple vias per ground pad (not just one via per pin), plus
|
||||
stitching vias flanking the *signal* fingers (CLK/MOSI/MISO/CS)
|
||||
too, not just the 3 named ground pins — that's what actually
|
||||
controls impedance at the trace-to-finger transition.
|
||||
- [ ] J2's `HANRUN_HR911105A.kicad_mod` footprint has a cosmetic-only
|
||||
defect: pads 15/16 (2.445 mm ground/shield tabs) stick out ~0.97 mm
|
||||
past the F.Fab body-outline rectangle (top and bottom, symmetric).
|
||||
**Confirmed NOT a DRC/manufacturability issue** — the real courtyard
|
||||
(F.CrtYd) properly encloses both pads with ~0.28 mm margin; this is
|
||||
why JLCPCB's placement-preview render looked alarming (it draws the
|
||||
undersized F.Fab rectangle as the "body"). Offered to fix the F.Fab
|
||||
rectangle for cosmetic accuracy; not done.
|
||||
- **Gateware pin constraints — DONE** (was the "Write the re-bba-rb pin
|
||||
constraints" item below, now resolved): `exi_bba/synth.py`'s
|
||||
`IceBreakerPlatform` no longer targets the iCEbreaker — every pin pulled
|
||||
directly from the schematic netlist and verified placed by nextpnr.
|
||||
Also fixed two real bugs found in the process: **LED polarity was
|
||||
backwards** (D6/D7 are active-high on this board, opposite the
|
||||
iCEbreaker's onboard active-low LEDs the old code assumed) and **removed
|
||||
a reference to a physical button that doesn't exist on this board** (the
|
||||
iCEbreaker's `BTN_N` was dev-board-only; `panel_btn` now ties idle).
|
||||
- [x] **Real hardware conflict found and fixed**: the schematic originally
|
||||
put `ETH_INT` on U9 pin 35, which **physically conflicts with the
|
||||
iCE40UP5K's PLL hard macro** — pin 35 cannot be used as an *input*
|
||||
while the PLL is instantiated (confirmed both by nextpnr's own chip
|
||||
database and by direct testing: an unrelated input signal swapped
|
||||
onto pin 35 reproduces the identical conflict; an *output* signal
|
||||
on pin 35 works fine — the restriction is input-direction-specific,
|
||||
not a blanket "pin 35 is unusable"). Board was still in design, so
|
||||
fixed at the source: **`ETH_INT` moved from U9 pin 35 to pin 13**
|
||||
(schematic + PCB both reworked and verified — pin 13 was confirmed
|
||||
via icestorm's own pin database to be the *only* spare GPIO on this
|
||||
exact SG48 package/board combo; all other 38 usable pins were
|
||||
already assigned). PCB reroute done and DRC-clean (0 unconnected,
|
||||
0 shorts). An alternative (wr_n 36→35, rd_n 37→36, int_n→37, keeping
|
||||
ETH_INT physically clustered with the rest of the ethernet bus) was
|
||||
evaluated and rejected — it works but only found 1 passing seed out
|
||||
of 5 tried, with much thinner timing margin (0.4% vs 3%) than the
|
||||
pin-13 arrangement.
|
||||
- [x] **Timing verified — closes, seed-sensitive**: seed 1 narrowly missed
|
||||
(`capture_clk` 53.08 MHz vs 54.02 MHz target), seed 3 passes both
|
||||
domains cleanly (`clk` 37.82 MHz vs 24 MHz, `capture_clk` 55.69 MHz
|
||||
vs 54.02 MHz) — consistent with this design's known seed-sensitivity
|
||||
(routing-dominated at ~22% LC utilization). `build/top.bin` on disk
|
||||
is the seed-3 result. Re-verified after the PCB reroute — identical
|
||||
numbers, as expected (PCB copper doesn't affect FPGA-internal
|
||||
timing).
|
||||
- [ ] **Known bug, not fixed**: `synth.py`'s built-in `--seeds N` sweep
|
||||
loop throws silent exceptions on seeds after the first when run in
|
||||
one process (pre-existing, unrelated to this session's pin changes)
|
||||
— worked around by invoking each seed as a separate process. The
|
||||
convenience one-command multi-seed workflow needs debugging if
|
||||
wanted again.
|
||||
|
||||
## Critical — ALL RESOLVED (schematic + PCB, verified 2026-07-18)
|
||||
|
||||
- [x] **EXI DO/DI swapped at J3 — FIXED 2026-07-17** (all copper unchanged).
|
||||
@@ -72,19 +191,21 @@ remaining work is the Functional/Broader/ordering lists below.
|
||||
|
||||
## Functional / robustness
|
||||
|
||||
- [ ] **iceprog pin mismatch — schematic FIXED 2026-07-18**: FLASH_CS moved
|
||||
ADBUS3→ADBUS4 (U8 pin 21), CDONE ACBUS1→ADBUS6 (pin 23), CRESET
|
||||
ACBUS0→ADBUS7 (pin 24) — now exactly stock iceprog / iCEbreaker
|
||||
- [x] **iceprog pin mismatch — schematic FIXED 2026-07-18, PCB rerouted**:
|
||||
FLASH_CS moved ADBUS3→ADBUS4 (U8 pin 21), CDONE ACBUS1→ADBUS6 (pin 23),
|
||||
CRESET ACBUS0→ADBUS7 (pin 24) — now exactly stock iceprog / iCEbreaker
|
||||
channel-A convention; old pins are NC. Pull-ups R11/R12 unchanged.
|
||||
- [ ] PCB: reroute the three lines to the new U8 pins (F8 shows the
|
||||
pad-net changes).
|
||||
Verified 2026-07-22: 0 DRC violations in the U8 pin area, 0 unconnected
|
||||
items board-wide.
|
||||
- [x] **TPS2116 PR1 divider margin — FIXED 2026-07-18**: R3 200k→150k
|
||||
(0402WGF1503TCE, LCSC C25755). PR1 = 1.32 V nominal; switchover at
|
||||
GC_3V3 = 2.30–2.70 V worst-case — safely below the 3.3 V rail. (Value
|
||||
change only, same footprint — no PCB work.)
|
||||
- [ ] **ETH_RST pull-up — schematic FIXED 2026-07-18**: R36 10 k (C25744)
|
||||
from ETH_RST to **ETH_3V3** (low when ETH rail off).
|
||||
- [ ] PCB: place/route R36 near U11 pin 48.
|
||||
- [x] **ETH_RST pull-up — schematic FIXED 2026-07-18, PCB placed/routed**:
|
||||
R36 10 k (C25744) from ETH_RST to **ETH_3V3** (low when ETH rail off),
|
||||
at (148.49, 61.7225) near U11 pin 48. Verified 2026-07-22: nets
|
||||
`/ethernet/ETH_RST` + `/ethernet/ETH_3V3` both present on the footprint,
|
||||
0 unconnected items.
|
||||
- [ ] **Gateware: gate all outputs on GC_ON** — when GC_ON=0 the W5100S is
|
||||
unpowered (U12) and the GC is off, but FPGA banks stay at 3.3 V. Hold
|
||||
the W5100S bus and EXI outputs Hi-Z/low to avoid back-powering.
|
||||
@@ -93,41 +214,88 @@ remaining work is the Functional/Broader/ordering lists below.
|
||||
board PCF.
|
||||
- [ ] **Gateware: EXI INT drive style** — prefer open-drain emulation (drive
|
||||
low / release) on J3.3 rather than push-pull high.
|
||||
- [ ] **New 2026-07-22: 2 GND vias short the `/Power/3V3` zone on In2.Cu** —
|
||||
found during the last DRC pass, 4 error-severity violations (2×
|
||||
`clearance` + 2× `hole_clearance`, both 0 mm actual). Two GND vias at
|
||||
(190.78, 58.58) and (190.34, 58.58) — just south of J3's courtyard,
|
||||
likely stitching vias added during the J3 reroute — sit directly on
|
||||
top of the 3V3 pour on In2.Cu. This is a real short risk, not a
|
||||
manufacturability nit: move or delete these two vias (or void the 3V3
|
||||
zone locally) before ordering. Also 1 harmless `track_dangling`: a
|
||||
0.06 mm stub on `/exi/EXI_MOSI_RAW` near (188.39, 57.52) — routing
|
||||
debris, delete when convenient.
|
||||
|
||||
## Broader items (beyond the wiring review — block fab on the first two)
|
||||
|
||||
- [ ] **Write the re-bba-rb pin constraints** — `exi_bba/synth.py` still targets
|
||||
the iCEbreaker. Full board pin map: EXI_MOSI = 4 (IOB_8a, in),
|
||||
EXI_MISO = 3 (IOB_9b, out), EXI_CLK = 44 (G6), EXI_CS = 45,
|
||||
EXI_INT = 46; W5100S bus on the IOT bank (23–43); CLK12 = 20 (G3);
|
||||
GC_ON = 21; ETH_RST = 2; UART: FPGA RX = 18 (net UART_TXD!, FTDI
|
||||
output), FPGA TX = 19; **debug: LED_G = 47 (heartbeat), LED_R = 48
|
||||
(EXI activity), DBG0–4 = 9/10/11/12/6 (J4 header)**. Pure software;
|
||||
do before ordering to prove the pinout.
|
||||
- [x] **Write the re-bba-rb pin constraints — DONE 2026-07-24**, see the
|
||||
"Status 2026-07-24" note at the top for full details. Real board pin
|
||||
map: EXI_MOSI = 4 (IOB_8a, in), EXI_MISO = 3 (IOB_9b, out),
|
||||
EXI_CLK = 44 (G6), EXI_CS = 45, EXI_INT = 46; W5100S bus A0=42 A1=38
|
||||
D0-D7=34/32/31/28/27/26/25/23 CS_N=43 RD_N=37 WR_N=36 RST_N=2;
|
||||
**ETH_INT moved from the schematic's original pin 35 to pin 13** (pin
|
||||
35 physically conflicts with the PLL for input use — hardware
|
||||
constraint, not fixable in software, resolved via schematic+PCB
|
||||
rework since the board was still in design); CLK12 = 20 (G3);
|
||||
UART: FPGA RX = 18 (net UART_TXD!, FTDI output), FPGA TX = 19;
|
||||
debug: LED_G = 47 (heartbeat, active-high), LED_R = 48 (EXI activity,
|
||||
active-high), DBG0–4 = 9/10/11/12/6 (J4 header). No physical button
|
||||
on this board — the old iCEbreaker BTN_N reference was removed.
|
||||
Placement + timing verified (nextpnr, seed 3: clk 37.82 MHz/24 target,
|
||||
capture_clk 55.69 MHz/54.02 target, both PASS).
|
||||
- [ ] **Debug provisions — schematic DONE 2026-07-18** (was: board had none):
|
||||
- D6 green heartbeat LED (Everlight 19-217/GHC-YR1S2/3T, C72043,
|
||||
Basic) on FPGA pin 47 (LED_G) via R37 330 Ω (C25104);
|
||||
- D6 green heartbeat LED (**Hubei KENTO KT-0603G, C12624** — swapped
|
||||
2026-07-24, Everlight original was out of stock) on FPGA pin 47
|
||||
(LED_G) via R37 **49.9 Ω** (C25120, swapped from 330 Ω same day to
|
||||
compensate for KT-0603G's higher Vf — see the 2026-07-24 status note);
|
||||
- D7 red EXI-activity LED (KENTO KT-0603R, C2286, Basic) on pin 48
|
||||
(LED_R) via R38;
|
||||
(LED_R) via R38 (unchanged, this one was never out of stock);
|
||||
- J4 6-pin debug header (unpopulated, in_bom no): GND + DBG0–4 =
|
||||
FPGA pins 9/10/11/12/6 — route EXI CLK/CS/MOSI/MISO copies here in
|
||||
gateware for logic-analyzer bring-up;
|
||||
- TP1 3V3, TP2 1V2, TP3 ETH_3V3 (ethernet sheet), TP4 GC_ON, TP5 GND
|
||||
(1.5 mm pads, in_bom no);
|
||||
- FID1–3 fiducials placed directly on the PCB (board-only) at
|
||||
(195, 68.5)/(131, 48)/(163, 44.5) — copper-clear, DRC 0.
|
||||
- [ ] PCB: place/route the 11 schematic footprints (D6/D7, R36/R37/
|
||||
R38, TP1–5, J4) — F8 pulls them in. LEDs need visibility with
|
||||
the GC shell on: place near the RJ45/USB edge if possible.
|
||||
- [ ] **Verify mechanical fit** (bench item — cannot be verified in repo):
|
||||
outline vs the SP1 slot, RJ45/USB-C protrusion vs the GC serial port
|
||||
bay opening. An earlier commit says "need to remeasure PCB outline".
|
||||
Note 2026-07-18: the J3 footprint (12 contacts, 1 mm effective pitch,
|
||||
two staggered depth rows, front-side only, fingers to the board edge
|
||||
per the .kicad_dru exception) is the geometry derived from the
|
||||
physical sp1_test_plug iterations — the test-plug project itself
|
||||
contains no reusable finger footprint to diff against, so the
|
||||
provenance is the physical test, not a file comparison.
|
||||
- FID1–3 fiducials: **superseded 2026-07-22**, see the fiducials entry
|
||||
under "JLCPCB ordering notes" below for current footprint/positions.
|
||||
- [x] **PCB: place/route the 11 schematic footprints — DONE**, verified
|
||||
2026-07-22: D6/D7/R37/R38/TP1–5/J4 all present with correct net
|
||||
assignments (`Net-(D6-A)`/`Net-(D7-A)`/`/fpga/LED_G`/`/fpga/LED_R`
|
||||
for the LEDs, `/Power/3V3`/`/fpga/1V2`/`/ethernet/ETH_3V3`/
|
||||
`/GC_ON`/`GND` for TP1–5, `/fpga/DBG0-4`+`GND` for J4), 0
|
||||
unconnected items. LED visibility vs the GC shell not
|
||||
re-verified here (bench item).
|
||||
- [x] **Verify mechanical fit — major progress 2026-07-22** (bench item,
|
||||
photo-based, this session): the user measured the real GameCube SP1
|
||||
bay using an Android reference-square app (ImageMeter) against a 2 cm
|
||||
calibration square, photographing up into the bay with J2 (Ethernet
|
||||
jack) as the fixed anchor. Cross-referencing those measurements against
|
||||
the PCB's J3/J2 courtyards (courtyard, not pad or slot, is the correct
|
||||
mechanical reference) found J3 was mispositioned in Y by ~5 mm.
|
||||
Orientation (which real-world edge maps to which PCB edge) was
|
||||
independently confirmed via a numerical fit check (original pairing:
|
||||
~2–3 mm residual both sides; a candidate 180°-about-X-axis reflection
|
||||
was tested and rejected: 6.3 mm residual on one side) plus a rendered
|
||||
PCB PDF sanity check.
|
||||
- [x] **J3 shifted**: `(at 189.85 59.9)` → `(at 189.85 54.9)`, i.e.
|
||||
**Y −5.0 mm**, X unchanged (X was checked against both bay edges
|
||||
using the board's true front/back edges — no shift needed). J3
|
||||
was fully unrouted at shift time (0 track segments touched any
|
||||
of its 24 pads, verified beforehand) so the move was electrically
|
||||
free; the resulting 183 DRC collisions (D2 + EXI_* net clearances
|
||||
in the new J3 footprint area) have since been resolved by
|
||||
rerouting — 0 J3-area DRC errors remain as of 2026-07-22, and J3
|
||||
is now fully routed (see above).
|
||||
- [ ] X/Y still not verified against real hardware — this was a
|
||||
photo/measurement-based correction, not a fit-check against an
|
||||
actual GameCube. Confirm on the bench when a unit is available.
|
||||
- [ ] Insertion depth (Z, connector engagement into the slot) —
|
||||
explicitly deferred by the user, not addressed this pass.
|
||||
- Note 2026-07-18 (unchanged): the J3 footprint (12 contacts, 1 mm
|
||||
effective pitch, two staggered depth rows, front-side only,
|
||||
fingers to the board edge per the .kicad_dru exception) is the
|
||||
geometry derived from the physical sp1_test_plug iterations —
|
||||
the test-plug project itself contains no reusable finger
|
||||
footprint to diff against, so the provenance is the physical
|
||||
test, not a file comparison.
|
||||
- [x] **SP1 12 V rail viability — VERIFIED against existing projects
|
||||
(2026-07-17).** webhdx's IDE-EXI v2 for Serial Port 1 (which became the
|
||||
commercial M.2 Loader): "New switching power regulator supplies 3.3V@2A
|
||||
@@ -197,10 +365,12 @@ remaining work is the Functional/Broader/ordering lists below.
|
||||
pin-compatible, but treat as a bring-up suspect if EXI ESD behaviour
|
||||
looks odd. C65 is an SMD electrolytic (Lelon VZH101M1ETR-0607, 25 V) —
|
||||
assembly-friendly, not THT as first assumed.
|
||||
- [ ] Fiducials: VERIFIED ABSENT (0 on the board, 2026-07-18). JLCPCB can
|
||||
panel-add their own, but 3 board fiducials (1 mm copper dot, 2 mm mask
|
||||
opening, asymmetric corners) is the robust choice — add with the debug
|
||||
LEDs/test points pass.
|
||||
- [x] Fiducials: **placed 2026-07-22** — `Fiducial_0.5mm_Mask1mm` (0.5 mm
|
||||
copper dot, 1 mm mask opening; downsized from the originally-planned
|
||||
1 mm/2 mm footprint because no spot on the real board had >5 mm
|
||||
clearance from other parts) at FID1 (160.0, 50.5), FID2 (184.2, 61.0),
|
||||
FID3 (187.3, 47.5) — asymmetric placement, all verified genuinely
|
||||
on-board against the true (non-bounding-box) board polygon, DRC 0.
|
||||
|
||||
## Housekeeping (repo) — done 2026-07-17
|
||||
|
||||
|
||||
Reference in New Issue
Block a user