589 IEEE_CPU with SPI program load and internal execution

589 : IEEE_CPU with SPI program load and internal execution

Design render
  • Author: Luis Javier
  • Description: 8-bit CPU that loads 16-bit instructions over SPI into internal program memory and then executes them autonomously. Final stable version uses 10 instruction slots and an enriched ISA.
  • GitHub repository
  • Open in 3D viewer
  • Clock: 50000000 Hz

Tiny8 CPU with SPI Program Load and Internal Execution

1. Overview

This project implements a compact 8-bit CPU in Verilog.

Instead of relying on a fixed hardcoded program, the processor receives a short instruction sequence through SPI, stores it into an internal program memory, and then executes that sequence autonomously.

The design is intended for Tiny Tapeout and aims to balance:

  • programmability
  • compact area
  • simple external interfacing
  • autonomous execution after loading

The final architecture uses:

  • an 8-bit accumulator register (ACC)
  • one auxiliary 8-bit register (R1)
  • a 10-slot internal instruction memory
  • SPI-based program loading
  • a compact instruction set with arithmetic, logic, branch, and output operations

2. Main operating concept

The system works in two clearly separated phases.

2.1 Program loading phase

When RUN = 0, an external controller sends 24-bit SPI frames to the chip.

Each frame contains:

  • an instruction address
  • one 16-bit instruction word

The chip stores those instructions into its internal program memory.

2.2 Execution phase

When RUN = 1, the CPU starts executing from address 0 and runs autonomously from its internal instruction memory.

This means the chip itself does not parse files or access a filesystem.
A file such as a .hex program exists outside the ASIC, and an external controller converts that file into SPI frames and sends them into the chip.

3. RTL architecture

The project is organized into the following RTL blocks.

alu8.v

8-bit arithmetic and logic unit used by the CPU.

It provides the datapath for arithmetic and logic instructions.

tiny8_cpu.v

CPU core responsible for:

  • program counter sequencing
  • instruction fetch
  • instruction decode
  • ALU operation selection
  • zero flag update
  • branch control
  • output register update
  • halt state handling
tiny8_prgmem.v

Internal instruction memory.

The final implementation uses 10 valid instruction slots.

Valid addresses are:

  • 0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
tiny8_spi_loader.v

SPI loader that receives 24-bit frames and converts them into:

  • write enable
  • write address
  • write data

for the internal program memory.

tt_um_tiny8_risclike.v

Top-level wrapper used for external integration.

It connects:

  • SPI loader
  • program memory
  • CPU
  • visible output signals
  • Tiny Tapeout external pins

4. Internal program memory model

The internal program memory stores:

  • 10 instruction words
  • each instruction word is 16 bits wide
4.1 Valid address range

Only addresses 0..9 are valid.

4.2 Behavior outside valid range

If the CPU reads an address outside the valid range, the memory returns:

  • 16'hD000

which corresponds to:

  • HALT

This prevents undefined execution if an invalid branch target is reached.

5. CPU register model

The CPU uses a very small internal state.

ACC

Main accumulator register.

This is the primary working register of the CPU.
Most arithmetic and logic operations write their result back into ACC.

R1

Auxiliary register.

This is typically used as the second operand for ALU operations.

Z

Zero flag.

This flag is updated when the CPU needs to know whether a result is zero.
It is used by conditional branches such as BZ and BNZ.

port_out

Visible output register.

This is the value that appears externally on uo[7:0].

PC

Program counter.

This selects the current instruction address.

6. What ACC means

ACC stands for accumulator.

An accumulator is a register used to hold the current working result of the processor.

In simple CPUs, instead of having many general-purpose registers, one register is treated as the main operand/result register.

In this project:

  • immediate values can be loaded into ACC
  • ALU operations use ACC and R1
  • the result usually goes back into ACC
  • OUT sends ACC to the visible output

A simple way to think about it is:

  • ACC = the main working register
  • R1 = helper register

Example:

  1. load 5 into ACC
  2. load 3 into R1
  3. execute ADD
  4. now ACC = 8

So the accumulator is where the CPU keeps the main result it is currently working on.

7. CPU execution behavior

7.1 Reset behavior

After reset:

  • ACC = 0
  • R1 = 0
  • port_out = 0
  • PC = 0
  • halted = 0
7.2 Sequential execution

The CPU fetches an instruction from the current address and executes it.

7.3 Program counter wrap

