742 Baked-Weights Shakespeare GPT

742 : Baked-Weights Shakespeare GPT

Design render

How it works

This chip writes text in the style of Shakespeare. It is a character-level language model, which means it reads one character at a time and guesses the next one. The whole model is baked into the silicon. There are no weight registers, no weight loading and no settings.

In this chip every weight is one of three values: -1, 0 or +1. Ternary weights are useful for two reasons. First, the hardware never has to multiply: it adds the input, subtracts the input, or skips it. Second, five weights fit in one byte, because 3 x 3 x 3 x 3 x 3 = 243 and a byte holds 256 values. That is 1.6 bits per weight. The chip holds 22,400 weights in 4,480 bytes of read-only memory (ROM) on the tile.

The chip is the body of a small transformer. This one repeats a group of three steps twice:

  1. RMSNorm. This scales the numbers so they stay in a sensible range. Its scale factors are baked in too.
  2. A minGRU mixer. This is the part that remembers. It mixes the new character into a small memory of everything before it. A gate decides how much of the old memory to keep. Most language models instead keep a list of every character so far, and that list grows. This memory does not grow. It is 80 bytes, and it stays on the chip.
  3. RMSNorm again, then an MLP. An MLP does two rounds of multiply-and-add. Between the rounds it applies one simple rule, called squared ReLU: negative values become zero, and the rest are squared.

Each group adds its result back into a running vector of 40 numbers. That vector is called the residual. A last RMSNorm produces the output.

The ROM sends out one byte at a time, and one byte holds five weights. So the arithmetic unit is 5 lanes wide. It uses all five weights of a byte at once. A ROM read takes two clocks. The sequencer, which is the control unit that steps through the model, starts the next read while the lanes work on the last one. No clock is wasted.

The chip does not do the whole job alone. The host — the microcontroller on the demo board — keeps the character and position tables, and it does the last step that turns numbers back into a character. The split looks like this:

char --> wte + wpe --> int16 residual --> [ CHIP ] --> int8 residual --> logits --> sample
         (host)           80 bytes                      40 bytes         (host)

In the diagram, wte and wpe are the tables that turn a character and its place in the text into numbers. The logits are the scores for every character that could come next. int16 means a whole number stored in 16 bits, and int8 means one stored in 8 bits.

The host sends 80 bytes, the chip sends 40 bytes back, and the host picks the next character from them. The character table is the one part that grows with the size of the alphabet. ROM on a tile is expensive, so that table stays on the host. Most of the work still happens on the chip.

Configuration

Here is every number that describes the model.

quantity value
residual width E 40
transformer blocks L 2
MLP hidden width 2E = 80
arithmetic lanes 5
ternary weights 22,400
weight ROM 4,480 bytes: 4,096 bytes in the ROM block, plus 384 bytes built from ordinary logic
other baked constants 280 int8 values (RMSNorm scales and gate biases), a 256-entry sigmoid table, a 48x16 rsqrt table
quality 2.824 bits per character
input bytes per token (2E) 80
output bytes per token (E) 40
compute clocks per token 5,458
I/O clocks per token (3E) 120
total clocks per token 5,578
clock 45 ns, 22.222 MHz
speed 3,984 tokens per second, 251.0 µs per token

"Bits per character" says how good the guesses are, and lower is better. The figure is measured on Shakespeare text the model never saw while it was trained, with the same integer arithmetic the chip uses, and with the memory carried the whole way as it is on the chip.

The speed figure is the chip alone: 5,578 clocks at 45 ns each. It leaves out the work the host does and any delay in the wires.

Interface

There is one clock domain. Everything happens on the rising edge of clk, and no signal crosses between clocks anywhere in the design. rst_n is synchronous, so the clock must run for a reset to take effect. Hold rst_n low for at least 4 clocks with the clock running. ena must stay high for a whole token: switch it off between tokens, or leave it on.

Bytes move with a valid/ready handshake on uio. The sender raises valid when it has a byte, the receiver raises ready when it can take one, and the byte moves on the clock edge where both are high.

pin direction function
ui_in[7:0] in one byte of the input vector
uo_out[7:0] out one byte of the output vector
uio[0] in in_valid
uio[1] out in_ready
uio[2] out out_valid
uio[3] in out_ready
uio[4] in sot, start of sequence
uio[5] out dbg_busy
uio[6] out dbg_rx
uio[7] out dbg_tx

uio_oe is the constant 8'b1110_0110. The three dbg_* pins show which phase the chip is in. Exactly one of them is high at any time.

