KirchhoffLM

An alternative: one engine, re-programmed layer by layer

The main design keeps every weight fixed in place: one chip per layer. The alternative keeps the weights in memory and re-programs a small number of capacitor arrays for each layer. Each cell is a switched capacitor bank: 8 binary-weighted capacitors (1, 2, 4 … 128 unit capacitors) connected by switches that SRAM bits control, so a layer is loaded like memory. A sequencer broadcasts the layer index on a bus; while bank A computes layer i, bank B loads layer i+1.

analog weight grid (capacitors)analog circuit (norm, SiLU, multiplier, hold)digital (memory, attention, converters)
Layer-multiplexed engineWeight storeSRAM / 3D-stacked / HBMLoader (DMA)16 bits per weightBank Alayer i: computingBank Blayer i+1: loadingAnalog enginedemod, SiLU, normsPer-user stateDeltaNet state, KVlayer-index bus: the sequencer announces which layer runs; every block switches to that layer's weights, state and ranges

Quality (Qwen3.5-0.8B, emulated)

designchip #0chip #1chip #2
fixed capacitors, one chip per layer (current design)+3.03 %+2.36 %+3.08 %
programmable bank, one array per layer+3.09 %+2.60 %+3.27 %
programmable bank, one array per layer, program-and-verify+3.19 %+2.52 %+3.23 %
programmable bank, shared array (multiplexed)+4.62 %+4.29 %+4.57 %
programmable bank, shared array (multiplexed), program-and-verify+4.67 %+3.80 %+4.63 %

Programmable banks model every bit capacitor's Pelgrom error and the coupling of open switches. "Shared array" means all layers run on the same physical cells, so their manufacturing errors repeat in every layer. Program-and-verify uses the chip's measured errors to choose, for each weight, the switch code closest to the target.

Speed, energy, area: Qwen3.5-0.8B

designbatchtok/s per usertok/s totalµJ per tokenarea mm²
one chip per layer (fixed)—37,2027,142,85714.67,971
multiplexed, on-chip SRAM13,8763,87697.2 (85 % reload)3,913
multiplexed, on-chip SRAM1282,205282,18715.3 (4 % reload)3,913
multiplexed, on-chip SRAM1024289295,59814.7 (1 % reload)3,913
multiplexed, 3D-stacked SRAM17,7527,7521,294.3 (99 % reload)3,552
multiplexed, 3D-stacked SRAM1282,205282,18724.6 (41 % reload)3,552
multiplexed, 3D-stacked SRAM1024289295,59815.9 (8 % reload)3,552
multiplexed, HBM11,9381,93833,079.9 (100 % reload)3,552
multiplexed, HBM1281,938248,062272.9 (95 % reload)3,552
multiplexed, HBM1024289295,59846.9 (69 % reload)3,552
multiplexed, DDR1194194123,895.9 (100 % reload)3,552
multiplexed, DDR12819424,806982.4 (99 % reload)3,552
multiplexed, DDR1024194198,450135.6 (89 % reload)3,552

Speed, energy, area: a 1T mixture-of-experts model (32B active)

designbatchtok/s per usertok/s totalµJ per tokenarea mm²
one chip per layer (fixed)—14,6377,142,85749.410,600,000
multiplexed, on-chip SRAM162625,169.4 (99 % reload)511,584
multiplexed, on-chip SRAM128628,00089.4 (45 % reload)511,584
multiplexed, on-chip SRAM10246264,00054.4 (9 % reload)511,584
multiplexed, 3D-stacked SRAM112512579,409.4 (100 % reload)31,584
multiplexed, 3D-stacked SRAM12812516,000669.4 (93 % reload)31,584
multiplexed, 3D-stacked SRAM1024114116,301126.9 (61 % reload)31,584
multiplexed, HBM131312,050,609.4 (100 % reload)31,584
multiplexed, HBM128314,00016,069.4 (100 % reload)31,584
multiplexed, HBM10243132,0002,051.9 (98 % reload)31,584
multiplexed, DDR1337,682,609.4 (100 % reload)31,584
multiplexed, DDR128340060,069.4 (100 % reload)31,584
multiplexed, DDR102433,2007,551.9 (99 % reload)31,584

What this shows

Timing and energy come from an order-of-magnitude model (emulator/multiplex_model.py), not from the circuit emulator. For a mixture-of-experts model, tokens in one batch use different experts, so the reuse per load is lower than assumed here.