966 Goose Game

966 : Goose Game

Design render

How it works

The Goose Game is a Chrome Dino-style endless runner game implemented in Verilog for Tiny Tapeout ASIC fabrication. The game features a goose character that must jump over obstacles (University of Waterloo emblem) that scroll across the screen. The design outputs RGB222 VGA video at 640x480 @ 60Hz resolution.

Architecture Overview

The design is organized into six main modules that work together to create a complete game system:

  1. goose_game_top.v - Top-level module that instantiates and connects all sub-modules
  2. game_controller.v - Central game logic including state machine, collision handling, obstacle spawning, and speed progression
  3. rendering.v - VGA rendering engine with sprite storage, layered compositing, and pixel-accurate collision detection
  4. jumping.v - Parabolic jump physics using lookup table with mirrored ascent/descent
  5. scroll.v - Horizontal scrolling logic with configurable speed levels
  6. hvsync_generator.v - VGA timing signal generation (hsync, vsync, display_on)

System Flow

System Block Diagram

Key Design Specifications

  • Clock Frequency: 25 MHz (VGA pixel clock)
  • Resolution: 640x480 @ 60Hz
  • Color Depth: RGB222 (2 bits per channel, 64 total colors)
  • Game Area: Ground positioned at Y=240
  • Goose Sprite: 16×16 ROM (displayed as 32×32 pixels)
  • Obstacle Sprite: 40×48 pixels (University of Waterloo emblem)
  • Jump Height: 104 pixels maximum
  • Speed Levels: 8 discrete levels (0-7) with progressive difficulty

Module Responsibilities

Game Controller (game_controller.v)

Manages the overall game state and logic:

  • Implements game state machine (running, game over)
  • Manages obstacle position cycling (700 pixel cycle)
  • Handles collision detection input and game over state
  • Implements speed progression system (8 levels, increments every ~5 seconds at 25MHz)
Rendering Module (rendering.v)

The VGA rendering engine that generates all visual output:

  • Stores goose sprite in packed ROM format (16x16, 3-bit color indices)
  • Renders University of Waterloo emblem procedurally
  • Implements layered compositing system (goose > obstacle > floor dots > floor > sky)
  • Performs pixel-accurate collision detection by checking layer overlap
  • Generates scrolling ground texture with dotted pattern
  • Handles game over visual feedback (goose turns red)
Jumping Module (jumping.v)

Handles the goose's vertical movement:

  • Implements parabolic jump trajectory using 26-entry lookup table with frame mirroring
  • Manages jump state machine (grounded, in-air, jump complete)
Scroll Module (scroll.v)

Controls horizontal obstacle movement:

  • Generates horizontal scroll position counter
  • Implements 8-level speed system with period lookup table
  • Halts scrolling when game over is detected
HVSync Generator (hvsync_generator.v)

Generates VGA timing signals:

  • Produces VGA timing signals per the standard
  • Horizontal: 640 display + 16 front porch + 96 sync + 48 back porch = 800 total
  • Vertical: 480 display + 10 front porch + 2 sync + 33 back porch = 525 total
  • Provides pixel position outputs (hpos, vpos) for rendering engine

Key Design Challenges and Solutions

Challenge 1: Scaling Difficulty Without Excessive Storage

Problem: Implementing progressive difficulty scaling was challenging without consuming significant storage area. Simply increasing scroll speed would make the game harder, but this created a secondary issue where the goose would jump too far relative to the faster obstacles, making the game progressively easier instead of harder.

Solution:

  • Scroll Speed LUT: Implemented a simple lookup table to decrease scroll periods as speed level increases, making obstacles move faster across the screen
  • Reusing Scroll Period for Jump: To keep jump feel consistent and avoid the cost of another LUT for jump speed, we reused the current_period value from the scroll lookup table and applied an inexpensive bit shift operation (jump_speed = scroll_period << 1) to scale the jump animation speed proportionally
  • This solution required minimal additional storage (just the LUT) while solving both the scroll speed and jump timing issues simultaneously