If execution advances sequentially past address 9, it wraps back to address 0.

7.4 Branch behavior

Branch instructions use the low address bits of the instruction.

If the requested branch address is invalid, execution is redirected to address 0.

7.5 Halt behavior

When HALT is executed:

  • halted becomes 1
  • execution stops
  • the CPU stays halted until the system is reset or until the external operating flow restarts execution
7.6 RUN behavior

When RUN = 0, the design is in program load mode.
When RUN = 1, the design is in execution mode.

This separation is important:

  • RUN = 0 → load instructions
  • RUN = 1 → execute program

8. Instruction set summary

The opcode is stored in:

  • instr[15:12]

The ISA includes:

Data and register instructions
  • NOP
  • LDI_ACC
  • LDI_R1
  • MOV_ACC_R1
Arithmetic and logic instructions
  • ADD
  • SUB
  • AND
  • OR
  • XOR
  • CMP
Output and control instructions
  • OUT
  • OUT_R1
  • JMP
  • BZ
  • BNZ
  • HALT

9. Detailed instruction behavior

NOP

Opcode: 0x0
Encoding: 0x0000

No operation is performed.
The CPU simply advances to the next instruction.

Useful for:

  • padding
  • timing alignment
  • placeholder instructions
LDI_ACC

Opcode: 0x1
Encoding: 0x1xxx

Loads an 8-bit immediate value into ACC.

Effect:

  • ACC <- imm8

Also updates Z if the loaded value is zero.

Example:

  • 0x102AACC = 0x2A
LDI_R1

Opcode: 0x2
Encoding: 0x2xxx

Loads an 8-bit immediate value into R1.

Effect:

  • R1 <- imm8

Example:

  • 0x2033R1 = 0x33
ADD

Opcode: 0x3
Encoding: 0x3000

Adds R1 to ACC.

Effect:

  • ACC <- ACC + R1

Also updates Z based on the result.

SUB

Opcode: 0x4
Encoding: 0x4000

Subtracts R1 from ACC.

Effect:

  • ACC <- ACC - R1

Also updates Z.

AND

Opcode: 0x5
Encoding: 0x5000

Bitwise AND between ACC and R1.

Effect:

  • ACC <- ACC & R1

Useful for:

  • masking
  • bit filtering
OR

Opcode: 0x6
Encoding: 0x6000

Bitwise OR between ACC and R1.

Effect:

  • ACC <- ACC | R1

Useful for:

  • forcing bits
  • combining masks
XOR

Opcode: 0x7
Encoding: 0x7000

Bitwise XOR between ACC and R1.

Effect:

  • ACC <- ACC ^ R1

Useful for:

  • toggling bits
  • simple comparisons
  • bitwise transformations
CMP

Opcode: 0x8
Encoding: 0x8000

Comparison through the subtraction path.

This instruction does not store the subtraction result into ACC.
Instead, it uses the subtraction result internally to update Z.

In practice, it is useful to test whether:

  • ACC == R1

If ACC - R1 == 0, then:

  • Z = 1

Otherwise:

  • Z = 0

This instruction is mainly intended to support:

  • BZ
  • BNZ
OUT

Opcode: 0x9
Encoding: 0x9000

Copies ACC into the visible output register.

Effect:

  • port_out <- ACC

Externally this appears on:

  • uo[7:0]
JMP

Opcode: 0xA
Encoding: 0xA00a

Unconditional jump.

Effect:

  • PC <- a

If the target address is invalid, execution is redirected to address 0.

BZ

Opcode: 0xB
Encoding: 0xB00a

Branch if zero.

Effect:

  • if Z = 1, jump to address a
  • otherwise continue sequentially

Useful after:

  • CMP
  • arithmetic operations that may produce zero
BNZ

Opcode: 0xC
Encoding: 0xC00a

Branch if not zero.

Effect:

  • if Z = 0, jump to address a
  • otherwise continue sequentially
HALT

Opcode: 0xD
Encoding: 0xD000

Stops execution.

Effect:

  • halted = 1
  • CPU enters halt state

Externally, halt status is visible.

MOV_ACC_R1

Opcode: 0xE
Encoding: 0xE000

Copies R1 into ACC.

Effect:

  • ACC <- R1

Also updates Z depending on the value copied.

Useful for:

  • moving a loaded constant in R1 into the main working register
  • preparing output or arithmetic without needing another immediate load into ACC
OUT_R1

Opcode: 0xF
Encoding: 0xF000