Because the chip waits for the host and the host waits for the chip, a slow host is safe. Nothing in the protocol times out.

One token

One token is one character. It takes three phases, and they do not overlap. They cannot overlap, because the chip must finish one character before it knows the next one.

  1. Input: 40 values x 2 bytes = 80 bytes. Send value 0 first, and send the high byte of each value first. Each pair of bytes is a signed 16-bit whole number that stands for a fraction. Divide it by 32 to get the real value. The chip stores only 14 bits of each value. So the host must clamp every value to the range -255.97 to +255.97 before it sends it. The chip cuts the extra bits off; it does not clamp for you.
  2. Compute: 5,458 clocks. dbg_busy is high the whole time. Wait for out_valid instead of counting clocks.
  3. Output: 40 bytes, value 0 first. Each byte is a signed 8-bit whole number with 2 fractional bits, so divide it by 4. Values run from -127 to +127. The chip never sends -128.

sot means "start of text". The chip reads it with the first byte of a token. It clears the mixer memory, and nothing else clears it. Set sot for the first character of a piece of text, and clear it for every character after that.

Weight ROM

The 4,480 weight bytes do not fit in one ROM block, so bytes 0 to 4,095 sit in the ROM macro and bytes 4,096 to 4,479 sit in a small tail built from ordinary logic. A macro is a piece of layout that is drawn in advance and dropped into the chip as one part. Both parts return a byte after the same number of clocks. Any address above the last real byte reads the byte 0x79, which decodes to five zero weights.

The ROM macro is a derived work of an Apache-2.0 layout by Sylvain Munaut ("tnt", 246tnt), released in smunaut/ttsky25a-tv-b-gone-eu. Only the programmed bit pattern was replaced. The row decoder, the bitline circuit, the output drivers and the pin positions are reused as they are. See macro/NOTICE.md for the full attribution.

Silicon

quantity value
tile 4x4, 682.64 x 511.36 µm
process SkyWater 130 nm (sky130A)
clock period 45 ns
estimated power about 1.1 mW. This comes from the design software, not from a real chip

What is measured, and what is not

The chip has not been tested on silicon, because it has not been manufactured yet.

How to test

The chip needs a host that drives the byte protocol on its pins. The reference host is the RP2350B microcontroller on the Tiny Tapeout demo board.

With the reference firmware. The firmware does the parts of the model that are not on the chip: it turns a character into the 80 input bytes, and it turns the 40 output bytes back into a character. A small dedicated unit inside the microcontroller makes the chip's clock, so the clock and the data can never drift apart.

  1. Build the firmware and copy the .uf2 file it produces onto the board. The build must name the same trained model that the ROM holds. It sets the model size, the number format and the set of characters. If it does not match the silicon, the link hangs instead of reporting an error.
  2. Select this project on the demo board. The firmware clocks the chip at 21.43 MHz, not 22.222 MHz. The RP2350 can only divide its own 150 MHz clock by whole numbers, and 7 is the smallest divider that keeps every chip clock at or above 45 ns. Any slower clock also works, because nothing in the protocol times out.
  3. Connect to the board over USB. It gives you a text prompt. Type info to see which model is on the chip and how fast it is clocked. Type gen 400 KING RICHARD III: to make 400 characters of Shakespeare-like text.
  4. Type clksweep to find the fastest clock the chip is happy with. The command tries one divider after another and reports where the link starts to fail.

A test with no firmware at all. Hold in_valid and out_ready high, clock the chip, and watch uio[7:5]. The high bit must walk from dbg_rx to dbg_busy to dbg_tx and back. That shows the sequencer is running, and it needs only a logic analyser.

If the link stops, read uio[7:5] first. Stuck with dbg_rx high means the host sent too few bytes. Stuck with dbg_tx high means the host read too few. A reset clears it.

External hardware

None. The project needs only the Tiny Tapeout demo board. The RP2350B on the board is the host, and it drives the link through the standard input, output and bidirectional Pmod headers.

A logic analyser on uio is useful during bring-up, but it is not required.

IO

#InputOutputBidirectional
0data_in[0]data_out[0]in_valid (host drives)
1data_in[1]data_out[1]in_ready (chip drives)
2data_in[2]data_out[2]out_valid (chip drives)
3data_in[3]data_out[3]out_ready (host drives)
4data_in[4]data_out[4]sot, start of sequence (host drives)
5data_in[5]data_out[5]dbg_busy (chip drives)
6data_in[6]data_out[6]dbg_rx (chip drives)
7data_in[7]data_out[7]dbg_tx (chip drives)

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