46 Neural dataflow fabric — bit-serial MAC cells on a self-routing switch

46 : Neural dataflow fabric — bit-serial MAC cells on a self-routing switch

Design render
  • Author: Jason Hickey
  • Description: A bit-serial neural dataflow fabric: MAC cells on a self-routing banyan switch. Each cell is generated from a Lean model proved correct in the Lean kernel, and the generated netlist is then proved equivalent to its arithmetic specification over ALL inputs by SAT. The signed accumulation is proved for the drive schedule the design specifies; the sequencer that produces it, the pin wrapper and the fabric glue are hand-written RTL and are not part of either proof.
  • GitHub repository
  • Open in 3D viewer
  • Open in Tiny Tapeout Explorer
  • Clock: 18181818 Hz

How it works

This is a bit-serial neural dataflow fabric: signed multiply-accumulate cells sitting on a self-routing banyan switch, with a small processor beside them sharing the same 24 pins.

The fabric. An 8-port banyan network moves one bit per cycle. Ports are frozen by the D6 pin map: 0–3 are the MAC cells, 4 is edge-in, 5 is edge-out, 6 is a CPU-stub and 7 is spare. A packet is self-routing — its header names the destination and the switch elements read it as it passes, so nothing central schedules the traffic.

The frame. Time is divided into 14-cycle frames. Cycles 0–5 carry the header as three ACT/address pairs, most-significant bit first; cycles 6–13 carry the payload. sof (on uio_in[6]) realigns every counter in the design to frame zero, so a host that loses sync recovers by pulsing one pin. A realign truncates whatever frame is in flight — an in-progress memory transaction is restarted and a partial fetch loop is discarded — so it costs forward progress and is not a no-op.

What that means in practice, and the two cases differ:

  • One resync does not corrupt anything, but costs you the frame in flight. Swept one pulse per run across every arrival cycle of the reference program, the executed-instruction and completed-store counts are identical to no pulse at all.
  • Repeated resyncs cost measurable progress. Fourteen realigns in a single run leave the program one load and one store further behind over a fixed window.

Both are measurements of the same design; they differ in how many pulses the run contains, not in what a pulse does.

The computation. A 22-frame timetable drives a 2-2-1 schedule: three cells compute two hidden units and one output. Cells 0–2 carry the demo; cell 3 is clocked but idle, present so the array is uniform. Each cell accumulates a signed product bit-serially, with the sign handled on the final cycle of the frame. Three serialiser organs read the accumulators back out onto the fabric.

The processor beside it. (This paragraph was ladder-dependent and the ladder is now ruled: the 32-bit plane ships.) The top carries a 32-bit RV32I-subset core reaching memory off-chip through a byte-phase bus adapter. Every transaction is a whole 4-phase loop: the adapter drives one address byte per cycle on uo_out, takes one returned byte back on ui_in, and reports the transaction TYPE on uio_out[1:0] at phase 0 and the PHASE NUMBER at phases 1-3 — so the host learns what kind of transaction it is in the same sample it uses to stay aligned, at zero pin cost. A load costs two loops, a store three: address then data. The 32-bit plane occupies the same three pin groups the earlier 16-bit core used (ui_in, uo_out, uio_out[1:0]), which is why it needed no new pins. ⚠️ The core advances only when a transaction retires. That enable wire is a marked validation artifact rather than a ratified design decision, and this datasheet does not claim otherwise.

What is proved and what is not — stated precisely, because the distinction is the point of the project. Each MAC cell is generated from a Lean model proved correct in the Lean kernel, and the generated netlist is then proved equivalent to its arithmetic specification over all inputs by SAT. The signed accumulation is proved for the drive schedule the design specifies. The sequencer that produces that schedule, the pin wrapper, and the fabric glue are hand-written RTL and are not part of either proof. A layout of this composition measures area, timing, DRC, LVS and antenna — it is not a functional demo and not a proof of the whole.