Copies R1 directly into the visible output register.

Effect:

  • port_out <- R1

Useful when:

  • R1 already contains the value you want to show
  • you want to output without first copying into ACC

10. SPI loading protocol

Instructions are loaded using 24-bit SPI frames.

10.1 Frame format
  • bits [23:16] = address byte
  • bits [15:0] = instruction word
10.2 Write enable condition

Program writes are accepted only when:

  • RUN = 0

When RUN = 1, execution mode is active and memory writes are blocked.

10.3 Practical meaning

The CPU does not load a .hex file directly.

Instead:

  1. an external controller reads the file
  2. converts each line into a 24-bit frame
  3. sends the frames through SPI into the chip

11. Practical operating sequence

Step 1: Reset

Reset the design.

This initializes:

  • CPU state
  • output register
  • status flags
  • memory contents
Step 2: Disable execution

Set:

  • RUN = 0
Step 3: Load instructions

Send one SPI frame per instruction.

Step 4: Check load status

Observe:

  • PROGRAM_LOADED
Step 5: Start execution

Set:

  • RUN = 1

The CPU begins execution from address 0.

Step 6: Observe results

Monitor:

  • uo[7:0]
  • HALTED
  • RUN_ECHO

12. Pin mapping

Inputs
  • ui[0] = RUN
Main outputs
  • uo[7:0] = CPU output port
UIO usage
  • uio[0] = SPI_SCK input
  • uio[1] = SPI_CS_N input
  • uio[2] = SPI_MOSI input
  • uio[3] = PROGRAM_LOADED output
  • uio[4] = HALTED output
  • uio[5] = RUN_ECHO output
  • uio[6] = unused
  • uio[7] = unused

13. Example program

Example:

Address Instruction Meaning
0 0x2033 LDI_R1 0x33
1 0xE000 MOV_ACC_R1
2 0x9000 OUT
3 0xF000 OUT_R1
4 0xD000 HALT
Expected behavior
  • R1 = 0x33
  • ACC = 0x33
  • visible output becomes 0x33
  • visible output is written again from R1
  • CPU halts

14. Example SPI frames

For the example above, the SPI frames are:

Address Instruction 24-bit frame
0 0x2033 0x002033
1 0xE000 0x01E000
2 0x9000 0x029000
3 0xF000 0x03F000
4 0xD000 0x04D000

15. How it works physically in real life

15.1 What is actually loaded

The chip does not open or parse files.

A file such as .hex is stored externally, for example in:

  • a PC
  • a microcontroller
  • an RP2040 on the demo board
  • another controller

That controller converts the file into SPI frames and sends them into the ASIC.

So the ASIC receives:

  • addresses
  • instruction words

not files directly.

15.2 External controller role

In a physical setup, the external controller acts as:

  • SPI master
  • program source
  • clock source or clock controller
  • run/control source

The ASIC acts as:

  • SPI target
  • internal program memory target
  • autonomous execution engine
15.3 Demo board usage model

A practical demo-board flow is:

  1. power the board
  2. select the project
  3. keep RUN = 0
  4. send SPI frames
  5. wait for PROGRAM_LOADED
  6. provide execution clock
  7. set RUN = 1
  8. observe uo[7:0], HALTED, and RUN_ECHO

16. Human-visible use

16.1 Important practical limitation

If the CPU runs too fast, a person will not be able to observe intermediate states directly.

At high frequency, execution may complete before a human can visually follow the output transitions.

16.2 Recommended human-visible approaches
Slow clock mode

Use a slow external clock so changes can be seen by eye.

Step clock mode

Advance execution one clock pulse at a time.

Final-result mode

Run normally, then only show:

  • final output value
  • halt status
16.3 What a human can observe

A human can easily observe:

  • whether PROGRAM_LOADED becomes active
  • whether RUN_ECHO reflects execution state
  • whether HALTED becomes active
  • the final value on uo[7:0]

If a human must observe intermediate instruction results, then the external controller should provide:

  • a slow clock
  • or step-by-step clocking

17. Real-world file loading example

Suppose the external program file contains:

00 2033
01 E000
02 9000
03 F000
04 D000

The controller converts that into these frames:

  • 0x002033
  • 0x01E000
  • 0x029000
  • 0x03F000
  • 0x04D000

Then:

  1. RUN = 0
  2. send all frames through SPI
  3. wait until PROGRAM_LOADED = 1
  4. set RUN = 1
  5. observe output and halt state

