878 Interactive Conway's Game of Life

878 : Interactive Conway's Game of Life

Design render

Note: links are embedded in the pdf and are in italic.

Description

This project simulates Conway's Game of Life. Conway's Game of Life is a classic cellular automaton simulation where cells on a grid live, die, or reproduce based on a small set of rules applied to their neighbors. Originally devised by mathematician John Conway, it demonstrates how complex, evolving patterns can emerge from simple deterministic logic - no player input required once the initial state is set. Perfect for programming into a chip.

Features

  • 16x12 grid, 40 pixel cell size
  • User editable grid with movable cursor
  • User changeable simulation speed (0.25–20 Hz)
  • Two modes: 'torus' and 'bounded'
  • Pause/play button
  • Debounced input handling
  • VGA screen 640x480@60Hz

How it works

Input

There are four button inputs for moving the cursor up, down, left, and right. These buttons increment or decrement two counters in the row and column directions to determine the correct write address. A set button is used to toggle between a cell that is alive or dead. The start/stop button allows the simulation to be started or paused, while the cursor on/off button can be used to show or hide the cursor. The user can only edit the grid when the cursor is on. There are also buttons to increase or decrease the speed of the simulation, and a reset button. The final button toggles bounded board mode, which determines whether the simulation wraps around at the grid edges. All buttons are debounced and synchronized, this means that short mechanical bounce is filtered out and each button level is brought onto the system clock before it is used. The design therefore sees clean, stable inputs that all modules sample at the same time.

Pin Button Behaviour
ui_in[0] up move cursor up
ui_in[1] down move cursor down
ui_in[2] left move cursor left
ui_in[3] right move cursor right
ui_in[4] set toggle the selected cell between alive and dead
ui_in[5] start/stop start or pause the simulation
ui_in[6] cursor turn the cursor on/off
ui_in[7] board toggle between bounded and torus modes
uio_in[0] speed up increase simulation speed
uio_in[1] speed down decrease simulation speed
uio_in[2] reset reset the grid
uio_in[7] testing only for virtual simulation -> update grid every frame and disable debouncing

Memory

The register_board module stores the grid state using two complementary memories. board0 is a random access grid used by input, VGA, and logic to read and write cell states (0 = dead, 1 = alive). board1 is a shift register buffer that stores the previous grid iteration for logic computations; it uses a shift register instead of random access to reduce area overhead.

Both boards share data_in, write_enable, and data_out ports, with active_board_read and active_board_write multiplexing access. board0 uses indexed addressing (read_address_row, read_address_col, write_address_row, write_address_col) for random access, while board1 is controlled by toggle_read to shift through cells sequentially. When reading from board1, the module outputs the current cell via data_out and its eight neighbors via neighbour_out. manual_reset clears both boards to all zeros.

Logic

The logic module updates the grid during each VGA vertical sync (vsync) period, but only if the next_iter_countdown module indicates enough time has elapsed since the previous update. The countdown threshold is determined by the simulation speed setting (0.25Hz to 20Hz); a faster speed requires fewer clock cycles to elapse, while a slower speed requires more.

Each iteration consists of two phases tracked by L_controller. In the COPY phase, every cell from board0 is copied to board1. The L_rowcol_counter module scans through each cell sequentially, advancing to the next cell each clock cycle.

In the second phase, the next state of the grid is calculated based on board1 and written to board0. There are two variants of this phase, TORUS and BOUNDED. These refer to the two different ways to handle the edge of the grid. In BOUNDED, cells outside the grid are taken to be dead. In TORUS, the grid wraps around like a torus, so that for example above the top of the grid is the bottom of the grid. Just like in the COPY phase, L_rowcol_counter will go over every cell. The L_decider module takes in the value of the current cell and its neighbours, and outputs L_new_cel based on the rules of Conway's Game of Life: a dead cell with three living neighbours comes alive, an alive cell with two or three alive neighbours stays alive, all other cell die or remain dead.

The logic architecture is illustrated below:

Logic Architecture

VGA

VGA (video graphics array) is an old technology, which means that it is easy to interface with. There are many different graphics modes, but this project has chosen the most common: 640x480@60Hz. The timing diagram is shown below.

640x480 VGA screen timing diagram

The beam will be scanning the screen from left to right, top to bottom. At the end of each scan line (640 pixels), a syncing pulse must be timed correctly. This is the hsync signal in the code. After 480 lines, a vertical sync pulse must be timed correctly. This is the vsync signal in the code. These signals are generated by the vga_hvsync_generator module. These signals are then used by the other vga modules to show the correct pixels to the screen at the correct time, based on the cell states saved in memory. The architecture for VGA is shown below.

VGA architecture