How to test

Reset, then frame. Hold rst_n low, release it, then pulse sof on uio_in[6]. Every counter in the design returns to frame zero on that pulse — the sequencer, the fabric and the core's phase counter all read the same net, so they agree on where frame zero is.

That is a statement about alignment and not about safety, and the two were conflated in an earlier revision of this page. When a realign is harmless is a separate property: until the fetch_owed repair in busadapt8.v, asserting sof at a completed load or store's retiring edge, or during the first three cycles of the fetch loop that follows it, re-issued that completed transaction and destroyed the instruction being fetched. Four cycles per memory instruction; the fourth cycle of the fetch loop was already safe.

Measured on this design, sweeping one pulse per run across the steady-state window: 20 of 121 arrival cycles re-issued a completed store before the repair, 0 of 121 after. Over the whole run including bring-up the same comparison is 36 of 260 before, 0 of 260 after. (The 121- and 260-cycle windows are different populations and are given separately rather than as one improving ratio.)

The repair removes the defect by construction rather than by which cycle a pulse lands on: while a fetch is owed there is no resident instruction to re-derive from, so the only correct action is to fetch.

Drive an edge. Present serial data on uio_in[2] (edge_in_dat) with uio_in[3] as its valid. Results emerge on uio_out[4] (edge_out_dat) with uio_out[7] (valid) marking the cycles that carry them.

Watch the core. uio_out[1:0] reports the byte-phase; uo_out carries the address byte for that phase. Feeding instruction bytes back on ui_in in phase order walks the core through its loop.

Clock. The design is specified at a 55 ns period (18,181,818 Hz). That figure and clock_hz in the manifest are separate fields in separate files and nothing in either tool checks that they agree — they are kept equal by hand and by review.

THERE IS NO COCOTB BENCH IN THIS PROJECT YET, AND THIS SECTION DOES NOT PRETEND OTHERWISE — but it is no longer BLOCKED, only unwritten. It was blocked while the top was unruled: a testbench binds PROJECT_SOURCES, which must agree with source_files, which follows top_module, so a bench written against the wrong top is wasted twice. The ladder is now ruled, so the target is named and the bench is buildable. The manifest's source list is machine-checked against the RTL closure by docs/silicon-tools/manifest_check.sh, and assemble.sh REFUSES to build a submission tree while test/ is missing — so this gap cannot ship unnoticed.

Known limitation — one result per frame, and it is a design decision not a bug

The serialiser organs have no shift-enable: they shift on every load-low cycle. A 32-bit emission spread across four frames would therefore lose 24 bits into the header windows. This artifact emits one int8 frame per result instead. Full-width emission needs either a shift-enable port on the serialiser (about +32 selects) or per-frame reloads; it is priced and owed, and it does not move the area, timing, DRC, LVS or antenna numbers a layout of this composition produces.

Signoff — max-fanout DRV at the configuration this bundle submits

Written 2026-09-02 for the ndf-2a resubmission. It describes THIS configuration (branch ndf-2a, src/config.json) and no other; the 2026-08-19 submission it replaces carried no such note, deliberately — see the last paragraph.

What changed, and what did not. Four LibreLane keys differ from the 08-19 submission: PL_RESIZER_HOLD_SLACK_MARGIN 0.1 → 0.45, GRT_RESIZER_HOLD_SLACK_MARGIN 0.05 → 0.3, RSZ_CORNERS (resizing now against the four ss/tt corners instead of nom_tt alone), and CTS_SINK_CLUSTERING_SIZE = 10.

⚠️ AND THE RTL IS NO LONGER BYTE-IDENTICAL TO THE 08-19 SUBMISSION. This sentence said it was, and that was true until 2026-09-06. src/busadapt8.v now carries the fetch_owed repair: one flip-flop and one changed kind assignment, closing a window in which a host sof pulse re-issued a completed memory transaction and destroyed the instruction being fetched. That change is the reason every number in the table below moved. info.yaml, the pinout, the 55 ns clock and the 6x2 tile are unchanged.