Challenge 2: Maximizing Obstacle Spawning Frequency

Problem: Initially attempted to have multiple emblems on screen simultaneously to increase difficulty, but this dramatically increased area utilization due to the need to store position data for each additional obstacle.

Solution:

  • Single Obstacle with Frequent Spawning: Instead of multiple obstacles, we tuned the spawning parameters to spawn a new obstacle as soon as the previous one despawns
  • By carefully tuning the OBSTACLE_CYCLE parameter (700 pixels), we ensure only one obstacle is on screen at a time, but it appears very frequently
  • This approach, combined with the speed progression system, provides increasing difficulty without the area cost of storing multiple obstacle positions
Challenge 3: Efficient Collision Detection

Problem: Collision detection needed to be pixel-accurate and area-efficient, working seamlessly with the rendering system.

Solution:

  • Layer-Based Metadata: Leveraged the existing layered rendering approach to generate collision metadata naturally
  • Each sprite sets a layer bit when it occupies a pixel during rendering
  • Collision is detected combinatorially by checking if both goose and obstacle layers are active: collision = layers[LAYER_GOOSE] & layers[LAYER_OBSTACLE]
  • This reuses the rendering logic rather than requiring separate collision detection hardware
Challenge 4: Jump Trajectory Storage Optimization

Problem: Storing a complete parabolic jump trajectory for 50 frames would require significant ROM area.

Solution:

  • Mirrored Trajectory: Stored only the left-hand (ascending) side of the parabolic motion
  • Used frame mirroring to generate the descending side: for frames 26-49, we mirror the corresponding ascending frame
  • This reduces storage from 50 entries to 26 entries while maintaining a smooth, natural parabolic jump feel
Challenge 5: Sprite ROM Storage Optimization

Problem: Storing sprite pixel data in ROM consumes significant area. The goose sprite (16×16 pixels) would require substantial storage if each pixel's color data was stored naively.

Solution:

  • Packed ROM Format: Instead of storing full RGB values or wide color indices, we store 3-bit color indices packed into wide registers
  • Each row of the 16×16 sprite is stored as a single 48-bit register (16 pixels × 3 bits per pixel)
  • A palette function converts the 3-bit indices to RGB222 color values during rendering
  • This approach significantly reduces ROM width requirements compared to storing full color data

Design Trade-offs

In pursuit of fitting the design onto the Tiny Tapeout square, several features were sacrificed:

  • Sound effects: Audio output was not implemented to save area

  • Score tracking: Score tracking was not implemented to save area

  • High score tracking: No persistent high score storage

  • Custom ground texture: Simplified to basic floor with minimal scrolling dots pattern

  • Higher quality sprites: Sprites kept small (16×16 for goose) and simple to minimize ROM area

  • Multiple obstacles: Only one obstacle on screen at a time to avoid storing multiple position registers

  • Jump Trajectory: Used lookup table instead of real-time physics calculation. Saves area and ensures consistent, predictable jump behavior, but limits flexibility for different jump styles.

  • Speed Levels: 8 discrete speed levels provide noticeable progression without requiring complex continuous speed calculation. However, the speed system could be more progressive with finer granularity between levels, but this would require additional storage or more complex arithmetic.

How to test

Required Hardware Test Setup

  1. Hardware Connections:

    • Connect a TinyVGA PMOD to the output pins (uo_out[7:0])
    • Connect the TinyVGA PMOD to a VGA monitor
    • Connect push buttons to:
      • ui_in[0]: Jump button (active-low)
      • ui_in[1]: Reset button (active-low)
    • Provide 25 MHz clock to clk input
    • Connect active-low reset to rst_n input
  2. Power On:

    • Apply power to the Tiny Tapeout chip, and activate the rst_n input
    • The game should start automatically after reset

Testing in Software Simulation

Verilator Visual Simulation

The primary testing method is the Verilator-based visual simulation, which provides real-time gameplay. Ensure you have all the necessary libraries, then run the following commands:

