Electronics Stator Design Spec - thepinkmile/Enigma-NG GitHub Wiki
Stator Board (V1.0) Design Specification
Status: Draft Project: Enigma-NG Author: Izzyonstage & GitHub Copilot Version: v1.0.0 Associated Hardware Revision: Rev A Last Updated: 2026-04-20
The Stator Board is the mechanical and electrical backbone of the rotor stack. It provides the high-current distribution and signal routing for the 30 modular rotors.
1. Overview
- Stackup: 4-Layer / 2oz Finished Copper.
- Layer Mapping: L1: Signal (JTAG/routing) | L2: GND | L3: 3V3_ENIG | L4: ENC Data.
- Role: Removable vertical daughterboard and master switchboard for the 30-rotor stack and peripheral encoder boards.
Functional & Design Requirements
Functional Requirements
| ID | Functional Requirement | Notes | Satisfied By / Cross-Ref |
|---|---|---|---|
| FR-STA-01 | Serve as the removable mechanical and electrical backplane for the 30-rotor stack | Provides all power, JTAG, and data connectivity to rotors | §2 Core Features; BOM J1–J3 (ERF8 rotor sockets) |
| FR-STA-02 | Distribute 3V3_ENIG power to all 30 rotor slots simultaneously | Via 2oz copper pour on L3 | §2 Core Features; §3 Encryption & JTAG Hub; BOM L1–L4 (ferrite beads) |
| FR-STA-03 | Route the JTAG chain from the Controller Board through all 30 rotor slots in sequence | Serial daisy-chain; Stator CPLD is device 1 | §3 Encryption & JTAG Hub; BOM U1 (EPM570T100I5N) |
| FR-STA-04 | Receive TTD_RETURN from the Reflector and forward to the Controller Board | Via J10 (Adam Tech BHR-16-VUA 16-pin reflector / extension port) into the J5 logic dock return path |
§3 Encryption & JTAG Hub; BOM J10, R2 (10kΩ pull-up) |
| FR-STA-05 | Interface with up to 6 Encoder Modules via IDC ribbon cables; route 6-bit data bus through one HID encode path, one HID decode path, and two configurable plugboard passes | Bank 1 = KBD_ENC + LBD_DEC; Bank 2 = PLG_PASS1_DEC + PLG_PASS1_ENC; Bank 3 = PLG_PASS2_DEC + PLG_PASS2_ENC |
§3 Plugboard Routing; §4 Interconnects; BOM J4–J9 (26-pin Molex IDC) |
| FR-STA-06 | Host a CPLD as the first device in the system JTAG chain | Intel MAX II EPM570 (570 LEs required for startup-loaded reflector map registers + routing matrix) | §3 Encryption & JTAG Hub; BOM U1 (EPM570T100I5N) |
| FR-STA-07 | Connect to the Controller Board via two hybrid blind-mate dock connectors | J11 = 5V-biased power dock; J12 = 3V3/JTAG/I2C dock |
§4 Interconnects; BOM J11, J12 |
| FR-STA-08 | Select the active plugboard routing configuration via panel-mount toggle switches on the Settings Board via I²C; CM5 can override routing configuration when Bank 1 enable is inactive | Bank 1 (SW_B1_EN + SW_B1[0:3]) on Settings Board provides 16 routing configurations; CM5 reads U_EXP_SW_IN @ 0x23, evaluates bank enable, writes final config to U_EXP4 GPA[0:3] @ 0x22; CPLD re-latches on STATOR_CFG_RDY rising edge | §3 Panel Switch Configuration (Bank 1); §4.2 I²C Devices; BOM U_EXP4, R16–R19 |
| FR-STA-09 | Select and apply a stored reflector substitution map at the reflection boundary while retaining the mandatory physical Reflector board as the electrical turnaround | Bank 2 (SW_B2_EN + SW_B2[0:5]) on Settings Board provides a 6-bit reflector-map selection; CM5 can override when Bank 2 enable is inactive; final config driven to CPLD by U_EXP4 GPB[0:5] @ 0x22 | §3 Panel Switch Configuration (Bank 2); §4.2 I²C Devices; BOM U_EXP4, R21–R26 |
| FR-STA-10 | Provide I²C GPIO expansion for CM5 virtual keypress injection, ENC bus monitoring, servo control, SYS_RESET_N management, and CPLD configuration driving | Via three MCP23017 expanders: U_EXP1 @ 0x20, U_EXP2 @ 0x21, U_EXP4 @ 0x22 on shared I²C-1 bus | §4 I²C Devices; BOM U_EXP1, U_EXP2, U_EXP4 |
| FR-STA-11 | Provide I²C PWM output for servo motor control | Via PCA9685 (U_EXP3 @ 0x60) on shared I²C-1 bus; Ch0 = 50Hz SERVO_PWM | §4 I²C Devices; BOM U_EXP3 |
| FR-STA-12 | Provide servo homing detection via SERVO_HOME switch | SPST NO momentary (active-low); 10kΩ pull-up to 3V3_ENIG + 100nF X7R debounce cap; connected to U_EXP2 GPB[1] | §4 I²C Devices; BOM SW3, R_SH1, C_SH1 |
| FR-STA-13 | Implement SOURCE_SEL MUX in Stator CPLD to select between keyboard and CM5 virtual keypress | MUX at KBD_ENC (J4) ENC_OUT[0:5] entry point; SOURCE_SEL driven by U_EXP2 GPA[6]; 0=keyboard, 1=CM5 virtual |
§3 CPLD SOURCE_SEL MUX |
| FR-STA-14 | Connect to Settings Board via I²C-1 bus for panel toggle-switch configuration and LED status output | J_CFG = 6-pin JST PH 2.0mm connector (3V3_ENIG, 5V_MAIN, GND, SDA, SCL, GND); Settings Board expanders 0x23 (switch input), 0x24 (Bank 1 LED), and 0x25 (Bank 2 LED) share the Stator I²C-1 bus |
§4.2 I²C Devices; BOM J_CFG |
Design Requirements
| ID | Design Requirement | Specification | Satisfied By / Cross-Ref |
|---|---|---|---|
| DR-STA-01 | PCB stackup | 4-layer, 2oz finished copper (JLC04161H-7628) | §7 PCB Fabrication & Stackup |
| DR-STA-02 | Layer mapping | L1 = Signal (JTAG/routing), L2 = GND, L3 = 3V3_ENIG, L4 = ENC Data | §1 Overview |
| DR-STA-03 | Rotor interface (per slot) | J1 = ERF8-005 (JTAG), J2 = ERF8-005 (Power), J3 = ERF8-010 (ENC); 1 slot set | §4 Interconnects; BOM J1–J3 (ERF8-005/ERF8-010) |
| DR-STA-04 | Encoder interface | J4/J5/J6/J7/J8/J9 = 26-pin Molex IDC (6 fixed-role encoder ports in 3 banks of 2) | §4 Interconnects; BOM J4–J9 (Molex 26-pin) |
| DR-STA-05 | TTD_RETURN input | J10 = Adam Tech BHR-16-VUA 16-pin 2×8 shrouded header; TTD_RETURN on pin 15 (from Reflector J4) |
§3 Encryption & JTAG Hub; BOM J10 |
| DR-STA-06 | Controller dock connectors | J11/J12 = Molex 2195620015 hybrid plugs mating with Controller 2195630015 receptacles |
§4 Interconnects; BOM J11, J12 |
| DR-STA-07 | CPLD | Intel MAX II EPM570T100I5N (TQFP-100); 570 LEs; same footprint as EPM240 (drop-in); 570 LEs required for startup-loaded 64-char reflector map (384 FFs) + routing matrix logic | §3 Encryption & JTAG Hub; BOM U1 (EPM570T100I5N) |
| DR-STA-08 | Power monitoring | INA219 current sensor; shunt R1 = CSS2H-2512R-R010ELF (10mΩ 2512 Kelvin), sized for the 2.05 A worst-case typical stack load | §5 Power Telemetry; BOM U2 (INA219AIDR), R1 (CSS2H 10mΩ shunt) |
| DR-STA-09 | Maximum 3V3_ENIG load | 2.05 A worst-case typical (30 rotors + Stator CPLD + all encoders) | §2 Core Features; §5 Power Telemetry |
| DR-STA-10 | Routing configuration selection | SW1[0:3] routing config inputs now driven by U_EXP4 GPA[0:3]; 4× 10kΩ pull-down resistors R16–R19 retained on CPLD inputs as power-up safe defaults (hold 0 when U_EXP4 is uninitialised); physical switches relocated to Settings Board | §3 Panel Switch Configuration (Bank 1); BOM U_EXP4, R16–R19 |
| DR-STA-11 | Reflector map selection | SW2[0:5] reflector config inputs now driven by U_EXP4 GPB[0:5]; 6× 10kΩ pull-down resistors R21–R26 retained on CPLD inputs as power-up safe defaults; physical switches relocated to Settings Board | §3 Panel Switch Configuration (Bank 2); BOM U_EXP4, R21–R26 |
| DR-STA-12 | I²C GPIO expanders | U_EXP1 = MCP23017T-E/SO @ 0x20; U_EXP2 = MCP23017T-E/SO @ 0x21; U_EXP4 = MCP23017T-E/SO @ 0x22; SOIC-28 package; on shared I²C-1 bus | BOM U_EXP1, U_EXP2, U_EXP4 |
| DR-STA-13 | I²C PWM driver | U_EXP3 = PCA9685BS/3 @ 0x60; SSOP-28 package; Ch0 = SERVO_PWM at 50Hz; A5→3V3_ENIG, A4–A0→GND; all-call disabled in daemon init | BOM U_EXP3 |
| DR-STA-14 | Servo connector | J_SERVO = 3-pin JST PH 2.0mm connector; pins: 5V_MAIN, GND, SERVO_PWM. 5V_MAIN is routed from the Controller Board via the J4 high-current dock. |
BOM J_SERVO |
| DR-STA-15 | SERVO_HOME switch | SW3 = SPST normally-open momentary; active-low; 10kΩ pull-up to 3V3_ENIG + 100nF X7R cap to GND (RC τ=1ms); connected to U_EXP2 GPB[1] | BOM SW3, R_SH1, C_SH1 |
| DR-STA-16 | U_EXP4 specification | U_EXP4 = MCP23017T-E/SO @ 0x22; SOIC-28; A2=LOW, A1=HIGH, A0=LOW; GPA[0:3] = SW1[0:3] CPLD config outputs; GPA[4] = STATOR_CFG_RDY strobe output; GPB[0:5] = SW2[0:5] CPLD config outputs | BOM U_EXP4 |
| DR-STA-17 | J_CFG connector | J_CFG = 6-pin JST PH 2.0mm B6B-PH-K-S(LF)(SN); pins: 3V3_ENIG, 5V_MAIN, GND, SDA, SCL, GND; connects to Settings Board J_I2C via 6-wire harness. 5V_MAIN is derived from the Controller-fed J4 dock. |
BOM J_CFG |
| DR-STA-18 | STATOR_CFG_RDY signal | STATOR_CFG_RDY = new CPLD input pin from U_EXP4 GPA[4]; 10kΩ pull-down to GND (default LOW); CPLD re-latches SW1[0:3] and SW2[0:5] config values on rising edge | BOM U_EXP4; §3 Panel Switch Configuration (Bank 1) |
2. Core Features
- Modular Slots: 1× Samtec ERF8 female socket set (3 connectors: ERF8-005 JTAG, ERF8-005 Power, ERF8-010 ENC_DATA) mating with the ERM8 male headers on the Rotor.
- Power Tree: A 2oz copper pour for the
3V3_ENIGrail to handle the 2.05A worst-case typical load without voltage sag (seedesign/Electronics/Power_Budgets.md). The 5A figure previously quoted was a conservative design margin; the LDO hard limit is 3.0A.
GND_CHASSIS Single-Point Bond
Per design/Standards/Global_Routing_Spec.md §5, the Stator implements a local GND_CHASSIS net
tied to its mounting holes and any deliberate enclosure-contact features, but it does not
implement a local GND-to-GND_CHASSIS bond. The system's only galvanic GND ↔ GND_CHASSIS bond is
defined on the Power Module at the common power-entry point immediately before the eFuse, so
J4/J5 dock-entry GND remains signal/power return only and must not be bridged locally to
chassis on the Stator.
3. Encryption & JTAG Hub
- CPLD: Intel MAX II EPM570T100I5N CPLD (Logic Router & Reflector).
CPLD Signal Routing Matrix
The Stator CPLD (U1) is the bidirectional ENC_DATA routing hub for the full encryption cycle. It has four fixed external ENC_DATA service interfaces:
J4=KBD_ENC(keyboard encode source)J5=LBD_DEC(lightboard decode destination)J3= Rotor 1 ENC connectorJ10= Reflector / Extension return connector
It also owns two configurable plugboard passes, each implemented as a paired decode/encode module:
J6+J7= Plugboard Pass 1J8+J9= Plugboard Pass 2
The encryption signal passes through the CPLD at three defined interception points:
| Step | CPLD receives from | Optional plugboard insertion | CPLD drives to |
|---|---|---|---|
| 1 — Forward entry | J4 ENC_OUT[0:5] — keyboard keystroke |
Pre-Rotor 1 position — Pass 1 and/or Pass 2 | J3 ENC_IN[0:5] → Rotor 1 (starts forward pass through rotor stack) |
| 2 — Reflector return | J10 ENC_OUT[0:5] — reflected signal returned from Reflector chain |
At Reflector boundary — Pass 1 and/or Pass 2 | J10 ENC_IN[0:5] → Reflector chain → Rotor 30 (starts return pass back through rotor stack) |
| 3 — Final exit | J3 ENC_OUT[0:5] — Rotor 1 return-pass output |
Post-Rotor 1 return position — Pass 1 and/or Pass 2 | J5 ENC_IN[0:5] → Lightboard |
At each step the CPLD either passes the signal transparently (no plugboard) or routes it through
Plugboard Pass 1 (J6 decode -> passive jackfield -> J7 encode) and/or Plugboard Pass 2
(J8 decode -> passive jackfield -> J9 encode) before forwarding. The active insertion
positions are determined by the VHDL routing case statement selected by U_EXP4 GPA[0:3] written by
the CM5 daemon (see §3 Panel Switch Configuration and DEC-032).
Panel Switch Configuration (Bank 1 — Plugboard Routing)
Bank 1 panel switches on the Settings Board provide a 4-bit binary index (SW_B1[3:0], 0–15) selecting the active routing case from 16 configurations synthesised into the CPLD fabric. No JTAG reprogramming is required to change configuration — only a single JTAG flash at initial programming. SW_B1[1:0] encode Plugboard Pass 1 position; SW_B1[3:2] encode Plugboard Pass 2 position.
The active configuration is driven to the CPLD by U_EXP4 GPA[0:3] via I²C. When Bank 1 enable (SW_B1_EN) is HIGH, the CM5 daemon forwards the physical switch reading to U_EXP4; when LOW, the CM5 writes its own configuration. A STATOR_CFG_RDY strobe (U_EXP4 GPA[4]) triggers re-latch. Pull-down resistors R16–R19 hold each CPLD input at logic-0 when U_EXP4 is uninitialised (power-up safe default).
| SW1 Index (SW_B1[3]:SW_B1[2]:SW_B1[1]:SW_B1[0]) | Plugboard Pass 1 (J6/J7) insertion point |
Plugboard Pass 2 (J8/J9) insertion point |
Historical reference |
|---|---|---|---|
| 0 (0000) | None | None | No plugboard — straight through |
| 1 (0001) | Pre-Rotor 1 | None | Single pre-Rotor 1 pass |
| 2 (0010) | At Reflector | None | Later Enigma models (single reflector pass) |
| 3 (0011) | Post-Rotor 1 return | None | Single post-Rotor 1 pass |
| 4 (0100) | None | Pre-Rotor 1 | — |
| 5 (0101) | Pre-Rotor 1 | Pre-Rotor 1 | Cascaded pre-Rotor 1 |
| 6 (0110) | At Reflector | Pre-Rotor 1 | — |
| 7 (0111) | Post-Rotor 1 return | Pre-Rotor 1 | — |
| 8 (1000) | None | At Reflector | — |
| 9 (1001) | Pre-Rotor 1 | At Reflector | — |
| 10 (1010) | At Reflector | At Reflector | Cascaded at Reflector |
| 11 (1011) | Post-Rotor 1 return | At Reflector | — |
| 12 (1100) | None | Post-Rotor 1 return | — |
| 13 (1101) | Pre-Rotor 1 | Post-Rotor 1 return | Original Enigma (pre-war) |
| 14 (1110) | At Reflector | Post-Rotor 1 return | — |
| 15 (1111) | Post-Rotor 1 return | Post-Rotor 1 return | Cascaded post-Rotor 1 |
Panel Switch Configuration (Bank 2 — Reflector Mapping)
Bank 2 panel switches on the Settings Board select the reflector-map index used by the Stator CPLD at the reflection boundary. The physical Reflector board remains mandatory and always provides the electrical turnaround at the end of the rotor/extension chain; Bank 2 only selects which stored involutory map the Stator applies before the returned signal re-enters the stack.
The active configuration is driven to the CPLD by U_EXP4 GPB[0:5] via I²C. When Bank 2 enable (SW_B2_EN) is HIGH, the CM5 daemon forwards the physical switch readings; when LOW, the CM5 writes its own configuration. A STATOR_CFG_RDY strobe (U_EXP4 GPA[4]) triggers re-latch.
| Bit | SW_B2 position | Function |
|---|---|---|
SW_B2[5:0] |
SW_B2[5:0] | 6-bit map index (0–63): selects which involutory reflector map to load from UFM at configuration load; indices 0–20 are currently allocated |
Pull-down resistors R21–R26 on the Stator CPLD input pins hold each input at logic-0 when U_EXP4 is uninitialised (default map index = 0).
When Bank 2 is latched, the CPLD serially reads the indexed map from UFM into internal flip-flop registers (~40 µs). At the reflection boundary (Step 2 in the routing matrix), the CPLD applies the loaded map combinationally while the mandatory Reflector board provides the physical return path on J10. J10 ENC_IN/OUT therefore remain part of the active signal path in all supported configurations.
Bank 1 (routing matrix) and Bank 2 (reflector mode) are fully independent; all 16 Bank 1 configurations are valid regardless of the Bank 2 setting.
UFM map storage: 21 involutory (self-inverse) reflector maps; same 64-entry × 6-bit format as Rotor UFM maps (384 bits per map; 21 × 384 = 8,064 bits ≤ 8,192-bit UFM). Maps are involutory by definition: applying the same map twice returns the original character, preserving Enigma cipher symmetry. Pre-loaded indices:
| Index | Map | Notes |
|---|---|---|
| 0 | UKW-A equivalent | Historical Enigma Reflector A (26-char; entries 26–63 = identity for 64-char variant) |
| 1 | UKW-B equivalent | Historical Enigma Reflector B — most common WWII Enigma variant |
| 2 | UKW-C equivalent | Historical Enigma Reflector C — later wartime variant |
| 3–20 | Custom | Available for user-defined involutory maps via JTAG programming |
- Decoupling and bulk entry capacitor requirements per
design/Standards/Global_Routing_Spec.md §3. - Ferrite Bead Rule: Use 4x ferrite beads (one per 3V3_ENIG rotor feed) between the
J12dock entry and rotor power distribution to isolate switching transients from Controller logic. - Current Margin Check: Rotor rail is budgeted at 1.65A (30 rotors × 55mA budget — see
design/Electronics/Power_Budgets.md); with 4 parallel feeds this is ~413mA per bead nominal sharing, well within the 3.5A bead rating. Total 3V3_ENIG worst case including all CPLDs and encoders: 2.05A (~32% headroom vs 3.0A LDO). - JTAG Return: Includes 10kΩ pull-up on TTD_RETURN at the
J12logic-dock entry/exit boundary (R2). - JTAG Pull Resistors (×4, placed near Stator CPLD U1):
- TMS: 10kΩ pull-up to 3V3_ENIG (R3) — ensures JTAG TAP resets to Test-Logic-Reset on power-up and when controller is idle.
- TDI: 10kΩ pull-up to 3V3_ENIG (R4) — holds TDI at logic-1 (BYPASS) when not actively driven by the Controller.
- TCK: 10kΩ pull-down to GND (R5) — prevents spurious clocking when TCK line is floating.
- SYS_RESET_N: 10kΩ pull-up to 3V3_ENIG (R6) — active-low signal; pull-up ensures CPLD remains out of reset by default.
- JTAG Trace Width Rule: All JTAG signal traces on L1 (TCK, TMS, TDI, TDO) shall
be routed at 0.127 mm (5 mil) width over the L2 GND plane, targeting 50 Ω controlled
impedance. See
design/Electronics/Investigations/JTAG_Integrity.mdand DEC-016. - JTAG Series Termination at Encoder Port Outputs: 75 Ω series resistors placed within 2 mm of
each encoder-port connector pad on the Stator PCB, targeting 95 Ω source impedance to match
the ~100 Ω IDC ribbon cable:
- R7-R12: TCK -> J4, J5, J6, J7, J8, J9 respectively.
- R33-R38: TMS -> J4, J5, J6, J7, J8, J9 respectively.
- R27: Stator CPLD TDO -> J4 TDI.
- R28: J4 TDO return -> J5 TDI.
- R29: J5 TDO return -> J6 TDI.
- R30: J6 TDO return -> J7 TDI.
- R31: J7 TDO return -> J8 TDI.
- R32: J8 TDO return -> J9 TDI.
- All TDI-chain resistors are Stator-side resistors — no series resistors are required at the Encoder cable inputs.
- Reset: Pin 100 (DEV_CLRN) tied to the global SYS_RESET_N rail. SYS_RESET_N is driven by MCP23017 U_EXP2 GPA[7] (@ 0x21) via I²C; R6 (10kΩ pull-up to 3V3_ENIG) ensures CPLDs remain out of reset at power-up (see DEC-031).
CPLD SOURCE_SEL MUX
The Stator CPLD VHDL must implement a SOURCE_SEL MUX at the J4 ENC_OUT[0:5] entry point
(Step 1 — Forward entry in the routing matrix). The SOURCE_SEL signal is driven by U_EXP2 GPA[6]
via I²C:
- SOURCE_SEL=0 (default): Keyboard
ENC_OUT[0:5]fromJ4is forwarded to the encryption pipeline. Normal operator keyboard use. - SOURCE_SEL=1: KEY_ADDR[0:4] + KEY_EN from U_EXP2 GPA[0:5] synthesises a virtual ENC_OUT signal in CPLD fabric, replacing the J4 keyboard input. CM5 autonomous / virtual keypress mode.
This allows the CM5 to inject any 5-bit key address without physical keyboard interaction. The physical keyboard is electrically disconnected from the cipher pipeline when SOURCE_SEL=1.
4. Interconnects
-
Controller Dock: The Stator plugs into the Controller through two Molex EXTreme Guardian HD hybrid connectors.
- J11 (5V-biased dock):
4 × 5V_MAINblades,1 × GNDblade, signal field allocated to extraGNDreturns / guards. - J12 (3V3 / logic dock):
4 × 3V3_ENIGblades,1 × GNDblade, guardedTCK,TMS,TDI,TTD_RETURN,I2C1_SDA, andI2C1_SCL; all remaining signal contacts tied toGND. - Controller mating part: Molex
2195630015receptacle. Stator plug: Molex2195620015. - Cross-ref: See
Controller/Design_Spec.md§2 andController/Board_Layout.mdfor the active dock allocation. - Reference PDFs:
Molex-2195630015-datasheet.pdf,Molex-2195630015-drawings.pdf,Molex-2195620015-datasheet.pdf,Molex-2195620015-drawings.pdf,Molex-ExtremeGuardianHD-2141130000-PS-000-specification.pdf
- J11 (5V-biased dock):
-
Encoder Interconnects: 26-pin (2×13) 2.54mm shrouded box headers (power, ENC_DATA, JTAG).
-
Plugboard Routing — Configurable Signal Chain Positions: The Stator CPLD implements a configurable routing matrix (see §3 CPLD Signal Routing Matrix) with three plugboard insertion positions in the full encryption cycle. The active configuration is selected via Bank 1 panel switches on the Settings Board (SW_B1[0:3] + SW_B1_EN), read by CM5 and driven to the CPLD by U_EXP4 GPA[0:3] (16 pre-defined configurations — no JTAG reprogramming required for configuration changes). The six encoder ports are arranged as three banks of two, with one fixed HID bank and two configurable plugboard-pass banks:
Port Default role Plugboard signal chain position J4 KBD_ENCFixed: keyboard source (not used as a plugboard pass) J5 LBD_DECFixed: lightboard destination (not used as a plugboard pass) J6 / J7 Plugboard Pass 1 ( DEC/ENC)Configurable: pre-Rotor 1 / At Reflector / post-Rotor 1 return (set by SW_B1[1:0]) J8 / J9 Plugboard Pass 2 ( DEC/ENC)Configurable: pre-Rotor 1 / At Reflector / post-Rotor 1 return (set by SW_B1[3:2]) The Stator CPLD implements all 16 configurations as synthesised VHDL case logic. See
design/Electronics/Stator/Board_Layout.mdanddesign/Electronics/Encoder/Design_Spec.md §1for further detail. -
**Reflector/Extension Interconnect:**16-pin (2x8) Vertical Shrouded Header (Power, SYS_RESET_N, ENC_DATA, TTD_RETURN).
- Routing: Cables secured to the chassis floor with conductive EMI tape.
- Extension boards enable daisy chaining this interconnect (to enable multi-stack rotor configurations).
- Cross-ref: For matching interconnect pinouts on power (3V3_ENIG/GND), SYS_RESET_N,
ENC_IN/ENC_OUT, and JTAG TTD_RETURN lines used for reflector loopback/plugboard mapping, See:
Extension/Design_Spec.mdReflector/Design_Spec.md
- ENC_DATA (bidirectional — simultaneous): J10 carries ENC_DATA on two separate pin groups simultaneously. ENC_OUT[0:5] (pins 9–14): returns the reflected signal from the Reflector chain to the Stator CPLD (Step 2 receive in the routing matrix). ENC_IN[0:5] (pins 3–8): carries the return-pass signal driven by the Stator CPLD back to the Reflector chain after optional plugboard insertion (Step 2 drive — starts the return pass through the rotor stack).
-
Rotor Interconnect: The Stator provides 1 rotor slot (Rotor 1 input side) using 3 ERF8 female sockets.
- JTAG: ERF8-005-05.0-S-DV-K-TR (10-pin 2×5, 0.8mm pitch) — TCK, TMS, TTD (TDI function on input side), SYS_RESET_N with interleaved GND. J1 pin 6 = TTD (outgoing TDI to Rotor 1). Pin 10 = spare/GND (TDO does NOT return via this connector — it returns via J10 pin 15).
- Power: ERF8-005-05.0-S-DV-K-TR (10-pin 2×5, 0.8mm pitch) — 5× 3V3_ENIG, 5× GND. Same part as JTAG socket.
- ENC DATA (bidirectional): ERF8-010-05.0-S-DV-K-TR (20-pin 2×10, 0.8mm pitch) — ENC_IN[0:5] (CPLD drives to Rotor 1, forward pass — Step 1 drive); ENC_OUT[0:5] (CPLD receives from Rotor 1, return pass — Step 3 receive); 8× GND fill.
- Cross-ref: Authoritative pinout is defined in
Rotor/Design_Spec.md §3.4(DEC-018 ownership). - Note: Rotor-to-rotor connections beyond Rotor 1 are direct (each Rotor J4/J5/J6 output mates with the next Rotor J1/J2/J3 input); Extension boards provide inter-group bridging at group boundaries in the serial chain (Stator → Rotor 1 → … → Rotor 30 → Reflector J1–J3).
-
Diagnostics: 2x10 ENIG Gold Diagnostic Looped Probe Pad Bank (L1, Mirror of Controller).
4.2 I²C Devices on Stator
All devices share the I²C-1 bus (SDA/SCL) routed from the CM5 via the guarded signal field on J12.
J11 carries the grouped 5V_MAIN feed, while J12 carries the grouped 3V3_ENIG feed plus JTAG and
I²C. The Stator fans the incoming 5V_MAIN branch out to J_SERVO and to Settings Board connector
J_CFG.
| Address | Device | Ref | Function |
|---|---|---|---|
| 0x20 | MCP23017 | U_EXP1 | ENC_IN/ENC_OUT monitoring (16 GPIO) |
| 0x21 | MCP23017 | U_EXP2 | Virtual keypress injection, SOURCE_SEL, SYS_RESET_N, servo control (16 GPIO) |
| 0x22 | MCP23017 | U_EXP4 | CPLD configuration output driver: SW1[0:3] routing + SW2[0:5] reflector map + STATOR_CFG_RDY strobe (16 GPIO) |
| 0x23 | MCP23017 | U_EXP_SW_IN | Settings Board switch-input expander on J_CFG branch of the shared I2C-1 bus |
| 0x24 | MCP23017 | U_LED_B1 | Settings Board Bank 1 LED/anode + RGB colour-rail driver |
| 0x25 | MCP23017 | U_LED_B2 | Settings Board Bank 2 LED/anode + RGB colour-rail driver |
| 0x45 | INA219 | U2 | Rotor stack current/power telemetry |
| 0x60 | PCA9685 | U_EXP3 | Servo PWM driver (Ch0 = 50Hz SERVO_PWM) |
4.1 Prototype Bench-Testing Provision (Break-Off Coupons)
The board panel includes 5 break-off PCB coupons attached by mousebite perforations. The Controller dock coupons fan out the hybrid dock interfaces into coarse-pitch bench-test headers, while the rotor slot coupons continue to fan out the Samtec slot interfaces. For final production the coupons are snapped off.
| Coupon | Connector | IDC Header | Signal |
|---|---|---|---|
| 1 | J11 — 5V dock | coarse-pitch power breakout | Controller 5V / GND dock |
| 2 | J12 — 3V3 / logic dock | coarse-pitch mixed-signal breakout | Controller 3V3 / JTAG / I2C dock |
| 3 | J1 Slot 1 — ERF8-005 (10-pin female) | 2×5 IDC box header, 2.54mm | Rotor 1 JTAG out |
| 4 | J2 Slot 1 — ERF8-005 (10-pin female) | 2×5 IDC box header, 2.54mm | Rotor 1 power out |
| 5 | J3 Slot 1 — ERF8-010 (20-pin female) | 2×10 IDC box header, 2.54mm | Rotor 1 ENC data out |
Coupons 2–4 cover Rotor Slot 1 only (J1–J3 first instance); sufficient for single-rotor bench integration testing. IDC part numbers and coupon PCB fanout geometry to be defined at schematic/layout phase.
5. Power Telemetry (The "Encryption Load")
- Purpose: Provides real-time current/voltage data for the 30-rotor stack to the CM5 GUI.
- Sensor: TI INA219 Zero-Drift Power Monitor (Address: 0x45) — dedicated rotor-stack usage telemetry.
- Placement: Inserted on L1 (Top Layer) connected to the 3V3_ENIG rail immediately before the rotor stack.
- Minimum 15mm isolation from Intel MAX II EPM570T100I5N CPLD logic core.
- Shunt: CSS2H-2512R-R010ELF (10mΩ ±1% 5A, 2512 Kelvin-sense) rotor-stack shunt resistor. Stator R1 instance. (PM R12 + PM R23 are the first and second system CSS2H; total build qty: 3 — see
Power_Budgets.md.) - Interface: I2C-1 Telemetry Bus (via
J5, shared with the Power Module and Settings Board). - Filtering: 0.1µF decoupling and RC filter on IN+/IN- for noise suppression from mechanical rotors.
6. EMI & Mechanical
- Shield Mount: No local
GND_CHASSISlanding strip is implemented on the Stator; any internal cable clamping or shielding features remain within the signal/power GND domain unless a later EMC-focused decision explicitly introduces a justified exception. - Clamping: Dual 3.2mm PTH anchors per cable for Galvanised Steel Bar compression.
- Diagnostics: 2x10 ENIG Gold Looped Probe Pad Bank mirrored to Controller's Bank-Beta pinout for A-B signal verification.
7. PCB Fabrication & Stackup
- Manufacturer: JLCPCB
- Layer count: 4-layer
- Stackup: JLC04161H-7628
- Board thickness: 1.6mm
- Copper weight: 2oz outer / 0.5oz inner
- Surface finish: ENIG
- Min trace/space: 0.1mm / 0.1mm
- Min drill: 0.2mm
8. Thermal & ESD
- Thermal: No active cooling required. Low-power passive components only. Relies on chassis airflow.
- ESD: TVS diode protection on external-facing signal lines. All connectors include GND guard pins per Samtec ERF8/ERM8 pinout.
9. Bill of Materials
| Ref | Component | Value | Package | Mouser Part # | DigiKey Part # | JLCPCB Part # |
|---|---|---|---|---|---|---|
| C1-C8 | Decoupling (8 per CPLD) | 0.1µF X7R 50V | 0402 | 187-CL05B104KB5NNNC | 1276-1009-1-ND | C1525 |
| C9-C13 | Bulk entry decoupling bank (star/spoke) | 10uF X7R 50V | 1206 | 187-CL31B106KBHNNNE | 1276-6767-1-ND | C89632 |
| J1-J3 | Rotor 1 interface sockets (1 slot × 3 connectors: JTAG ERF8-005, Power ERF8-005, ENC ERF8-010) — cross-ref Rotor/Design_Spec.md §3.4 | ERF8-005 (J1+J2) / ERF8-010 (J3) | SMT 0.8mm pitch | 200-ERF8005050SDVKTR (J1+J2) / 200-ERF8010050SDVKTR (J3) | SAM13517CT-ND (J1+J2 CT) / SAM8618CT-ND (J3 CT) | C7273978 (J1+J2) / C3646170 (J3) |
| J4-J9 | Encoder port connectors (×6 positions: KBD_ENC, LBD_DEC, PLG_PASS1_DEC, PLG_PASS1_ENC, PLG_PASS2_DEC, PLG_PASS2_ENC) |
Amphenol T821126A1S100CEU — 26-pin 2×13 2.54mm shrouded (RS-Online 832-3503) | through-hole | — | — | C3013501 |
| J10 | 16-pin Reflector/Extension port | Adam Tech BHR-16-VUA — 16-pin 2×8 2.54mm shrouded | through-hole | 737-BHR-16-VUA | 2057-BHR-16-VUA-ND | C17692295 |
| J11, J12 | Controller dock hybrid plugs (5V-biased + 3V3/JTAG/I2C) | Molex 2195620015 | 5 power + 15 signal hybrid plug | 538-219562-0015 | 900-2195620015-ND | Global sourcing / consignment |
| L1-L4 | Rotor rail ferrite bead bank | 120 Ω @100 MHz, 4.0A | 1206 | 875-HI1206P121R-10 | 240-2410-1-ND | C2442103 |
| R1 | Rotor-Stack Shunt Resistor (CSS2H — Stator R1; PM R12 LTC3350 RSENSE and PM R23 INA219 U12 are first and second system instances, total build qty: 3) | CSS2H-2512R-R010ELF (10mΩ ±1% 5A) | 2512 Kelvin | 652-CSS2H-2512R-R010ELF | CSS2H-2512R-R010ELF-ND | — |
| R2 | JTAG TTD_RETURN pull-up | 10kΩ (1%) | 0603 | 667-ERJ-3EKF1002V | P10.0KHCT-ND | C191124 |
| R3 | TMS pull-up to 3V3_ENIG | 10kΩ (1%) | 0603 | 667-ERJ-3EKF1002V | P10.0KHCT-ND | C191124 |
| R4 | TDI pull-up to 3V3_ENIG | 10kΩ (1%) | 0603 | 667-ERJ-3EKF1002V | P10.0KHCT-ND | C191124 |
| R5 | TCK pull-down to GND | 10kΩ (1%) | 0603 | 667-ERJ-3EKF1002V | P10.0KHCT-ND | C191124 |
| R6 | SYS_RESET_N pull-up to 3V3_ENIG | 10kΩ (1%) | 0603 | 667-ERJ-3EKF1002V | P10.0KHCT-ND | C191124 |
| R7-R12 | TCK series resistors -> J4/J5/J6/J7/J8/J9 encoder ports (×6) | 75Ω (1%) | 0603 | 667-ERJ-3EKF75R0V | P75.0HCT-ND | C403349 |
| R33-R38 | TMS series resistors -> J4/J5/J6/J7/J8/J9 encoder ports (×6) | 75Ω (1%) | 0603 | 667-ERJ-3EKF75R0V | P75.0HCT-ND | C403349 |
| R16 | SW1[0] (switch 1) pull-down to GND | 10kΩ (1%) | 0603 | 667-ERJ-3EKF1002V | P10.0KHCT-ND | C191124 |
| R17 | SW1[1] (switch 2) pull-down to GND | 10kΩ (1%) | 0603 | 667-ERJ-3EKF1002V | P10.0KHCT-ND | C191124 |
| R18 | SW1[2] (switch 3) pull-down to GND | 10kΩ (1%) | 0603 | 667-ERJ-3EKF1002V | P10.0KHCT-ND | C191124 |
| R19 | SW1[3] (switch 4) pull-down to GND | 10kΩ (1%) | 0603 | 667-ERJ-3EKF1002V | P10.0KHCT-ND | C191124 |
| R20 | STATOR_CFG_RDY input pull-down (×1) | 10kΩ (1%) | 0603 | 667-ERJ-3EKF1002V | P10.0KHCT-ND | C191124 |
| R21-R26 | SW2[0:5] CPLD config input pull-down resistors (×6) | 10kΩ (1%) | 0603 | 667-ERJ-3EKF1002V | P10.0KHCT-ND | C191124 |
| R27-R32 | TDI chain series resistors: CPLD->J4->J5->J6->J7->J8->J9 (×6 driven segments) | 75Ω (1%) | 0603 | 667-ERJ-3EKF75R0V | P75.0HCT-ND | C403349 |
| SW1 | Routing configuration selector | — | — | — | — | |
| SW2 | Reflector map selector | — | — | — | — | |
| U1 | Stator Management CPLD (routing matrix + reflector map application) | EPM570T100I5N | TQFP-100 | 989-EPM570T100I5N | 544-2281-ND | C27319 |
| U2 | 3V3_ENIG Current/Voltage Sensing | INA219AIDR | SOIC-8 | 595-INA219AIDR | 296-23978-1-ND | C138706 |
| U_EXP1 | MCP23017 I²C GPIO Expander (ENC monitoring) | MCP23017T-E/SO | SOIC-28 | 579-MCP23017T-E/SO | MCP23017T-E/SOCT-ND | C47023 |
| U_EXP2 | MCP23017 I²C GPIO Expander (virtual keypress, servo control) | MCP23017T-E/SO | SOIC-28 | 579-MCP23017T-E/SO | MCP23017T-E/SOCT-ND | C47023 |
| U_EXP4 | MCP23017 I²C GPIO Expander (CPLD config output driver) | MCP23017T-E/SO @ 0x22 | SOIC-28 | 579-MCP23017T-E/SO | MCP23017T-E/SOCT-ND | C47023 |
| U_EXP3 | PCA9685 I²C PWM Driver (servo) | PCA9685BS/3 | SSOP-28 | 771-PCA9685BS3118 | PCA9685BS/3,118CT-ND | C18805 |
| J_SERVO | Servo connector (3-pin JST PH 2.0mm) | JST B3B-PH-K-S(LF)(SN) | THT | 306-B3BPHKSLFSNP | 455-1705-ND | C131339 |
| J_CFG | Settings Board I²C connector (6-pin JST PH 2.0mm) | JST B6B-PH-K-S(LF)(SN) | THT | 306-B6B-PH-K-SLFSN | 455-1708-ND | C131342 |
| SW3 | SERVO_HOME homing switch (SPST NO momentary, PCB-mount) | Omron SS-01GL13 | THT | 653-SS-01GL13 | SW865-ND | C3822088 |
| R_SH1 | SERVO_HOME pull-up resistor (10kΩ) | 10kΩ 1% 0402 | 0402 | 667-ERJ-2RKF1002X | P10.0KLCT-ND | C191123 |
| C_SH1 | SERVO_HOME RC debounce capacitor (100nF X7R) | 100nF 50V X7R 0402 | 0402 | 187-CL05B104KB5NNNC | 1276-1009-1-ND | C1525 |
Note: The servo motor itself (Miuzei Metal Gearbox 90) is a purchased item — see
design/Mechanical/Rotor_Actuation_Assembly/Design_Spec.md.