What this configuration reports at signoff, all nine STA corners, fanout limit 10:

                              08-19 submission      this bundle
max_fanout violators                    117                3
   clock-tree leaves                    111                0
   datapath                               6                3     fanout 12, 12, 11
max_slew violators                     3317             1051
max_cap violators                        27               13
setup worst slack (55 ns period)   +5.668 ns        +8.023 ns
hold worst slack                   +0.111 ns        +0.190 ns
setup / hold TNS                       0 / 0            0 / 0
DRC · LVS · antenna                    0 / 0 / 0        0 / 0 / 0

The 08-19 column is the shuttle's own signoff for run 32284710003, reproduced locally bit-exactly (all 320 shared metrics identical) before the four keys were changed, so the delta is measured against the fabricated baseline and not against an approximation of it.

The three accepted violators, and why they are accepted. All three are resizer-inserted datapath buffers, at fanout 12, 12 and 11 against a limit of 10. None is a clock-tree leaf, verified from this bundle's own gate-level netlist: every load on all three is a combinational cell input, and no flop clock pin is driven by any of them. Their slack is absorbed: setup closes with +8.023 ns of margin on a 55 ns period and hold with +0.190 ns, TNS 0.0, in every corner — and setup slack improved at all nine corners against the 08-19 configuration. A datapath net one or two over the limit costs transition time on combinational paths that have that margin to spend. A clock-tree leaf over the limit is a different object — it lands on skew and insertion delay for every flop beneath it — which is why the 08-19 design's 111 clock-leaf violators were the thing worth fixing, and CTS_SINK_CLUSTERING_SIZE = 10 removes all 111.

The count changed with this bundle, and it is attributable. The 2026-08-28 council accepted at most one datapath violator at fanout 11–12, zero clock-leaf as the criterion for this configuration. This bundle reports three. Measured, not assumed: the previous configuration's RTL re-hardened under this bundle's own toolchain reproduces its earlier signoff on all 322 metrics, so the increase is caused by the fetch_owed repair in busadapt8.v and not by the build environment. The repair's own net is fanout 1; the additional violators are a placement consequence of one added flip-flop, not a fanout its logic demands. On 2026-09-06 the count clause was amended to at most three datapath violators in the 11–12 band, zero clock-leaf unchanged, and this bundle meets the amended criterion. The provenance of that amendment, recorded because a signoff criterion changed without one is worth less than the criterion it replaces: the Captain ruled "ship (B)" on 2026-09-06 and that ruling covered the ship only; the count clause was not put to him, and it took the helm's stated default-if-silent, which was the lead's own recommendation. The zero-clock-leaf clause was neither amended nor at issue — and it is the clause this section calls the serious one.

Why the previous bundle carried no such note. The 08-19 submission documents the design as fabricated, in which none of these three violators exists and the fanout count is 117. A note naming three accepted violators would have told a reader that the fabricated part has three; it has 117. Artifact and evidence describe the same chip at the same time, or they do not travel together — so this note ships with the configuration it measures, and not before.

External hardware

None. The design needs no external hardware: drive the pins directly, or from a microcontroller if you want to stream frames faster than by hand.

IO