cd verilator
make all
./goosegame

Controls in Simulation:

  • SPACE or = Jump
  • R = Reset game
  • ESC = Quit

What to Verify per Test Run:

  • Game starts automatically on reset
  • Goose jumps when jump button pressed
  • Obstacles scroll from right to left smoothly
  • Collision detected when goose hits obstacle
  • Game over state stops scrolling and turns goose red
  • Reset button restarts game correctly
  • Speed increases over time (noticeable after ~5 seconds)

Test Infrastructure

Verilator Testbench (verilator/goosegame_tb.cpp)
  • Provides visual simulation with SDL2
  • Allows real-time button input via keyboard
  • Displays RGB222 output expanded to ARGB format

Known Limitations of Pre-Tapeout Testing Mechanism

  1. Manual Testing Required: The Verilator simulation requires manual gameplay to verify features, making it difficult to systematically test higher speed levels and edge cases.
  2. Performance-Dependent Timing: Simulation speed varies with host machine performance. On lower-powered machines, the simulation runs slower than real-time, while on high-performance machines it may run faster, making timing-dependent verification inconsistent.
  3. Regression Risk: The lack of automated test cases means that if a feature is missed during manual testing, it may not be caught until a later test, increasing the risk of regressions.

External hardware

Required Hardware

  • TinyVGA PMOD: Connects to uo_out[7:0] for VGA output
  • VGA Monitor: Standard VGA display connected via TinyVGA PMOD
  • Push Buttons: Two active-low buttons connected to ui_in[0] (jump) and ui_in[1] (reset). External debouncing recommended but not strictly required.
  • Clock Source: 25 MHz (or 25.175 MHz) connected to clk
  • Reset Signal: Active-low reset connected to rst_n

Pin Mapping

Inputs
  • ui_in[0]: Jump button (bt1_n) - Active-low, press to jump
  • ui_in[1]: Reset button (game_rst_n) - Active-low, press to reset game state
  • ui_in[7:2]: Unused
  • clk: 25 MHz clock input
  • rst_n: Active-low system reset
Outputs (TinyVGA PMOD Format, RGB222, 64 Colors)

The uo_out[7:0] pins are mapped as follows:

  • uo_out[7]: HSync (Horizontal synchronization)
  • uo_out[6]: B0 (Blue LSB)
  • uo_out[5]: G0 (Green LSB)
  • uo_out[4]: R0 (Red LSB)
  • uo_out[3]: VSync (Vertical synchronization)
  • uo_out[2]: B1 (Blue MSB)
  • uo_out[1]: G1 (Green MSB)
  • uo_out[0]: R1 (Red MSB)
All bidirectional pins are unused.

Other info

Game Screenshots

Gameplay

Jumping

Game Over

Acknowledgements

  • ECE298a Staff: Prof. John Long, Refik Yalcin
  • a1k0n's TinyTapeout Submission: tt08-vgademo

Documentation for Goose Game - ECE298a Tiny Tapeout Project
Authors: Krish Patel, Sunnie Kapar

IO