18. What this architecture is good for

This architecture is good for:

  • compact programmable execution
  • external program loading
  • simple visible output behavior
  • small instruction-driven demonstrations
  • low-area Tiny Tapeout implementation

It is not intended for:

  • large programs
  • general-purpose software execution
  • direct file parsing on-chip
  • deep data memory structures
  • complex multi-register software environments

19. Validation intent

The validation strategy is intended to cover:

  • SPI program loading
  • correct memory writes
  • autonomous execution
  • output correctness
  • halt signaling
  • simulation-level functional verification
  • gate-level compatibility

20. Project intent

This project extends a simple ALU-style concept into a compact programmable system.

Instead of manually forcing each operation from outside, the ALU is controlled by a small CPU that:

  • receives a short program
  • stores it internally
  • executes it autonomously

This makes the design more representative of a real programmable digital block while still remaining compact enough for Tiny Tapeout.

IO

#InputOutputBidirectional
0RUNOUT[0]SPI_SCK input
1OUT[1]SPI_CS_N input
2OUT[2]SPI_MOSI input
3OUT[3]PROGRAM_LOADED output
4OUT[4]HALTED output
5OUT[5]RUN_ECHO output
6OUT[6]
7OUT[7]

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_tetrahedral_oscillator (Tetrahedral Oscillator) tt_um_urish_simon (Simon Says memory game) tt_um_c4m_spsram_direct (TTSKY-SPSRAM-direct) tt_um_bgr (sky130 Bandgap Reference) tt_um_floating_bulk_test_2 (Floating-bulk-test-2) tt_um_sker (Bomberman) tt_um_pzhu2 (Hardware Triangle Rasterizer with VGA Output) tt_um_nlanderso_morse_code (Morse Code Translator) tt_um_peterhan_ReactionGame (Reaction Time Game) tt_um_minmanrox_drone (Drone Flight Controller) tt_um_tiny3d_kevinqian11 (Tiny3D) tt_um_abhinavputhran_raycast (raycaster) tt_um_sillylad_top (Tiny Rainbow Snake Game) tt_um_akim_tinydma (TinyDMA-2C) tt_um_jenny82121027_axi4lite (AXI4-Lite Slave Register Demo) tt_um_Edward2005lol_Slot_Machine_Top (Slot Machine) tt_um_amin_hong_ooo_cpu (tiny OoO CPU) tt_um_flappy_vga_Akul18 (Flappy VGA) tt_um_vidishac2004_calc (Keypad Calculator) tt_um_eric_lcc (Tiny_Tapeout_Launch_Controller) tt_um_rwnt_vgatest (Intro_VGA_Playground) tt_um_gurtej_randhawa1_pulsemon8 (PulseMon8) tt_um_28add11_latchup (latchup2026-28add11) tt_um_noah_azz_demo (My First TT Demo) tt_um_llhtimlam_movingscreen (movingscreen) tt_um_harveywong85_harveywilly (harveywilly) tt_um_theandelope_checkers (Checkers) tt_um_rajum_iterativeMAC (Iterative MAC LATCHUP2026) tt_um_calebulboaca_calebcheckers (Caleb's Checkers) tt_um_vga_yusefkarim (ttsky-verilog-yk) tt_um_lfearn_latchup (Latch Up Tiny Tapeout) tt_um_ww_charlieplex (7x8 Charlieplex Array Controller) tt_um_zlj8800_tiny_tapeout_v2 (Chipping Away to Learn about The Chips) tt_um_ocpu (OCPU) tt_um_aelobo (TinyPomodoro) tt_um_jasonbrave_terre (Terre VGA) tt_um_mosbius (mini mosbius) tt_um_fabulous_sky_26b (Tiny FABulous FPGA) tt_um_cycho (Mini Memory Controller) tt_um_erika24 (TinyFarm) tt_um_wokwi_463101366305871873 (Tiny Laura L) tt_um_pcs_link_lite (PCS Lite: Asynchronous 8b10b SerDes) tt_um_sienahlee (18244-s26-tiny-nn) tt_um_basic8 (Basic8 CPU) tt_um_basic_na (basic_national_anthem_buzzer) tt_um_datiuemm (IEEE MBIST & ECC for RAM 8x32) tt_um_CFG_WDT (Configurable WDT) tt_um_top (IEEE_henon) tt_um_fidel_makatia_digital_tapeout (8-bit Accumulator CPU SoC) tt_um_garage_project (IEEE_UPP_Garage unit control) tt_um_wokwi_462595774777167873 (Bypass Universal) tt_um_pwm_4ch (IEEE Multi-Channel PWM Controller ) tt_um_amarjay (mini_cpu) tt_um_blackjack (ttsky-blackjack) tt_um_bartu_kripto (Tiny Crypto Core) tt_um_umitanik_matmul3x3 (3x3 Serial Matrix Multiplier (4-bit)) tt_um_tnt_mosbius (tnt's variant of SKY130 mini-MOSbius) tt_um_rule30_vga (IEEE Rule 30 Cellular Automaton VGA Display) tt_um_authQV (authQV RISC-V CPU) tt_um_nn_3x3 (3x3 Hardware Neural Network (Programmable TPU)) tt_um_top_module_16_mips (16-bit MIPS Single Cycle Processor) tt_um_auth_dmac (AUTh DMA Controller) tt_um_puf (IEEE Ring Oscillator PUF) tt_um_jacob_kebaso_4bit_cpu (Nibble - 4-bit CPU) tt_um_IEEE_perceptron (1-bit Perceptron - Hardware Neuron) tt_um_wokwi_458569964697822209 (Full Adder: Binary Addition Circuit) tt_um_yfoong86_chasey (Chasey) tt_um_dsp_top (Configurable 8-bit Streaming DSP Core) tt_um_processor_top (TinyCrypto-8) tt_um_pro_clk (Programmable Clock Generator) tt_um_wokwi_458951258752539649 (a tour-in the haunted house) tt_um_vga (IEEE Multi-Mode Procedural VGA Graphics Engine) tt_um_happy_birthday (IEEE Happy Birthday Detector) tt_um_galois_lfsr16 (16 bit Galois LFSR based Random number generator-IEEE) tt_um_cordic_ieee (Cordic-based Math processor-IEEE) tt_um_wokwi_462089659615737857 (Mines live or die) tt_um_arfanghani_design2_top (Multi-Mode Sensor Signal Processor) tt_um_arfanghani_design3_top (Heat Stress Alert ASIC) tt_um_arfanghani_design1_top (Water Quality Classifier Core) tt_um_zed_analog (Analog design) tt_um_gen_onda (DDS Waveform Generator - IEEE) tt_um_Richard_Tarqui_contador_uart_simple (UART - Controlled Frecuency Meter & Timer - IEEE) tt_um_iporre_rm121 (IEEE PONG IPORRE VGA) tt_um_digitalclock (Digital Clock!) tt_um_wokwi_462089398612533249 (Sunblock Holiday) tt_um_wokwi_458477197787547649 (FULL SUBTRACTOR) tt_um_wokwi_462165147286899713 (PSI Open IC 2026) tt_um_RaphRaphyRofl_VerilogIEEEBounce (IEEE Letters Screensaver) tt_um_leongamboa_OpenSilicon_SubmissionChapterLogo (Open Silicon 2026: SKY26a Submission - Chapter Logo) tt_um_SollysLe_mac_8bits (8-bit Multiply-Accumulate (MAC) with 2-Cycle Serial Interface) tt_um_AlephNaNsea_decentvgachipIEEEIESIPSPH (Galvantronix, DLSU, and me!) tt_um_IEEE_OpenSilicon_SubmissionCredits (Open Silicon 2026: SKY26a Submission - Chapter Logo) tt_um_Mitchell_s_Approximation_based_EML (IEEE Mitchell-s_Approximation_based_EML) tt_um_tiny_8bit_cpu (IEEE Tiny 8bit CPU) tt_um_dco (Digitally Controlled Oscillator) tt_um_thunder (Ford Thunderbird Rearlights Controller - IEEE OpenSilicon Bootcamp) tt_um_tiny8_risclike (IEEE_CPU with SPI program load and internal execution) tt_um_coffee_chip (IEEEcoffee_chip) tt_um_vga_glyph_mode_clone (Philippine IC Design Boot Camp 2026!) tt_um_alu7b (IEEE 7-bit ALU - Serial Input / Parallel Output) tt_um_AlephNaNsea_space_time_waves_and_filaments (Space-Time Waves and Filaments) tt_um_BFD100_Logic (BDF1000 Line folower) tt_um_Floppy_LIGHT (Floppy LIGHT) tt_um_okforth_ieee (SUBLEQ CPU IEEE) tt_um_magnetofield_ieee (Hackerspace logo IEEE) tt_um_krv8_ieee (A simple 8-bit RISC-V style CPU) tt_um_tile_growth_simulator_NoahW (Tile Growth Simulator) tt_um_prog_clk_router (Programmable Clock Router (IEEE)) tt_um_snk_smart_io_hub (UART Smart I/O Hub) tt_um_rom_vga_screensaver (VGA Screensaver with embedded bitmap ROM) tt_um_eml_gate (EML Serial Coprocessor) tt_um_Nay0805_detector_de_patrones_generados_aleatoreamente (tt_um_Nay0805_detector_de_patrones_generados_aleatoreamente) tt_um_DlynchR_spi_display (tt_um_DlynchR_spi_display) tt_um_scisneros29_BCR (tt_um_scisneros29_BCR) tt_um_sqrt8_ieee (A simple 8-bit square root calculator.) tt_um_ieee_opensilicon_bootcamp (Guess the Number Game - IEEE OpenSilicon Bootcamp) tt_um_wokwi_461639934990157825 (4 bit unlock (IEEE)) tt_um_wokwi_461620354455920641 (4-Bit High-Security Password System (IEEE)) tt_um_KK_VGA01 (KK Zuzel Motocross IEEE) tt_um_wokwi_461622504612675585 (Tiny Tapeout : Lock system v2 (IEEE)) tt_um_riscv_alu (rv32i RISC-V ALU) tt_um_the_siliconimist_chip1 (The Siliconimist Chip1) tt_um_william_pll (Smartcard PLL Clock Generator) tt_um_william_adc8 (Sigma-Delta Bitstream ADC (8-bit)) tt_um_wlmoi_bcd_to_7segment (TTSKY26A BCD to 7-Segment Decoder) tt_um_BillNace_SumItUp (SumItUp Hardware Thread (18-341)) tt_um_sandsim_Alden_G878 (SandSim) tt_um_dma_multi_channel (dma_multi_channel) tt_um_Halcy0nnnn_1 (IEEE_MMU_Cybertron_Logo) tt_um_8_bit_cpu (8-bit CPU) tt_um_morse_code (Translator) tt_um_unified_error_detection (8-Bit Error Detection Engine) tt_um_sobel (Streaming Sobel Edge Detection Accelerator) tt_um_NUPlace2 (VAK FSM) tt_um_youweiterrylu (DMA) tt_um_joo111emad_BGR (Analog BGR) tt_um_izh_neuron (SKY130 Spiking Neuron) tt_um_izh_neuron_4pins (SKY130 Spiking Neuron) tt_um_pmendoza_ieee_tinyscan (Tiny SCAN chain tester) tt_um_rajkamal_analog (IEEE Multi-Stage Configurable Ring Oscillator) tt_um_isalopez9_memory_game (Simon Memory Game Chip) tt_um_usp_didactic ((IEEE) USP OpenSilicio Didactic Testchip) tt_um_bn_lif_evan (Bernoulli Stochastic Multiplier + LIF Neuron) tt_um_advun (tinyWorkshop) tt_um_wokwi_460983138943099905 (Trial IB) tt_um_pfw_tpu (2x2 Systolic Array TPU) tt_um_riscv_gpu (4x4 BitNet b1.58 Matrix Multiply Accelerator) tt_um_tt08_axis_fifo_fwft_bkenololo (IEEE 8-bit AXI4-Stream FWFT FIFO) tt_um_analog_ota_v3_IEEE (TTSKY26a_Miller_OTA(IEEE)) tt_um_quadpulse_pwm (QuadPulse — 4-Channel Servo/Motor PWM ASIC) tt_um_advaittej_stopwatch (V-SPACE Demo: Command & Control Chronograph) tt_um_snn_afib_detector (SNN AFib Detector — Spiking Reservoir Computing Core) tt_um_Halcy0nnnn (IEEE_MMU_Cybertron_Logo) tt_um_baby_cpu (Baby CPU) tt_um_wokwi_462285560117329921 (BCD ID Wowki) tt_um_LAT (Automation Laboratory Logo with author Image) tt_um_dean_foulds_ai_accelerator (Systolic Binary Neural Network Accelerator) tt_um_kazan_rqpu (tt_um_kazan_rqpu) tt_um_ultrasage_danz (IEEE Open-Silicon 2026 x NITHUB: Soil Moisture Irrigation Controller) tt_um_traffic_ctrl (IEEE Open-Silicon 2026: Adaptive Traffic Light Controller with Emergency Override) tt_um_lpf_ieee (Moving average Digital Low pass filter (IEEE open silicon)) tt_um_array_mult_vga (4x4 Array Multiplier with VGA Visualization) tt_um_bfloat16 (IEEE bfloat16_accelerator) tt_um_silicon_art_vga_screensaver (VGA Screensaver with Silicon Art ROM) tt_um_seapanda0 (DSP_FIR) tt_um_datdt_charizard (IEEE VGA Charizard Flamethrower) tt_um_ocd_charlieplex (Charlieplex array controller) tt_um_bytex64_wave_hi (wave_hi) tt_um_STDCELL_LDO (STDCELL_LDO) tt_um_devil_nyancat (Devil Nyan Cat VGA) tt_um_ieee_pwd (PWM Generator) tt_um_petros (TTNN: Pre-trained BNN for 8x8 MNIST) tt_um_Medidor_Jitter (Jitter Metrics & Pulse Analyzer) tt_um_CNN4IC_sky (CNN4IC — Convolutional Neural Network (CNN) for Image Classification on Chip (IEEE)) tt_um_Madd_CS_Ring_Osc (CSRO with 8-bit DAC) tt_um_reaction_game (Reaction game on Simon Says board) tt_um_load_priority_controller (IEEE Open-Silicon 2026: Load Priority Controller) tt_um_ctw_ldo (LDO Regulator Skywater 130nm) tt_um_c4m_legacyspsram_direct (TTSKY-SPSRAM-legacy-direct) tt_um_tpu (Mini TPU v2) tt_um_rcyaon (bandgap-ptat) tt_um_5tOTA (Operational Transconductance Amplifier) tt_um_wokwi_461554799001985025 (inec_voting) tt_um_systolic_array (Custom 3 by 3 Systolic Array) tt_um_chronoINAAL (Digital Stopwatch with LAP mode) tt_um_pree (UART_Analog_IC) tt_um_thorsten_shiftregister (Shiftregister Challenge 40 Bit) tt_um_hamming74 (Hamming(7,4) Encoder/Decoder) tt_um_prathiba_finite_sbox (Finite Field AES S-box) tt_um_maw_game (MAW Bird Shooter VGA Game) tt_um_vga_ascii (ascii_typewriter) tt_um_lstm_wakeword (TTSKY26A Neural Network - LSTM Wake Word Detector) tt_um_bad_apple (test) tt_um_riscv_branch (rv32i RISC-V Branch Condition Unit) tt_um_alu8bit (8-bit Tiny ALU) tt_um_chaotic_rng (C0haotic RNG) tt_um_ik_0_ptat_bgr (Pseudo-PTAT cell based bandgap reference) tt_um_er_ring_osc (Simple Ring Oscillator) tt_um_wokwi_462290658621740033 (IEEE IC Bootcamp Khalifa University) tt_um_ross_systolic (2x2 Systolic Array Matrix Multiplier) tt_um_27jorge05_crc_fifo (CRC_FIFO: CRC-32 Engine with 8-Byte FIFO and VGA Display) tt_um_jonathanbytes_alu8_serial (ALU8 Serial (IEEE)) tt_um_vmm_bnn (Nano-Bnn-Accelerator) tt_um_Onchip_TrafficLight (Onchip-UIS Traffic Light) tt_um_rebeccargb_universal_decoder (Universal Binary to Segment Decoder) tt_um_db_PWM (Onchip-UIS PWM Generator ) tt_um_ccollatz_SO (Onchip-UIS Collatz Conjecture) 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_462349004652630017 (IEEE Logic Locked Reversible 2-Bit ALU) tt_um_andriansyah_capless_ldo (capless LDO regulator with 51.1dB PSRR at 100kHz) tt_um_ramp_adc (ttsky26b-ramp-adc) tt_um_alu_7bits (ALU 7 Bits) tt_um_ALU_Porca (Onchip-UIS 8-bit ALU with Status Flags) tt_um_oreoluwa_water_level (IEEE Open-silicon 2026 x NITHUB: Fluid Level Detector and Controller) tt_um_wokwi_464171439964087297 (First Silicon) tt_um_wokwi_464173578877001729 (Tiny Tapeout Template - PJ v2) tt_um_krisjdev_artwork (Silicon Artwork) tt_um_wokwi_464171399090591745 (tiny-tapeout-2026-05-16) tt_um_wokwi_464176621517795329 (Tiny Tapeout Run1) tt_um_wokwi_464178664603376641 (Tiny Tapetest) tt_um_wokwi_464171361019935745 (Tiny Tapeout Template Copy) tt_um_wokwi_464177144942873601 (TinyTapeout_Hackaday_Daniel) tt_um_wokwi_464171521208810497 (Daniel's first chip (Tiny Tapeout)) tt_um_wokwi_464171464939073537 (Claire's first Wokwi design) tt_um_wokwi_464176181065476097 (8-bit counter) tt_um_hackin7_coprocessor (AoC Hardcaml Coprocessor) tt_um_wokwi_464171453853527041 (Tiny Tapeout Hackaday 2026) tt_um_wokwi_464171864719209473 (Everton - Tiny Tapeout Workshop LC26) tt_um_ml_coprocessor (Kunal ML co-processor) tt_um_rahulbhagwat_brainamp_lna (brainamp-ac-coupled-lna) tt_um_Onchip_adder_NM (Onchip-UIS 4-bit Ripple Carry Adder) tt_um_wokwi_463557428446691329 (3Bit_yALU_IEEE_V2) tt_um_Onchip_Trimmed_BandGap (Onchip-UIS 3-bit Trimmed 1.2V BandGap) tt_um_ascon_cxof_chain (ASCON-CXOF128 Hash-Chain Accelerator) tt_um_Onchip_Freq_Divider_Dig (Onchip-UIS CLK Frequency Divider) tt_um_bleeptrack_cc2 (Recursive Rectangles) tt_um_enjimneering_spi_mem (SPI Memory Test) tt_um_voltrare (UART SPI ASCII Art) tt_um_enrico_glr (Secret Guessing Game) tt_um_gitragi_rng (Logic-Locked 5-Bit RNGy) tt_um_ece298A_analog_r4 (ECE298A analog tile) tt_um_trinity_nano (TRI-1 Phi — Trinity φ-anchor 1×1 Lucas POST + CLARA Gap-4) tt_um_ghtag_trinity_gf16 (TRI-1 Euler — Trinity e-engine 8×2 SUPER-CROWN + 10 CLARA Gaps) tt_um_lujji_ulogic_analyzer (ulogic_analyzer) tt_um_catalinlazar_adpll_125m_sky130 (127-stage Coarse-Tapped ADPLL) tt_um_vga_sharc_demo (SHaRC VGA Demo) tt_um_digit_serial_divider (IEEE | 24-Bit Serial Fixed-Point Binary Divider) tt_um_xeniarose_sbox (AES S-Box / PRESENT) tt_um_main_fsm_anbui_uci (Swarm Microrobot Drug Delivery FSM) tt_um_RO_aging (Onchip-UIS Ring Oscillators for Aging) tt_um_trinity_max_true (TRI-1 Gamma — MAX-TRUE NEUROMORPHIC FLAGSHIP 32-tile 8-column) tt_um_gray_sobel (tt_um_sobel_threshold) tt_um_c0d3d1_ldo (tt26b-Babies-First-LDO) tt_um_Bio_SSG_ (Bio-SSG) tt_um_nezumi_tech_adc_sq_compare (TT ADC SQ Compare) tt_um_c4m_spsram_direct_librelane (TTSKY-SPSRAM-direct-librelane) tt_um_tinycgra (tinyCGRA 2x2) tt_um_opensilicio_5g_rectifier (5 GHz RF-DC Rectifier) tt_um_sky_pll (SKY PLL test project) tt_um_rv32_vga (Systolic VGA Visualizer) tt_um_tron_game (TRON: Light Cycles game with VGA support (IEEE)) tt_um_wearlevel_controller (Hardware EEPROM Wear-Leveling Controller) tt_um_enjimneering_bss_uart (BSS UART) tt_um_wokwi_458489231265343489 (EDS workshop 4bit adder) tt_um_wokwi_464171612496799745 (Tiny Tapeout Exercise) tt_um_wokwi_464178459384432641 (Tiny Tapeout Template Copy) tt_um_leozqi_onetile (OneTile!) tt_um_d_4_array_multiplier (3020 Test Repo 4x4 Array Multiplier) tt_um_adithya_selvakumar_vco (4-Stage Differential Ring VCO) tt_um_snk_pwm_uart (PWM UART Controller) Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available Available