#InputOutputBidirectional
0instr_byte[0] — CPU memory busaddr_byte[0] — PC bytes, 4 phasesphase_o[0] (out): phase strobe
1instr_byte[1] — CPU memory busaddr_byte[1] — PC bytes, 4 phasesphase_o[1] (out): phase strobe
2instr_byte[2] — CPU memory busaddr_byte[2] — PC bytes, 4 phasesedge_in_data (in): packet port, weights/inputs
3instr_byte[3] — CPU memory busaddr_byte[3] — PC bytes, 4 phasesedge_in_valid (in): packet port, weights/inputs
4instr_byte[4] — CPU memory busaddr_byte[4] — PC bytes, 4 phasesedge_out_data (out): packet port, results
5instr_byte[5] — CPU memory busaddr_byte[5] — PC bytes, 4 phasesedge_out_valid (out): packet port, results
6instr_byte[6] — CPU memory busaddr_byte[6] — PC bytes, 4 phasessof (in): non-destructive frame re-align; rst_n is DESTRUCTIVE once the die carries state
7instr_byte[7] — CPU memory busaddr_byte[7] — PC bytes, 4 phasesvalid (out): payload-window flag; phase recovers from its rising edge, which uniquely names cycle 6 of a 14-cycle frame

Chip location

Controller Mux Mux Mux Mux Mux Mux Mux Mux Mux Mux Analog Mux Mux Mux Mux Mux Mux Mux Mux Mux Mux Analog Mux Mux Mux Mux Mux Mux Mux Mux Mux Mux tt_um_chip_rom (Chip ROM) tt_um_factory_test (Tiny Tapeout Factory Test) tt_um_teuscher_eml_fabric (EML Fabric — analog exp/ln compute cells) tt_um_wokwi_465656663515438081 (Convert binary to hex on 7 segments) tt_um_nikita_face_detect (FPGA Face Detection) tt_um_obstacle_avoider (Obstacle Avoider State Machine) tt_um_poket_animal (Poket Animal) tt_um_drewbabel_uart (Configurable FIFO-buffered UART with APB CSR) tt_um_wokwi_469163916296039425 (TT Workshop Test) tt_um_jonahsaunders_slsvga (tt_um_jonahsaunders_slsvga) tt_um_fatigue_monitor (Fatigue Monitor (PPG Pulse-Interval Variability)) tt_um_vedam_dual_port_ram (Dual Port RAM) tt_um_wokwi_469739097665887233 (Tiny Tapeout Template Copy) tt_um_spdif_to_i2s_kilpelaj (S/PDIF to I2S receiver) tt_um_morse_converter (ASCII to Morse Code Converter) tt_um_wokwi_469806914724000769 (Spin, Text and VGA) tt_um_wokwi_469701770572338177 (TinyTapeout) tt_um_garnetkoebel_communotron (Communotron) tt_um_wokwi_469449970323169281 (full adder) tt_um_duzabf_2026_ow (A WIP Online Workshop 2026 project) tt_um_wokwi_469807513638180865 (Tiny Tapeout NAK) tt_um_ttsky26c_oguz (ttsky26c-202607-mehmetoguzderin by Oguz) tt_um_kashif_fp4_sparse_tpu (FP4 Sparse Mini-TPU) tt_um_moein_maleki_arm16 (arm16) tt_um_wokwi_469453454643027969 (ON Check System) tt_um_felixcheng_neural_core (Neural Compute Core (V0.15)) tt_um_wokwi_469788774011248641 (Spin Display - select-reset-reverse) tt_um_wokwi_469449443070765057 (Samuel's first chip) tt_um_wokwi_469449007236383745 (testinttrsv01) tt_um_vga_ca (VGA cellular Automaton) tt_um_dosci_500hz (Digital Oscillator 500 Hz) tt_um_wokwi_469747443569078273 (XOR test project - Tiny Tapeout workshop) tt_um_wokwi_469585758593419265 (spinner) tt_um_fp16_mac (FP32 Math Unit) tt_um_1DC_vga_dyoa (VGA Design Your Own ASIC) tt_um_haydenevans_top (Systolic Processing Element) tt_um_wokwi_469806252715961345 (TT_Proj_SA) tt_um_wokwi_469448996577604609 (Tiny Tapeout - Reto) tt_um_ehofmannbr_pmodvga_06 (VGA Color Tiles) tt_um_lfglabs_lsc1u (leanSilicon LSC-1 Micro arithmetic kernel) tt_um_wokwi_469804280240495617 (Zetterling SRAM) tt_um_wokwi_469806066852696065 (TileTestchase) tt_um_wokwi_469449118072978433 (binary_add_v1) tt_um_voltage_amplifier_neuron (Voltage Amplfier Neuron) tt_um_wokwi_469449686545956865 (Tiny Tapeout Template Copy_JinoShiono) tt_um_wokwi_469448887171240961 (Tiny Tapeout - Mini CORDIC) tt_um_wokwi_469809033878555649 (Tiny Tapeout Yummy Chip - bgianfo) tt_um_sirajmuhammad_bpsk_mod (BPSK Baseband Modulator) tt_um_K_coder_9 (TENs device frequency controller) tt_um_wokwi_469758119198926849 (LL_6BitShiftRegister_ToggleEnabledFeedback) tt_um_Asaadkhex_6x6u (6x6 UART Bussbar Switch) tt_um_wokwi_469809198944364545 (tt8-8bit-cpu Copy) tt_um_wokwi_469710279607305217 (Tiny Tapeout Submission KL - SiliDize) tt_um_wokwi_469629799092815873 (2:1 Mux with differential outputs) tt_um_poundbrad_reciprocal_counter (Two-Channel Reciprocal Counter) tt_um_joonatanalanampa_cordic (CORDIC-1) tt_um_x4ntha_nova (Data General Nova 1200 CPU) tt_um_quick_bus (quick_bus) tt_um_wokwi_470058539448408065 (Nigel's Tiny Tapeout Project) tt_um_wokwi_470058244557293569 (Tiny Tapeout Kabisan) tt_um_wokwi_470058241869790209 (Abdi's desgin) tt_um_wokwi_470060107756808193 (Sukhraj Deol's Chip) tt_um_wokwi_470058578588614657 (The Chip of Master George Stead) tt_um_wokwi_470069286344622081 (Tiny Tapeout ISHA) tt_um_ucl_display (Flashing... lights) tt_um_wokwi_470058746279043073 (Arihant's first Wokwi design) tt_um_wokwi_470060103260512257 (Tiny Tapeout Jabriel Copy) tt_um_wokwi_470069460157662209 (haadi's tiny tapeout) tt_um_wokwi_470058418706939905 (Kitty) tt_um_wokwi_470058490118136833 (Iris) tt_um_wokwi_470060098828179457 (Temz_ tiny tapeout) tt_um_wokwi_470058023187099649 (Osman WOKWI project 1) tt_um_wokwi_470057988621827073 (Viraj Tiny Template Full Adder TEST) tt_um_wokwi_470069802034377729 (Tiny Tapeout Template Copy) tt_um_wokwi_470070136685362177 (full adder) tt_um_wokwi_470070449402211329 (Anastasia Copy (2)) tt_um_wokwi_470059864883484673 (Keyaan’s first Wokwi design) tt_um_wokwi_470071200164912129 (full adder tiny tapeout Copy) tt_um_wokwi_470060671178857473 (SBUSixth First Chip Design Mentored by Tiny Tapeout) tt_um_wokwi_470099562753182721 (Isaac Tiny Tapeout) tt_um_wokwi_470120538476737537 (efwz8voices) tt_um_lelo_gr01_analogicus (LELO-GR01) tt_um_lelo_gr04_analogicus (LELO-GR04) tt_um_lelo_gr02_analogicus (LELO-GR02) tt_um_pump_out (60 Hz RMS Pump-Out Controller) tt_um_urish_simon (Simon Says memory game) tt_um_lelo_gr03_analogicus (LELO-GR03) tt_um_wokwi_470299374901578753 (Shrimp) tt_um_vga_clock (VGA clock) tt_um_frequency_counter (Frequency counter) tt_um_z2a_rgb_mixer (RGB Mixer demo) tt_um_mattvenn_r2r_dac_3v3 (Analog 8 bit 3.3v R2R DAC) tt_um_rebeccargb_universal_decoder (Universal Binary to Segment Decoder) tt_um_rebeccargb_hardware_utf8 (Hardware UTF Encoder/Decoder) tt_um_rebeccargb_intercal_alu (INTERCAL ALU) tt_um_rebeccargb_vga_pride (VGA Pride) tt_um_ogggggish_ota_ldo (SSF Capless LDO) tt_um_hariri4534_audioplayback (audioplayback) tt_um_wokwi_470637150792846337 (Joni - Tiny Tapeout Teardown2026 Workshop) tt_um_wokwi_470635013242210305 (Tom's first Wokwi design) tt_um_wokwi_470635780983408641 (Tiny Tapeout-AyeshaTeardown26) tt_um_wokwi_470639152626282497 (KeKoaM Tiny Tapeout) tt_um_wokwi_470637073520124929 (Tiny Tapeout workshop) tt_um_toby43479_iox (IO Expander with PWM) tt_um_wokwi_470635764113915905 (Divider Demo) tt_um_wokwi_470635580461052929 (Mann-teardown-project) tt_um_wokwi_470639672984256513 (KCs 001 TinyTapeout Design) tt_um_wokwi_470635507665754113 (Tiny Tapeout Template Copy) tt_um_wokwi_470637047364443137 (Pixel-Curio-Chip) tt_um_terihear_tinytearout (TinyTearout) tt_um_wokwi_470643025042834433 (TT 2026) tt_um_wokwi_470637360757626881 (Tiny Tapeout Template Copy) tt_um_wokwi_470635627278929921 (Tiny Tapeout Workshop) tt_um_wokwi_474471160110403585 (Cylon-Scanner) tt_um_wokwi_470646659230201857 (bloopbloop) tt_um_pthomas_sigma_delta (Continuous-Time Sigma-Delta ADC (1st order)) tt_um_sky_tpu_3x3 (Sky TPU 3x3) tt_um_tpcannon7_fir (tinyfir) tt_um_bruniliomuy_top (Fir_Filter) tt_um_semiqa_diff_opamp (Diff-In-Diff-Out-OpAmp) tt_um_TinyProcessor_naiyar_ (TinyProcessor) tt_um_CCDmos3D (ADC for CCDmos3D pixel) tt_um_snn_lif_neuron (snn_lif_neurons) tt_um_galaguna_NanoSys_fit (Nano-120_CPU@ler.uam.mx) tt_um_rowles_regime (Single-Bit Macro Regime Classifier) tt_um_rowles_fedmodel (The Fed Model (F1/F2)) tt_um_sky26c (tt_sky26c) tt_um_aka_regfile_ecc (regfile_ecc) tt_um_fwilson12_mac (int8 MAC) tt_um_davidbroughsmyth_ecg_sar12 (heart_monitor_adc_art) tt_um_foxworks_picorv32 (TCD Foxworks PicoRV32) tt_um_saltworks_ndf_c32 (Neural dataflow fabric — bit-serial MAC cells on a self-routing switch) tt_um_yjeum11 (DTMF (Touch-Tone) decoder) tt_um_vedic_mult (4-bit Vedic Multiplier) tt_um_atx_phased_interferometer (Acoustic Interferometer) tt_um_tilesos_dual_adc (Dual-Path Noise-Shaping ADC) tt_um_darga_cirom (Darga CiROM digital read + ternary MAC) tt_um_azara_cirom (Azara CiROM ternary read) tt_um_spi_reg_bank (8-bit Modified RISC-V) tt_um_aialaqili_updown_counter (4-bit Up/Down Counter) tt_um_noahzperez29_riscv_core (Noah RISC-V Core) tt_um_fp8_fpu (FP8 (E4M3) Floating-Point Unit) tt_um_costinemanuelv_gps_daily_trigger (GPS Daily Trigger) tt_um_ja_achtung_1x1 (JA Achtung Compact) tt_um_ja_achtung_1x2 (JA Achtung Full) tt_um_pwm_spice (spice-pwm-tapeout) tt_um_wecallemjazzyfact_bgr_ldo (BGR + LDO 3.3V/1.8V Integrated IP) tt_um_lelo_temp_wulffern (LELO-TEMP) tt_um_wokwi_472389622799861761 (3-Bit 101 Pattern Detector) tt_um_LnL_SoC (Lab and Lectures SoC) tt_um_dash_lucas_risc (risc_processor) tt_um_serdes_ephotonics (UCIe-style SERDES with analog TX driver & RX slicer) tt_um_joram200 (Kalman Filter Hardware Accelerator) tt_um_colbywonn_poly_synth (Poly Synth v1.0) tt_um_nobleg30_uart_vga_scroller (UART VGA Text Scroller) tt_um_multi_precision_mult (Multi-Precision Multiplier) tt_um_pratibha_munnangi_qkt_mac (QKT MAC Accelerator) tt_um_akankaan_bf16_fma (BF16 Fused Multiply-Add (FMA)) tt_um_rtfce (RTFCE - Reconfigurable Temporal Fault/Constraint Engine) tt_um_hdc_classifier (HDC Classifier) tt_um_preethi8a_adaptive_lfsr_prng (Self-Seeding Adaptive 16-bit Galois LFSR PRNG) tt_um_dilip951_cpu_systolic_array (Reconfigurable mixed-precision 2x2 systolic MAC array) tt_um_pqc_ntt_bfly (Crypto-Agile NTT Butterfly (ML-KEM / ML-DSA / FN-DSA)) tt_um_mlkem_coefficient_integrity (Fault-Aware Constant-Time FO Backend for ML-KEM) tt_um_vital_ap (VITAL-AP: Adaptive Pixel Register) tt_um_olaf8 (OLAF-8: Bounded-Memory Online Adaptive Fuzzy Inference) tt_um_Median_MAD (Streaming Median-MAD Estimator) tt_um_tnt_mosbius (tnt's variant of SKY130 mini-MOSbius) tt_um_undip_ann_q610 (UNDIP ANN Accelerator (SPI + bring-up self-test)) tt_um_cpu8 (CPU8) tt_um_vaishnavipatil5_configurable_cam (Configurable CAM with Masked Pattern Matching and Priority Resolution) tt_um_gina_env_monitor (Environmental Mapping Processor) tt_um_manasvibhat_bloom_filter (Bloom Filter Membership Tester) tt_um_amazing_sage_snn (LIF Neuron SNN) tt_um_nkanderson_lut_snn (LUT Spiking Network Classifier) tt_um_bigmanraffa_clm (Clementine: 4-lane int8 SIMT GPU) tt_um_adityarprasad_fft (Adaptive-Precision FFT) tt_um_oscillating_bones (Oscillating Bones) tt_um_silicon_edge_ns_sar_adc (NS SAR ADC) tt_um_sishi888_tinymind (TinyMind SoC) tt_um_afra_123_ecc_memory (Runtime-Reconfigurable ECC Memory) tt_um_kenchangh_mnist (MNIST Digit Recognition) tt_um_ece298a_8_bit_cpu_top (8-Bit CPU) tt_um_libormiller_SIMON_V2 (SIMON V2) tt_um_WaiMingLee888_nanov_1tile (NanoV RV32E one-tile RISC-V processor) tt_um_four_bit_nn_accel (4-bit Neural Network Accelerator) tt_um_rsa_simple (RSA Simple Encryptor) tt_um_synapticrw_lif_neuron (LIF Neuron (SynapticRW Teardown 2026)) tt_um_smunigan_ipv4_filter (IPv4 Header Filter) tt_um_jjy_spi_watchdog (SPI-Configurable Watchdog Timer) tt_um_osian_beam_controller (Programmable Metasurface Beam Controller) tt_um_namramazhar_popcnt_shiftreg (17-bit Wallace-tree POPCNT with shift-register input) tt_um_obookstay_puf (An arbiter PUF) tt_um_arminkardovic_montenegro_securekey (Montenegro SecureKey) tt_um_rcyaon_droop (All-Digital Supply Droop Detector) tt_um_ctw_spms (CTW-SPMS — Programmable Smart Power Management & Supervisor) tt_um_taiwoopesade_tempo_detector_sky26c (Hardware Audio Tempo Detector) tt_um_wokwi_470059878406973441 (Ehan's first TinyTapeout Project) tt_um_wokwi_470637170309995521 (My First Wokwi Thing!) tt_um_wokwi_470637401137246209 (Teardown Tiny Tapeout) tt_um_wokwi_469443433165025281 (Tiny Tapeout First Design Beth Plummer) tt_um_wokwi_472423526521678849 (4-bit to 5x7 Matrix Decoder for Tiny Tapeout) tt_um_wokwi_470057961258181633 (Tiny Tapeout Template Kavana) tt_um_wokwi_470057993933917185 (ivane- Tiny Tapeout (full adder)) tt_um_wokwi_470088776251343873 (training_project_kaylem) tt_um_neuropong (NeuroPong) tt_um_tamagotchi (TamaGotThis) tt_um_group02_seethebeat (SeeTheBeat) tt_um_kul_chromechain (Chrome Chain) tt_um_baked_weights (Baked-Weights Shakespeare GPT) tt_um_gilangfajrul_sar_adc (sar-adc) tt_um_Logy_FMAC (FMAC) tt_um_porkfreezer_rrio_opamp (RRIO Op-amp) tt_um_diff_engine (DSLX finite_difference) tt_um_dragonochi (WISH) tt_um_siliconsonics (ultrasonic sonar: range and bearing) tt_um_kul_conway (Interactive Conway's Game of Life) tt_um_algofoogle_ttsky26c_analog (Assorted analog in 1 tile) tt_um_mariavictoriaalm_qubit_sim ( tt-2qubit-sim) tt_um_andre_dpe (Dot product engine) tt_um_rmranjitkarNULL_pong_top (last_minute_Pong) tt_um_SAR_ADC (CTW LDO and Dynamic Comparator) tt_um_fabulous_sky_26c (Tiny FABulous FPGA) tt_um_tomvdsch_tiny32_soc (Tiny32 RV32IMA Zephyr-target SoC) tt_um_np523_pong (Pong) tt_um_usfq_adc_procmon (USFQ 8-bit Tracking ADC and Process Variation Monitor) tt_um_rangfuu_alu (Tiny ALU PD) tt_um_wokwi_473800139156677633 (Tiny Snake with PRISM 8) tt_um_mini_nn (Four-MAC Core Neural Network Inference Engine) tt_um_kianv_rv32_regfile (KianV uLinux RISC-V regfile edition) tt_um_2048_vga_game (2048 sliding tile puzzle game (VGA)) tt_um_urish_rings (VGA Rings) tt_um_silicon_art_vga_screensaver (VGA Screensaver with Silicon Art ROM) tt_um_rom_vga_screensaver (VGA Screensaver with embedded bitmap ROM) tt_um_krisjdev_manchester_baby (Manchester Baby) tt_um_urish_sic1 (SIC-1 8-bit SUBLEQ Single Instruction Computer) tt_um_ThomasCowieEngineering_LMC (Little Man Computer CPU) tt_um_pranavUl_ascon_aead128 (Ascon bit-serial permutation engine) tt_um_orca (ORCA — Online Reconfigurable Circuit with Adaptation) tt_um_krisjdev_artwork (Silicon Artwork) tt_um_htfab_caterpillar (Simon's Caterpillar) tt_um_htfab_vga_tester (Video mode tester) Available Available Available Available Available Available Available Available Available Available