#InputOutputBidirectional
0bt1_nR1
1game_rst_nG1
2B1
3VSync
4R0
5G0
6B0
7HSync

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 Analog Mux Mux Mux Mux Mux Mux tt_um_chip_rom (Chip ROM) tt_um_factory_test (Tiny Tapeout Factory Test) tt_um_oscillating_bones (Oscillating Bones) tt_um_wokwi_457142813149930497 (TinyTapeOut workshop) tt_um_wokwi_457311688017142785 (tiny tapeout test gates) tt_um_bfcpu (bfCPU) 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_wokwi_457215959798165505 (4-bit N frequency divider) tt_um_ppu_aebarthyi (simple_ppu) tt_um_riscyv02 (RISCY-V02) tt_um_pong (Pong) tt_um_LH_TapeoutMultiplier (tt_um_LH_TapeoutMultiplier) tt_um_wokwi_457571222315471873 (7 Seg C) tt_um_wokwi_457571216758012929 (Mikes Second) tt_um_wokwi_457569452934172673 (FirstTinyTapeoutWokwiProject) tt_um_wokwi_457571159626309633 (Tiny Tapeout V1) tt_um_wokwi_457577038845586433 (TinyTapeOut) tt_um_wokwi_457571280506256385 (Tiny tapeouts test gates) tt_um_wokwi_457576742418338817 (calculator) tt_um_wokwi_457571219715001345 (Ami's TT Logic Gates) tt_um_wokwi_457571067547656193 (Mikes First Wokwi design) tt_um_wokwi_457571453314827265 (Tiny tapeout one hot to seven segment display 1-8) tt_um_wokwi_457572218833202177 (4bit adder and hex converter) tt_um_wokwi_463741407580251137 (Lady's First Tapeout) tt_um_wokwi_457571138696714241 (jdisplayer) tt_um_wokwi_457570687900145665 (Tiny Tapeout Test Gates) tt_um_wokwi_457577511431565313 (Tiny Tapeout Test Gates) tt_um_wokwi_457571262875481089 (Tiny Tapeout) tt_um_wokwi_457571417674762241 (TamTries Tiny Tapeout) tt_um_wokwi_457571366985520129 (georgies wokwi design) tt_um_wokwi_457571701752981505 (WilfTT) tt_um_wokwi_457572875733692417 (First WOKWI Design) tt_um_wokwi_457571571887847425 (tiny tapeout gate test) tt_um_wokwi_457571352249873409 (First Wokwi design) tt_um_wokwi_457571405919170561 (Namo's first tapeout) tt_um_wokwi_457571339952163841 (OR Gate with NAND) tt_um_wokwi_457571188658258945 (Abishag's first Wokwi Design) tt_um_wokwi_457571426719781889 (Tiny) tt_um_wokwi_457571268900604929 (tiny tape GDS) tt_um_wokwi_457571949070179329 (Tom Haley Tiny Tape Out Design ) tt_um_alex_ha_192 (alex_ha_192) tt_um_wokwi_457577241913913345 (tiny tapeout test gates ) tt_um_wokwi_457571297367365633 (First Wokwi Attempt) tt_um_wokwi_457571363309211649 (idk yet) tt_um_wokwi_457571305740256257 (Work In progress title) tt_um_wokwi_457579594627462145 (TinyTapeoutProjectDefne) tt_um_wokwi_457571274041781249 (Tiny Tapeout Workshop by Kirsty Tan) tt_um_wokwi_457571233499594753 (Tiny Tapeout Workshop) tt_um_wokwi_457570205537212417 (Tiny Tapeout Test Project) tt_um_ojas_sharma_imperial_ttcpu (ttcpu 4-bit RISC microprocessor) tt_um_wokwi_457571271419289601 (chip one) tt_um_wokwi_457573490746716161 (Name Serial Printer) tt_um_wokwi_457569507958215681 (Tiny tapeout proj) tt_um_wokwi_457577929607958529 (Random 1st Attempt) tt_um_wokwi_457571438667259905 (PD+PFD+FreqDiv) tt_um_wokwi_457571602706552833 (Joe's first Wokwi design) tt_um_wokwi_457571471659666433 (Nicolas' first Wokwi design) tt_um_wokwi_457571148733696001 (Tiny Tapeout Workshop 1) tt_um_wokwi_457572520479222785 (Tiny Tapeout: Buenos días Mundo! ) tt_um_wokwi_457571494688497665 (First Chip) tt_um_wokwi_457571341266031617 (D-Type Flip Flop) tt_um_wokwi_457581344351934465 (WOKWI) tt_um_wokwi_457571462196267009 (Tiny Tapeout) tt_um_wokwi_457571359410603009 (TinyTapeout) tt_um_Terdoo_Osu (Spiking Pattern Recognition Core) tt_um_wokwi_457571319408448513 (Mani TinyTapeout) tt_um_wokwi_457571298662360065 (Tiny Tapeout Test Gates) tt_um_wokwi_457573015156590593 (Lil tapeout) tt_um_wokwi_457576363047649281 (Inverter) tt_um_wokwi_457571216488527873 (Tiny Tapeout Template Copy Paul 1) tt_um_wokwi_457571472208072705 (Tiny Tapeout Test design) tt_um_wokwi_457571381968631809 (Tiny tapeout test) tt_um_wokwi_457571314694049793 (Tiny Tapeout Test) tt_um_wokwi_457571368009979905 (Tiny Tapeout Test Gates) tt_um_wokwi_457571389542502401 (First thing) tt_um_wokwi_457570267471381505 (Tiny Tapeout) tt_um_wokwi_457571563051492353 (CS First Wokwi design) tt_um_wokwi_457577392775721985 ( tiny Tapeout Test Gate) tt_um_wokwi_457570279596067841 (Tiny Tapeout Workshop - AJJ) tt_um_wokwi_457571180646081537 (Alins Password) tt_um_wokwi_457572360568198145 (Tiny Tapeout) tt_um_wokwi_457571270578328577 (Tiny tapeout workshop) tt_um_wokwi_457581625098771457 (Tiny Tapeout First Test Run) tt_um_wokwi_442342513281875969 (First Design) tt_um_wokwi_457581848269362177 (Tiny Tapeout Brainf*ck?) tt_um_sap_alexanderholden (sap1) tt_um_wokwi_457571752214675457 (3bit_ALU) tt_um_wokwi_457571542558115841 (Tiny Tapeout") tt_um_wokwi_457573095390500865 (Tiny Tapeout Workshop Counter) tt_um_wokwi_457571511812802561 (Akash's first Wokwi design) tt_um_wokwi_457577563633889281 (Tiny Tapeouts gate tests) tt_um_wokwi_457576950671858689 (Hymns_GDS) tt_um_wokwi_457571371384299521 (Digital digit display circuit - TINYTAPEOUT) tt_um_rowantylerr_RC_TDC (Resistor Capacitor TDC) tt_um_wokwi_463662181299058689 (2 bit ALU) tt_um_chinghey (Hey FlexCompute-130) tt_um_8b10 (serdes8b10) tt_um_rom_vga_screensaver (VGA Screensaver with embedded bitmap ROM) tt_um_mayamelon_top (Tiny PI Controller) tt_um_JAIMEPRYOR0_VGA_YAY (VGA_YAY) tt_um_2048_vga_game (2048 sliding tile puzzle game (VGA)) tt_um_mng2_2ncos (A Tale of Two NCOs) tt_um_shimmydee_checkers (One-tile ADC) tt_um_urish_simon (Simon Says memory game) tt_um_dheeeraaj_sine_chirp_beacon (DDS Sine Chirp Beacon) tt_um_nicholas_ls194a (Universal Shift Register (SN74LS194A compatible)) tt_um_BellaB05_Hearts (Pink Hearts) tt_um_scottshuynh_ad_astra (ASIC Ad Astra) tt_um_liamolucko_vga (VGA demo) tt_um_lledoux_s3fdp_seqcomb (S3FDP Seq+Comb Stream Core) tt_um_5482582_cat_vga (Cat VGA) tt_um_vga_example_directional_toggle (Directional toggle of VGA playground example) tt_um_jimbok_ro_puf (Ring Oscillator PUF) tt_um_xxsahanaxx_hwsec_glitch (Hardware Security Glitching Attack) tt_um_NguyenHuuHenry_vga_project (VGA_Project) tt_um_irfantekin_analog (tt_um_irfantekin_analog) tt_um_chicagojones_sky26a_trng (Sky26a Advanced TRNG) tt_um_yen (YEN) tt_um_pedometer (Ultra Low Power Pedometer ASIC) tt_um_analog_atenfyr1 (Configurable Self-biasing Miller-compensated OTA) tt_um_aes_sbox (Formally-Verified Constant-Time AES S-Box) tt_um_tcpu_alienflip (tcpu) tt_um_nebula (Sierpinski Fractal Starfield) tt_um_zenith_tx26 (Zenith TX26) tt_um_odgrip_demoscene_ttsky26a (My first demoscene) tt_um_vighnesh_sawant_plane (Plane with a banner) tt_um_glyph_mode_hd (Glyph Mode HD) tt_um_TSARKA_TinyQV (TinyQV Wishbone SoC) tt_um_SimpleCounter (Simple Counter) tt_um_cfar_nobuzzer (CFAR Detector without Buzzer) tt_um_present (Present) tt_um_top (Approximate Logic Unit) tt_um_goose (OIIA-goose) tt_um_riscv_core (Tiny RISC-V) tt_um_dac_test3v3 (Design and Implementation of R-2R Ladder DAC for GPR Application) tt_um_tadc_its (Time Domain ADC) tt_um_algofoogle_vga_matrix_dac (Analog VGA CSDAC experiments) tt_um_jyblue1001_pll (Analog-PLL) tt_um_axi4lite2x2_top (AXI4-Lite 2M-2S Interconnect) tt_um_systolic_top (4x4 Systolic Matrix MAC Accelerator) tt_um_goose_game (Goose Game) tt_um_rongbin99_happyredmapleleaf_audio_chip (Audio Wave Generator Chip) tt_um_fp_id (FinSec-1: AS-68M Fingerprint Verification ASIC) tt_um_game_of_life (Demoscene: Game of Life) tt_um_ds_missile_command (Missile Command) tt_um_cmos_inverter (Reactive Plasma: CMOS Inverter) tt_um_nightplumeaki_tinypipcore (tinypipcore) tt_um_immrudul_w7khan (Mrudul and Wahhaj Demoscene F2025) tt_um_sohamgovande_transformer (Transformer) tt_um_isa084_uart_servo (UART Positioning PWM Interface) tt_um_wokwi_461265571826974721 (Bias Correction Filter) tt_um_8_bit_cpu (8-bit CPU) tt_um_richad (ADPPLS) tt_um_algofoogle_dottee (DOTTEE VGA demo) tt_um_sar_fms (SAR FSM) tt_um_kolontsov_journey (Journey) tt_um_fft_adityaamehra (64 Sample FFT ASIC) tt_um_lambda_clock (Lambda Clock) tt_um_ece298A_analog (ECE298A analog tile) tt_um_toivoh_demo (Orion Iron Ion [TTSKY26a demo competition]) tt_um_kilian_interference (Wave Lattice) tt_um_fabulous_sky_26a (Tiny FABulous FPGA) tt_um_Rats2012_WobblyBits (WobblyBits - A probabilistic computing chip) tt_um_rebelmike_asic_odyssey (2026: An ASIC Odyssey) tt_um_huyatieo_tinyqv_speck (Speck-V SoC) tt_um_mosbius (mini mosbius) tt_um_remedy_cpu (FFD16 cpu 16-bit) tt_um_vga_ocarina (Ocarina on VGA) tt_um_TinyGPU_v3 (Tiniest GPU V3) tt_um_santhosh_ring_osc (Ring Oscillator PVT Sensor & TRNG) tt_um_santhosh_xbar_ctrl (Memristive Crossbar Peripheral Controller) tt_um_santhosh_stdp_ctrl (Digital STDP Learning Controller) tt_um_santhosh_stoch_neuron (LFSR-Based Stochastic Neuron) tt_um_anweiteck_ldo (1V-LDO) tt_um_sriaxi4lite_top (Axi4_Lite) tt_um_bch_code_15_7_2 (Bose-Chaudhuri-Hocquenghem Code) tt_um_mastensg_ttsky26a_demo (Luz) tt_um_pakesson_vga_rocket (VGA Rocket) tt_um_adpll (ADPLL - All-Digital Phase-Locked Loop) tt_um_Bingyao_FCOTA (Self biased Single Ended Folded Cascoded OTA) tt_um_spacewar_top (Spacewar) tt_um_microlane_demo (microlane demo project) tt_um_NE567Mixer28 (ECG Front End) tt_um_wakita_mux8onehot_cap (Mux8onehot Pulldown Mosfet) tt_um_johshoff_metaballs (Metaballs v2) tt_um_tomvdsch_cyclonerunner (CycloneRunner) tt_um_lowprocess_wildcamping (PicoMIPS CPU) tt_um_canvas (Tiny Canvas) tt_um_snrlxd1068_MACs (Linear and Logarithmic MACs) tt_um_pakesson_simon64_128 (SIMON64/128) tt_um_AmitChen1415 (Tiny Blackjack) tt_um_ole_moller_double_dabble_SV (double_dabble_SV) tt_um_toivoh_demo_1tile (Single tile demo [TTSKY26a demo competition]) tt_um_shiho_space_invaders (Tiny Space Invaders) tt_um_analog_RO (Analog RO) tt_um_electron65_vga (VGA Clock Demo) tt_um_wokwi_457571266840151041 (3-Bit ALU) tt_um_katomata (Katomata - 1D Cellular Automata) tt_um_shimomi_analog (analog circuit) tt_um_toivoh_demo_4tile (Four tile demo [TTSKY26a demo competition]) tt_um_IEEE_open_silicon_FOSSEE (Ring oscillator VCO and Differential Amplifier) tt_um_lm_chip_top (Project Long Man: A Delay-Insensitive Interconnect) tt_um_AlephNaNsea_space_time_waves_and_filaments (Space-Time Waves and Filaments) tt_um_spacelizard_apu (Spacelizard APU) tt_um_wokwi_457569490272926721 (Letter S) tt_um_mau_top_4b (SIMD2 Math Accelerator Unit) tt_um_maze (Maze) tt_um_demoscenettsky (Algorithmic Pattern Generator) tt_um_wokwi_457572141968369665 (Arran's tinytapeout project) tt_um_maxluppe_ttsky26a_analog (Standard Digital Logic Cells Analog Comparator) tt_um_grammartile (GrammarTile) tt_um_bubble_sort (IEEE Bubble Sort Engine) tt_um_ahmed_nematallah_12_bit_adc (12-bit ADC) tt_um_bad_ode_plotter_vga (Bad VGA ODE Plotter) tt_um_wokwi_463706339714973697 (Demo 4-bit ALU 74181 variant) tt_um_wokwi_457569853853115393 (Jasper Tiny Tape Out Workshop) tt_um_wokwi_457560507752701953 (Osian Tiny Tapeout) tt_um_wokwi_457571501325987841 (Rola_Tiny Tapeout Template Workshop4Mar26) tt_um_wokwi_457571903121572865 (TT-wokwi-template) tt_um_wokwi_463380823859050497 (My_Name_on_7_Seg_display) tt_um_wokwi_457569584731832321 (Tiny Tapeout 9 Template Copy) tt_um_wokwi_457571826952995841 (Tiny Tapeout Novomorphic Design 1) tt_um_wokwi_457571349142937601 (Tiny Tapeout Secret First Letter Code) tt_um_wokwi_457571261877235713 (Tiny Tapeout Test) tt_um_wokwi_457582867322921985 (Tiny Tapeout Test GDS) tt_um_wokwi_457571135132600321 (Tiny Tapeout Test Gates) tt_um_wokwi_457571331577181185 (Tinytapeout_IA) tt_um_wokwi_457576779101727745 (tiny tapeout test gates) tt_um_wokwi_457571577702202369 (tj wowki) tt_um_wokwi_457572953060951041 (wokwi) tt_um_pettit_galton (Tiny Galton) tt_um_fountaincoder_top_abc (ABC Temporal Coincidence Detector) tt_um_prime_quine (Prime Quine) tt_um_ghtag_trinity_gf16 (Trinity GF16 Dot Product Accelerator) tt_um_LFSR (Configurable Galois LFSR) tt_um_Acrazt05_titan_proccesing_unit (Titan Proccesing Unit (TPU)) tt_um_essen (Digital) tt_um_alu_bns (6-bit Multi-Functional ALU) tt_um_gerardvt_spade_poc (Interactive XOR Plasma (Spade HDL)) tt_um_gerardvt_clash_poc (Interactive Triangle-Wave Plasma (Clash HDL)) tt_um_jackthoene_frogger (Frogger) tt_um_wokwi_463698873100105729 (IEEE Open Silicon 2026: UTB Logic Trivia Challenge: 8-bit Digital Lock) tt_um_wokwi_463666635153364993 (IEEE - Hex Counter and Logic Gate Validator) tt_um_ChristmasTree_MaligayangPasko (ChristmasTree_MaligayangPasko) tt_um_wokwi_463711763041599489 (IEEE Open Silicon 2026: UTB UART Transmitter basic) tt_um_tinytensorcore (TinyTensorCore) tt_um_uwasic_crypto (UWASIC Crypto) tt_um_topadi (time) tt_um_siliconimist (Siliconimist Demoscene) tt_um_neutern_0 (tt_um_neutern_0) tt_um_htfab_hsxo (HSXO) tt_um_madech_8bit_processor_vga (8-Bit Processor with VGA) tt_um_vga_clock (VGA clock) tt_um_usu_AXIS_MVMul (AXI-Stream Matrix Vector Multiplier) tt_um_weird_numbers (Weird Numbers) tt_um_bovi_cable_tester (Cable Tester) tt_um_libokuohai_asap_cpu_v2 (ASAP CPU v2) tt_um_LinusSkucas_pio (Tiny PIO) tt_um_thomas_ep_sensor (EP Sensor v7 (symmetric in-place thicken, Zhao-compliant)) tt_um_rakhanaufm_truerandom (Current-Starved Ring Oscillator Based True Random Number Generator) tt_um_parakeet (parakeet) tt_um_mcml_vco (MCML experiments) tt_um_tpu ( Tensor Processing Unit) tt_um_strasti (8-Bit ALU) tt_um_zed_analog (Analog design) tt_um_axi4lite_top (Axi4_Lite) tt_um_c4m_spsram_direct (TTSKY-SPSRAM-direct) tt_um_Onchip_Folded_Cascode_N_with_Bias (Folded Cascode N Type with Bias from Onchip Research Group) tt_um_htfab_hybrid (Telephone hybrid) tt_um_ilamparuthi_cfar (CFAR Radar Detector) tt_um_pakesson_glitcher (Glitcher) tt_um_advaittej_stopwatch (V-SPACE Demo: Command & Control Chronograph) tt_um_william_pll (Smartcard PLL Clock Generator) tt_um_Melody_Generator_JLANordhal (Melody Generator based on Markov Chains) tt_um_d_monteiro (Neuromorphic Processor (SNN)) tt_um_jacob_kebaso_4bit_cpu (Nibble - 4-bit CPU) tt_um_signal_detector (Signal_Detection_Processor) tt_um_catalinlazar_tinycore8 (TinyCore8) tt_um_chidam_secengine (Tiny Secure Telemetry Engine) tt_um_urish_usb_cdc (USB CDC (Serial) Device) tt_um_josenbm (9-Channel Frequency Counter with I2C + SPI DAC & ADC) tt_um_shalindra_vga_rings (Variable Speed and Colour Select VGA Rings) tt_um_dinukuk_MYVGA_GLIDER (DKTT01 - VGA Glider) tt_um_fibonacci_JoaoBortolace (Fibonacci Counter) tt_um_wokwi_461639934990157825 (4 bit unlock (IEEE)) tt_um_ctw_ldo (LDO Regulator Skywater 130nm)