The vga_hvsync_generator not only generates hsync and vsync signals, but also keeps track of the horizontal and vertical position on the screen in pixels (hpos and vpos). These are later used by the vga_get_cell_idx module. When the scanning beam is in the viewable screen area (not in the blanking area), the display_on wire is set to 1, otherwise it is set to 0. When the scanning beam is in the orange part of the screen (vertical sync pulse, see diagram), next_iter_allowed is set to 1 to allow for the logic to generate the next iteration of the simulation.

The vga_get_cell_idx module calculates the coordinates of the current cell in the grid, based on the position of the pixel on the screen. In addition to the cell's col_idx/row_idx, it also outputs pixel_col_offset and pixel_row_offset, which indicate the pixel position within that cell. This info is later used to draw the cursor icon correctly.

The cell index that vga_get_cell_idx generates is used in the vga_get_cell_type module to determine the cell type. Unlike a single mutually-exclusive state, cell_type is made up of two independent bits: bit 0 reflects whether the cell is alive or dead (pulled from memory, board0), and bit 1 indicates whether the cursor is currently positioned on that cell. The cursor is only active when the user is editing the grid (cursor_on); when it overlaps a cell, that bit is set regardless of whether the underlying cell is alive or dead.

Based on the cell type, the simulation running state, and the pixel's offset within its cell, vga_get_pixel_color calculates the correct output color. Eacht color channel (RGB) has two bits, resulting in a 6 bit color pallete. When the cursor bit is set, the module only shows blue for pixels that fall inside a diamond-shaped icon (computed from pixel_col_offset/pixel_row_offset); pixels outside the diamond fall through to the normal alive/dead coloring for that cell. Note that dead cells are only shown as black while the simulation is running; when running is false, dead cells are shown as grey instead so a paused/stopped state is visually distinguishable.

Description cell_type (binary) Pixel inside cursor icon running R G B Color
dead 00 1 00 00 00 black
dead 00 0 10 10 10 grey
alive 01 11 11 11 white
cursor on dead cell 10 yes 00 00 11 blue
cursor on dead cell 10 no 1 00 00 00 black
cursor on dead cell 10 no 0 10 10 10 grey
cursor on alive cell 11 yes 00 00 11 blue
cursor on alive cell 11 no 11 11 11 white

When testing, the TinyTapeout VGA trace visualizer from sylefeb proved to be very useful in visualising the VGA output from an .fst file.

The repository cocotb-vga from kul-tt2026 also proved invaluable when writing test benches for the entire project to visualise the VGA screen.

The VGA playground from Tiny Tapeout was incredible, because it could simulate in seconds what cocotb-vga took minutes. Click here for the link.

Connecting it all together

Everything is connected together with the project_controller and project_datapath modules. project_controller has four states: START, which can transition to DISPLAY, VGA's home territory. During NEXT_ITER, logic does its work and calculates the next state of the simulation. PAUSE is for when you want to take a closer look at what's happening.

It is important that the board doesn't change when VGA is still rendering the frame. Therefore, NEXT_ITER is only entered when VGA gives the next_iter_allowed signal. In a similar vein, input's actions only get written to memory when neither VGA nor logic is using it.

project_datapath connects all other modules together, and has some wiring to decide who can access the memory when. It also has the sim_speed and next_iter_countdown modules, which for given game speed that input can set counts down the time till a new NEXT_ITER can be started. The possible speeds are 0.25Hz, 0.5Hz, 1Hz, 2Hz, 4Hz, 8Hz and 20Hz. project_controller and project_datapath are best understood through the diagram below:

Project architecture

How to test

  1. Clock speed 25.175 MHz.

  2. Plug in the VGA Pmod connector.

  3. Connect all 11 buttons (active high), pulled low.

  4. Turn on the cursor (ui_in[6]).

  5. Use the buttons to draw your own board. Use the move buttons (ui_in[0-3]) to move the cursor, use the set button (ui_in[4]) to toggle a cell between dead and alive.

  6. Start with a glider or blinker.

    Glider:
    -------
    .O.
    ..O
    OOO
    
    Blinker:
    --------
    .....
    ..O..
    ..O..
    ..O..
    .....
    
  7. Press play (ui_in[5]) to start the simulation and let Conway's Game of Life come to life!

  8. Use the uio_in[0] button to increase the simulation speed and uio_in[1] to decrease it.

  9. Reset everything by pulling manual reset (uio_in[2]) high.

Note: uio_in[7] must be low to disable testing mode.

External hardware

IO

#InputOutputBidirectional
0button_upR1button_speed_sim_up
1button_downG1button_speed_sim_down
2button_leftB1button_reset
3button_rightvsync
4button_setR0
5button_start_stopG0
6button_cursor_on_offB0
7button_bounded_boardhsynctesting

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