739 Classic 8-bit era Programmable Sound Generator SN76489

739 : Classic 8-bit era Programmable Sound Generator SN76489

Design render
  • Author: ReJ aka Renaldas Zioma
  • Description: The SN76489 Digital Complex Sound Generator (DCSG) is a programmable sound generator chip from Texas Instruments.
  • GitHub repository
  • Clock: 4000000 Hz

How it works

This Verilog implementation is a replica of the classical SN76489 programmable sound generator. With roughly a 1400 logic gates this design fits on a single tile of the TinyTapeout.

The goals of this project

  1. closely replicate the behavior and eventually the complete design of the original SN76489
  2. provide a readable and well documented code for educational and hardware preservation purposes
  3. leverage the modern fabrication process

A significant effort was put into a thorough test suite for regression testing and validation against the original chip behavior.

The future work

The next step is to incorporate analog elements into the design to match the original SN76489 - DAC for each channel and an analog OpAmp for channel summation.

Chip technical capabilities

  • 3 square wave tone generators
  • 1 noise generator
  • 2 types of noise: white and periodic
  • Capable to produce a range of waves typically from 122 Hz to 125 kHz, defined by 10-bit registers.
  • 16 different volume levels

Registers The behavior of the SN76489 is defined by 8 "registers" - 4 x 4 bit volume registers, 3 x 10 bit tone registers and 1 x 3 bit noise configuration register.

Channel Volume registers Tone & noise registers
0 Channel #0 attenuation Tone #0 frequency
1 Channel #1 attenuation Tone #1 frequency
2 Channel #2 attenuation Tone #2 frequency
3 Channel #3 attenuation Noise type and frequency

Square wave tone generators Square waves are produced by counting down the 10-bit counters. Each time the counter reaches the 0 it is reloaded with the corresponding value from the configuration register and the output bit of the channel is flipped producing square waves.

Noise generator Noise is produced with 15-bit Linear-feedback Shift Register (LFSR) that flips the output bit pseudo randomly. The shift rate of the LFSR register is controller either by one of the 3 hardcoded power-of-two dividers or output from the channel #2 tone generator is used.

Attenuation Each of the four SN76489 channels have dedicated attenuation modules. The SN76489 has 16 steps of attenuation, each step is 2 dB and maximum possible attenuation is 28 dB. Note that the attenuation definition is the opposite of volume / loudness. Attenuation of 0 means maximum volume.

Finally, all the 4 attenuated signals are summed up and are sent to the output pin of the chip.

Historical use of the SN76489

The SN76489 family of programmable sound generators was introduced by Texas Instruments in 1980. Variants of the SN76489 were used in a number of home computers, game consoles and arcade boards:

The SN76489 chip family competed with the similar General Instrument AY-3-8910.

The original pinout of the SN76489AN

               ,--._.--.
        D5  -->|1    16|<-- VCC
        D6  -->|2    15|<-- D4
        D7  -->|3    14|<-- CLOCK
     ready* <--|4    13|<-- D3
       /WE  -->|5    12|<-- D2
       /ce* -->|6    11|<-- D1
  AUDIO OUT <--|7    10|<-- D0
        GND ---|8     9|    not connected*
               `-------'
        * -- omitted from this Verilog implementation

Difference from the original hardware

This Verilog implementation is a completely digital and synchronous design that differs from the original SN76489 design which incorporated analog parts.

Audio signal output While the original chip had integrated OpAmp to sum generated channels in analog fashion, this implementation does digital signal summation and digital output. The module provides two alternative outputs for the generated audio signal:

  1. digital 8-bit audio output suitable for external Digital to Analog Converter (DAC)
  2. pseudo analog output through Pulse Width Modulation (PWM)

Separate 4 channel output Outputs of all 4 channels are exposed along with the master output. This allows to validate and mix signals externally. In contrast the original chip was limited to a single audio output pin due to the PDIP-16 package.

No DC offset This implementation produces output 0/1 waveforms without DC offset.

No /CE and READY pins Chip enable control pin /CE is omitted in this design for simplicity. The behavior is the same as if /CE is tied low and the chip is considered always enabled.

Unlike the original SN76489 which took 32 cycles to update registers, this implementation handles register writes in a single cycle and chip behaves as always READY.

Synchronous reset and single phase clock The original design employed 2 phases of the clock for the operation of the registers. The original chip had no reset pin and would wake up to a random state.

To make it easier to synthesize and test on FPGAs this implementation uses single clock phase and synchronous reset for registers.

A configurable clock divider was introduced in this implementation.

  1. the original SN76489 with the master clock internally divided by 16. This classical chip was intended for PAL and NTSC frequencies. However in BBC Micro 4 MHz clock was employed.
  2. SN94624/SN76494 variants without internal clock divider. These chips were intended for use with 250 to 500 KHz clocks.
  3. high frequency clock configuration for TinyTapeout, suitable for a range between 25 MHz and 50 Mhz. In this configuration the master clock is internally divided by 128.

The reverse engineered SN76489

This implementation is based on the results from these reverse engineering efforts:

  1. Annotations and analysis of a decapped SN76489A chip.
  2. Reverse engineered schematics based on a decapped VDP chip from Sega Mega Drive which included a SN76496 variant.

How to test

Summary of commands to communicate with the chip

The SN76489 is programmed by updating its internal registers via the data bus. Below is a short summary of the communication protocol of SN76489. Please consult SN76489 Technical Manual for more information.

Command Description Parameters
1cc0ffff Set tone fine frequency f - 4 low bits, c - channel #
00ffffff Follow up with coarse frequency f - 6 high bits
11100bff Set noise type and frequency b - white/periodic, f - frequency control
1cc1aaaa Set channel attenuation a - 4 bit attenuation, c - channel #
NF1 NF0 Noise frequency control
0 0 Clock divided by 512
0 1 Clock divided by 1024
1 0 Clock divided by 2048
1 1 Use channel #2 tone frequency

Write to SN76489 Hold /WE low once data bus pins are set to the desired values. Pull /WE high before setting different value on the data bus.

Note frequency

Use the following formula to calculate the 10-bit period value for a particular note :

$ tone period_{cycles} = clock_{frequency} / (32_{cycles} * note_{frequency}) $

For example 10-bit value that plays 440 Hz note on a chip clocked at 4 MHz would be:

$ tone period_{cycles} = 4000000 Hz / (32_{cycles} * 440 Hz) = 284 = 11C_{hex} $

An example to play a note accompanied with a lower volume noise

/WE D7 D6/5 D4..D0 Explanation
0 1 00 01100 Set channel #0 tone low 4-bits to $C_{hex} = 1100_{bin}$
0 0 00 10001 Set channel #0 tone high 6-bits to $11_{hex} = 010001_{bin}$
0 1 00 10000 Set channel #0 volume to 100%, attenuation 4-bits are $0_{dec} = 0000_{bin}$
0 1 11 00100 Set channel #3 noise type to white and divider to 512
0 1 11 11000 Set channel #3 noise volume to 50%, attenuation 4-bits are $8_{dec} = 1000_{bin}$
Timing diagram


CLK   ____      ____      ____      ____      ____      ____         
   __/    `____/    `____/    `____/    `____/    `____/    `___ ...
     |        |         |         |         |         |
     |        |         |         |         |         |

/WE _       __        __        __        __        _______
     `_____/  `______/  `______/  `______/  `______/   *
                                                       ^
D7..D0_______  ________  ________  ________  ________  |
   _/10001100  00010001  10010000  11100100  11111000`_|______
      chan#0    chan#0    chan#0    chan#3    chan#3   |
    tone=h??C   =h11C    atten=0    div=16    atten=8  |
      h011C = 440 Hz              /16 = ~1 Khz         |
                                 white noise           |
                                                       |
                                                 noise restarts
                                            after /WE goes high and
                                     there was a write to noise register

Configurable clock divider

Clock divider can be controlled through SEL0 and SEL1 control pins and allows to select between 3 chip variants.

SEL1 SEL0 Description Clock frequency
0 0 SN76489 mode, clock divided by 16 3.5 .. 4.2 MHz
1 1 -----//----- 3.5 .. 4.2 MHz
0 1 SN76494 mode, no clock divider 250 .. 500 kHZ
1 0 New mode for TT05, clock div. 128 25 .. 50 MHz
SEL1 SEL0 Formula to calculate the 10-bit tone period value for a note
0 0 $clock_{frequency} / (32_{cycles} * note_{frequency})$
1 1 -----//-----
0 1 $clock_{frequency} / (2_{cycles} * note_{frequency})$
1 0 $clock_{frequency} / (256_{cycles} * note_{frequency})$

Some examples of music recorded from the chip simulation

  • [https://www.youtube.com/watch?v=ghBGasckpSY](Crazee Rider BBC Micro game)
  • [https://www.youtube.com/watch?v=HXLAdA02I-w](MISSION76496 tune for Sega Master System)

External hardware

DAC (for ex. Digilent R2R PMOD), RC filter, amplifier, speaker.

The data bus of the SN76489 chip has to be connected to microcontroller and receive a regular stream of commands. The SN76489 produces audio output and has to be connected to a speaker. There are several ways how the overall schematics can be established.

8-bit parallel output via DAC One option is to connect off the shelf data parallel Digital to Analog Converter (DAC) for example Digilent R2R Pmod to the output pins and route the resulting analog audio to piezo speaker or amplifier.

uController              SN76489
,---------.            ,---._.---. 
|         |    4 Mhz ->|CLK  SEL0|<-- 0
|    GPIOx|----------->|D0   SEL1|<-- 0
|    GPIOx|----------->|D1       |         ,----------.
|    GPIOx|----------->|D2   OUT0|-------->|LSB       |
|    GPIOx|----------->|D3   OUT1|-------->|          |  
|    GPIOx|----------->|D4   OUT2|-------->|   pDAC   |  Headphones
|    GPIOx|----------->|D5   OUT3|-------->|    or    |      or    
|    GPIOx|----------->|D6   OUT4|-------->| RESISTOR |    Buzzer    
|    GPIOx|----------->|D7   OUT5|-------->|  ladder  |         /|
|    GPIOx|----------->|/WE  OUT6|-------->|          |     .--/ |
`---------'            |     OUT7|-------->|MSB       |-----|    |
                       `---------'         `----------'     `--` |
                                                             |  `|
                                                             |
                                                        GND ---  

AUDIO OUT through RC filter Another option is to use the Pulse Width Modulated (PWM) AUDIO OUT pin that combines 4 channels with the Resistor-Capacitor based low-pass filter or better the Operation Amplifier (Op-amp) & Capacitor based integrator:

uController              SN76489
,---------.            ,---._.---. 
|         |    4 Mhz ->|CLK  SEL0|<-- 0
|    GPIOx|----------->|D0   SEL1|<-- 0
|    GPIOx|----------->|D1       |
|    GPIOx|----------->|D2       |
|    GPIOx|----------->|D3       |          C1
|    GPIOx|----------->|D4       |     ,----||----.
|    GPIOx|----------->|D5       |     |          | 
|    GPIOx|----------->|D6       |     |  Op-amp  |        Speaker     
|    GPIOx|----------->|D7  AUDIO|     |   |X     |            /|
|    GPIOx|----------->|/WE  OUT |-----+---|-X    |   C2   .--/ |
`---------'            `---------'         |  }---+---||---|    |
                                        ,--|+/             `--` |
                                        |  |/               |  `|
                                        |                   |
                                   GND ---             GND ---  

Separate channels through the Op-amp The third option is to externally combine 4 channels with the Operational Amplifier and low-pass filter:

uController              SN76489
,---------.            ,---._.---. 
|         |    4 Mhz ->|CLK  SEL0|<-- 0
|    GPIOx|----------->|D0   SEL1|<-- 0
|    GPIOx|----------->|D1       |
|    GPIOx|----------->|D2       |
|    GPIOx|----------->|D3       |           C1
|    GPIOx|----------->|D4       |      ,----||----.
|    GPIOx|----------->|D5  chan0|---.  |          | 
|    GPIOx|----------->|D6  chan1|---+  |  Op-amp  |        Speaker
|    GPIOx|----------->|D7  chan2|---+  |   |X     |            /|
|    GPIOx|----------->|/WE chan3|---+--+---|-X    |   C2   .--/ |
`---------'            `---------'          |  }---+---||---|    |
                                         ,--|+/             `--` |
                                         |  |/               |  `|
                                         |                   |
                                    GND ---             GND ---  

IO

#InputOutputBidirectional
0D0 data busdigital audio LSB(in) **/WE** write enable
1D1 data busdigital audio(in) **SEL0** clock divider
2D2 data busdigital audio(in) **SEL1** clock divider
3D3 data busdigital audio(out) channel 0 (PWM)
4D4 data busdigital audio(out) channel 1 (PWM)
5D5 data busdigital audio(out) channel 2 (PWM)
6D6 data busdigital audio(out) channel 3 (PWM)
7D7 data busdigital audio MSB(out) AUDIO OUT master (PWM)

Chip location

Controller Mux Mux Mux Mux Mux Mux Mux Mux Mux Mux Mux Analog Mux 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 (TinyTapeout Factory Test) tt_um_led_matrix_ayla_lin (32x8 LED Matrix Animation) tt_um_urish_charge_pump (Dickson Charge Pump) tt_um_rebeccargb_tt09ball_screensaver (TT09Ball VGA Screensaver) tt_um_urish_simon (Simon Says memory game) tt_um_rebeccargb_tt09ball_gdsart (TT09Ball GDS Art) tt_um_rebeccargb_vga_pride (VGA Pride) tt_um_levenshtein (Fuzzy Search Engine) tt_um_rebeccargb_colorbars (Color Bars) tt_um_jamesrosssharp_1bitam (1bit_am_sdr) tt_um_mattvenn_double_inverter (Analog double inverter) tt_um_htfab_hybrid (Telephone hybrid) tt_um_mattvenn_analog_ring_osc (Ring Oscillators) tt_um_brandonramos_opamp_ladder (2-bit Flash ADC) tt_um_wokwi_411783629732984833 (BINCounterAndGates) tt_um_rebeccargb_hardware_utf8 (Hardware UTF Encoder/Decoder) tt_um_patdeegan_anamux (Analog MUX module) tt_um_MichaelBell_hs_mul (8b10b decoder and multiplier) tt_um_rebeccargb_styler (Styler) tt_um_rebeccargb_vga_timing_experiments (VGA Timing Experiments) tt_um_rebeccargb_universal_decoder (Universal Binary to Segment Decoder) tt_um_rebeccargb_intercal_alu (INTERCAL ALU) tt_um_toivoh_pio_ram_emu_example (pio-ram-emulator example: Julia fractal) tt_um_2048_vga_game (2048 sliding tile puzzle game (VGA)) tt_um_tobimckellar_top (Simple PWM Module) tt_um_JesusMinguillon_freqSweep (freqSweep) tt_um_led_cipher (LED Bitserial Cipher) tt_um_wokwi_412367067047460865 (achasen workshop validation) tt_um_wokwi_412635532198550529 (tt09-pettit-wokproc-trainer) tt_um_my_elevator (Elevator Design) tt_um_wokwi_413387014781302785 (L display) tt_um_wokwi_413387348132056065 (S-R latch) tt_um_wokwi_413387032609197057 (Gabe's Big AND) tt_um_wokwi_413387015959903233 (Secret Code) tt_um_wokwi_413387076188030977 (joes-first-tiny-tapeout) tt_um_wokwi_413387481972305921 (Abey's 1st Chip Design) tt_um_wokwi_413391266378724353 (patrick's project) tt_um_wokwi_413387120998931457 (Shadoff Test) tt_um_wokwi_413387462882977793 (Tiny Tapeout Take 2) tt_um_wokwi_413387224567846913 (Speller) tt_um_wokwi_413387065339458561 (APA102 to WS2812 Translator) tt_um_wokwi_413387064715554817 (RAYS FIRST TAPEOUT rev 2) tt_um_wokwi_413387352465821697 (6 Bit shift register) tt_um_wokwi_413385294512575489 (Duffy) tt_um_wokwi_413387190167208961 (Will It NAND?) tt_um_wokwi_413386988538584065 (Bad Logic) tt_um_wokwi_413387186248679425 (Drew's First Wokwi Design) tt_um_wokwi_413387152803294209 (Pseudo Random Generator Using 2 Ring Oscillators) tt_um_wokwi_413387214966034433 (JonsFirstTapeout) tt_um_wokwi_413386991502909441 (SPI Logic Analyzer with Charlieplexed Display) tt_um_wokwi_413387122850717697 (And Gates that don't do much) tt_um_wokwi_413387009513254913 (SimplePattern) tt_um_wokwi_413387093939376129 (sphereinabox hello) tt_um_wokwi_413386973689694209 (Input Counter) tt_um_rburt16_opamp_3stage (OpAmp 3stage) tt_um_alf19185_ALU (4 bit ALU ) tt_um_rtfb_collatz (Collatz conjecture brute-forcer) tt_um_senolgulgonul (Senol Gulgonul tt09) tt_um_tnt_rom_test (TT09 SKU130 ROM Test) tt_um_tnt_rom_nolvt_test (TT09 SKY130 ROM Test (no LVT variant)) tt_um_Esteban_Oman_Mendoza_maze_2024_top (Space Detective Maze Explorer) tt_um_sebastienparadis_hamming_top (Hamming Code (7,4)) tt_um_couchand_analog_switch (Analog Switch) tt_um_prefix8 (tiny-tapeout-8bit-GPTPrefixCircuit) tt_um_lif_tk (LIF on a Ring Topology) tt_um_asheldon44_dsm_decimation_filter (Delta-Sigma ADC Decimation Filter) tt_um_juarez_jimenez (an lfsr with synaptic neurons (excitatory or inhibitatory)) tt_um_lif_clarencechan28 (Perceptron) tt_um_uart_mvm (Matmul System) tt_um_lif_sfiguerr (Adaptive Leaky Integrate and Fire Neuron) tt_um_algofoogle_tt09_ring_osc (Verilog ring oscillator) tt_um_pid_controller (PID Controller) tt_um_frequency_counter (Frequency Counter SSD1306 OLED) tt_um_delta_liafn (Delta RNN and Leaky Integrate-and-Fire Nueron Circuit) tt_um_devinatkin_basys3_uart (Basys 3 Over UART Link) tt_um_array_mult_structural_GnahsLliw (Array Multiplier) tt_um_array_mult_structural_sarahherrera (Array Multiplier) tt_um_a3_array_multiplier (Array multiplier) tt_um_a_4_array_multiplier (Array Multiplier) tt_um_secA_group5_array_multiplier (ECE-2204 4x4 Array Multiplier) tt_um_A_6_array_multiplier (ECE2204 4x4 Array Multiplier) tt_um_a_0_array_multiplier (Array Multiplier) tt_um_array_mult_structural (ece2204 project for tapeout) tt_um_m4rthaswur1d (4x4 array multiplier) tt_um_arry_mult_structural (4-bit-array-multiplier) tt_um_LabA_Group11 (Array_Multiplier) tt_um_pwm_top (Generador PWM multiproposito con frecuencia y ciclo de trabajo modulable) tt_um_lfsr_stevej (Linear Feedback Shift Register) tt_um_jamesrosssharp_tiny1bitam (Tiny 1-bit AM Radio) tt_um_instrumented_ring_oscillator (instrumented_ring_oscillator) tt_um_lif1 (STDP Circuit) tt_um_wokwi_413871526879619073 (4-1 mux) tt_um_wokwi_413872016164217857 (2bit adder) tt_um_alif (3 Neuron ALIF) tt_um_tiny_ternary_tapeout (T3 (Tiny Ternary Tapeout)) tt_um_snn_with_delays_paolaunisa (ChatGPT-generated Spiking Neural Network with Delays) tt_um_kmakise_sram (OpenRAM SRAM macro) tt_um_secA_11_nyancar_alanz23 (ece2204_4x4_mult) tt_um_arandomdev_fir_engine_top (FIREngine) tt_um_b_0_array_multiplier (Lab B Group 1 Array Multiplier) tt_um_b_2_array_multiplier (Array Multiplier) tt_um_b_6_array_multiplier (4x4 Array Multiplier) tt_um_multiplier (4x4 Array Multiplier) tt_um_b_12_array_multiplier (ECE2204 4x4 Array Multiplier) tt_um_wokwi_413686101237123073 (comparator) tt_um_B_14_array_multiplier (4x4 Array Multiplier) tt_um_secB_15_array_multiplier (Array Multiplier) tt_um_array_mult_joe_leighthardt (4 bit array multiplier) tt_um_carryskip_adder8 (8-bit carry-skip) tt_um_riscv_mini (RISC-V Mini) tt_um_CLA8 (8-bit Carry Look-Ahead Adder) tt_um_hybrid_adder (Hybrid_Adder_8bit) tt_um_C_1_4bit_multiplier (my_4bit_multiplier) tt_um_c_2_array_mult (4-bit-multiplier) tt_um_c7_array_mult (4-bit Multiplier) tt_um_4x4multiplier (4x4multiplier) tt_um_c13_array_mult (4-bit Multiplier) tt_um_arrayMultFajrSahana (4x4 Multiplier) tt_um_wokwi_413916532008126465 (tt09 kathyhtt ) tt_um_wokwi_413919522908184577 (TINY TAPE OUT) tt_um_wokwi_413923260134423553 (TinyTapeout1) tt_um_wokwi_413919531169918977 (FB GDS) tt_um_wokwi_413919794360480769 (Metastable Chip) tt_um_four_bit_multiplier_nasan016_npham2003 (4-bit Multiplier) tt_um_wokwi_413919484652961793 (halfadder+not) tt_um_wokwi_413918279810604033 (MuxLED) tt_um_wokwi_413919458626244609 (Jacks First Project) tt_um_wokwi_413919492911554561 (Half adder) tt_um_wokwi_413919972072132609 (Andrew Vo - Repository) tt_um_wokwi_413919970097662977 (Dipankar's first Wowki design) tt_um_wokwi_413923245817165825 (Hamad's design) tt_um_wokwi_413919502227108865 (Encoder) tt_um_wokwi_413923188546028545 (GDS) tt_um_wokwi_413920370058172417 (2 Bit Times 2 Bit Plus 4 Bit MAD and 5 Bit Binary to 7 Segment Display) tt_um_wokwi_413918244906651649 (Not Good BCD Decoder) tt_um_wokwi_413919507057902593 (tinytapeoutkr) tt_um_wokwi_413920096493033473 (My First ASIC) tt_um_wokwi_413921849611724801 (Yared Fente's Tiny Tapeout) tt_um_wokwi_413918243645213697 (Yohan Tiny Tapeout Project) tt_um_wokwi_413919889872144385 (Tiny Tapeout) tt_um_4x4_array_multiplier_NuKoP (4 x 4 array multiplier NuKoP) tt_um_wokwi_413920489444856833 (Samson's Tiny Tapout Project) tt_um_wokwi_413923702485727233 (tinytapeout) tt_um_wokwi_413919752282163201 (Trubick - Tiny Tapeout Logic Gate) tt_um_wokwi_413925554587918337 (D_flipflop_hold_test) tt_um_wokwi_413919500942601217 (Bit Counter) tt_um_wokwi_413919666547418113 (Full bit adder) tt_um_wokwi_413920825278643201 (Encoder) tt_um_wokwi_413919543420439553 (Big J's Big Circuit) tt_um_wokwi_413919927206703105 (AndLogicPass) tt_um_wokwi_413920640800531457 (Half Adder) tt_um_wokwi_413917903548951553 (Jordan) tt_um_wokwi_413919465666386945 (OR gate) tt_um_wokwi_413920442846133249 (TinyTapeOut) tt_um_wokwi_413920033033205761 (Tiny Tapeout-Huerta) tt_um_wokwi_413923202390383617 (Light LED) tt_um_wokwi_413923150973445121 (Zero to Nine Display Count) tt_um_wokwi_413919565287453697 (APTT) tt_um_wokwi_413919777312727041 (Tahiti) tt_um_wokwi_413920089540972545 (Secret Initial) tt_um_wokwi_413919675346023425 (GJAA Design) tt_um_wokwi_413919847886104577 (Logic Gates) tt_um_wokwi_413921288682183681 (My First TinyTapeout) tt_um_wokwi_413919524873217025 (1st) tt_um_wokwi_413919454053401601 (JCB First WOKWI Design) tt_um_wokwi_413923045171059713 (Logic Gates 7-Segment Display) tt_um_wokwi_413919767806333953 (BadeTP) tt_um_wokwi_413919428470231041 (Lynn's TinyTapeout Design) tt_um_wokwi_413929752291913729 (project) tt_um_wokwi_413923521595851777 (Nathan's chip) tt_um_wokwi_413920340558577665 (Light) tt_um_uart_mvm_sys (Matmul System) tt_um_wokwi_413407859783959553 (Redco) tt_um_wokwi_413849515516143617 (Two PFD) tt_um_wokwi_413919454138338305 (Letter H) tt_um_wokwi_413960876763056129 (Binary to 7 Segment Display Decoder) tt_um_MichaelBell_hd_8b10b (8b10b decoder and multiplier) tt_um_program_counter_top_level (Test Design 1) tt_um_murmann_group (Decimation Filter for Incremental and Regular Delta-Sigma Modulators) tt_um_adder_accumulator_sathworld (adder-accumulator) tt_um_control_block (8-Bit CPU) tt_um_LFSR_Encrypt (LFSR Encrypter) tt_um_cdc_test (SkyKing Demo) tt_um_two_lif_stdp (Two LIF Neurons with STDP Learning) tt_um_underserved (ITS-RISCV) tt_um_mbkmicdec_ringosc (Time_Domain_Comparator_ITS) tt_um_znah_vga_ca (znah_vga_ca) tt_um_tim2305_adc_dac (tt_um_tim2305_adc_dac) tt_um_mikegoelzer_7segmentbyte (7-Segment Byte Display) tt_um_idann (Forward Pass Network for Simple ANN) tt_um_micro_tiles_container (Micro tile container) tt_um__kwr_lfsr__top (Multi-LFSR) tt_um_wokwi_413923639862662145 (xor gate with registered output ) tt_um_carryskip_adder9 (carry skip adder) tt_um_mroblesh (Frequency Encoder and Decoder) tt_um_wokwi_411379488132926465 (Semana UCU Verilog) tt_um_rejunity_atari2600 (Atari 2600) tt_um_rejunity_z80 (Zilog Z80) tt_um_b_8_array_multiplier (4 by 4 Array Multiplier) tt_um_C8_array_mult (4-bit multiplier) tt_um_tt09_array_multiplier (Array Multiplier) tt_um_array_mult_structural_sectionD_group3 (4-bit Array Multiplier) tt_um_d_4_array_multiplier (ECE-UY 2204 4x4 Array Multiplier) tt_um_couchand_cora16 (CORA-16) tt_um_secd_8_array_mult (array_multiplier) tt_um_kashmaster_carryskip (8-bit-CARRY_SKIP) tt_um_tiny_ternary_tapeout_csa (T3 (Tiny Ternary Tapeout) CSA ) tt_um_array_secD7 (Tiny Tapeout Group 7 Lab D) tt_um_chip4lyfe (Leaky Integrate Fire Neuron) tt_um_ronikant_jeremykam_tinyregisters (Tiny Registers) tt_um_c_4_4b_mult (4bit multiplier) tt_um_section_d_group_fifteen_array_mult_structural (ECE2204MultiplierProject) tt_um_VanceWiberg_top (Team 17's 8 bit DAC) tt_um_claudiotalarico_counter (4-bit up/down binary counter) tt_um_wokwi_413471588783557633 (TT Test) tt_um_gmejiamtz (Configurable Logic Block) tt_um_I2C (I2C and SPI) tt_um_perceptron_mtchun (Perceptron Neuron) tt_um_histogramming (Histogramming) tt_um_SarpHS_array_mult (4-bit Multiplier) tt_um_gfcwfzkm_scope_bfh_mht1_3 (Basic Oszilloscope and Signal Generator) tt_um_MichaelBell_rle_vga (RLE Video Player) tt_um_ece298a_8_bit_cpu_top (8-Bit CPU) tt_um_Coline3003_top (15 channels emission counter) tt_um_wokwi_414107691971107841 (Steven's Wokwi Test) tt_um_dlmiles_dffram32x8_2r1w (Tiny RAM DFF 2r1w) tt_um_urish_sic1 (SIC-1 8-bit SUBLEQ Single Instruction Computer) tt_um_Coline3003_spect_top (Spectrogram extractor, 2 channels) tt_um_c1_array_mult_structural (Lab C 4x4 Mult-Array) tt_um_CarrySelect8bit (carry_select) tt_um_koggestone_adder8 (test_friday2) tt_um_Rapoport (Perceptron) tt_um_cellular_alchemist (Hopfield Network with Izhikevich-type RS and FS Neurons) tt_um_wokwi_414120207283716097 (fulladder) tt_um_wokwi_414120357164073985 (2-Bit-Adder) tt_um_wokwi_414121442515858433 (Mini-Adder and Clock Divider) tt_um_wokwi_414121715329142785 (Sigma-Delta ADC) tt_um_wokwi_414120407679244289 (3bitFullAdder) tt_um_wokwi_414121532514097153 (TinyTapeout workshop - Wokwi 8 Bit LFSR) tt_um_wokwi_414120518107969537 (4 bit adder) tt_um_wokwi_414120696731857921 (Broken Two Bit Adder) tt_um_wokwi_414120263584922625 (8 bit LFSR) tt_um_wokwi_414121421011660801 (2_bit_7seg) tt_um_wokwi_414120404427608065 (7-seg display checker) tt_um_wokwi_414120472316644353 (tt09-4bit-adder-dhags) tt_um_wokwi_414120591467404289 (XorTree) tt_um_wokwi_414124872671308801 (Morse Code for J and R) tt_um_wokwi_414125777368065025 (Tiny_Tapeout_Adder!) tt_um_wokwi_414120492890759169 (Manchester Encoder) tt_um_wokwi_414120201832165377 (Odd or even) tt_um_wokwi_414125058137148417 (Adbe_Project) tt_um_wokwi_414120372939908097 (Full Adder) tt_um_wokwi_414120379026893825 (TT-Farhad) tt_um_wokwi_414120157271867393 (Four Bit Adder) tt_um_wokwi_414124843472659457 (2 bit adder) tt_um_wokwi_414120239772801025 (AND and NOT gate testing) tt_um_wokwi_414124597390729217 (Kanoa's first Wokwi deseign Tinytapeout 2024 Nonsense) tt_um_wokwi_414120415300298753 (add it) tt_um_wokwi_414117926152578049 (one) tt_um_wokwi_414120459831246849 (Full Adder) tt_um_wokwi_414117854728812545 (four flip flops) tt_um_wokwi_414120320168203265 (Tiny Tapeout 9 Template) tt_um_wokwi_414120583702696961 (half adder) tt_um_tinysynth (Tinysynth) tt_um_wokwi_414120349028170753 (LCA’s first Wokwi design) tt_um_wokwi_414120435997105153 (7-bit arbiter) tt_um_wokwi_414120378768943105 (Counter) tt_um_wokwi_414120800422397953 (Full adder Design) tt_um_wokwi_414118423095874561 (Vincent's First Design) tt_um_wokwi_414120248222232577 (A Tale of Two NCOs) tt_um_a1k0n_nyancat (VGA Nyan Cat) tt_um_tommythorn_workshop (Workshop demo) tt_um_lrc_stevej (LRC - Longitudinal Redundancy Check generator) tt_um_wokwi_414120202583995393 (print) tt_um_wokwi_414120500233937921 (hello) tt_um_wokwi_414120569974735873 (Full Adder) tt_um_wokwi_414120295047458817 (NAND-Equ) tt_um_wokwi_414120388391730177 (adder-tt09) tt_um_wokwi_414120414884012033 (Ripple counter) tt_um_wokwi_414120509472942081 (rand) tt_um_wokwi_414121555407659009 (rhTinyTapeout) tt_um_wokwi_414120432405727233 (chip) tt_um_wokwi_414122362169493505 (NAND Flip-Flop) tt_um_shifter (Shifter) tt_um_wokwi_414124428088683521 (seven) tt_um_wokwi_414120513895838721 (gatesoup) tt_um_wokwi_414120303651028993 (Tiny Tapeout 9 Template Version 1 Tata Luka) tt_um_wokwi_414122607025630209 (UART TX) tt_um_wokwi_414120368966850561 (my First WokWi Design) tt_um_wokwi_414120299211357185 (Tiny Tapeout 9) tt_um_schoeberl_test (tinydsp-lol) tt_um_anislam (Leaky integrate and fire spiking neural network) tt_um_wokwi_414126546375915521 (2-bit Full Adder) tt_um_wokwi_414174625969437697 (Name Speller) tt_um_wokwi_414127944900611073 (gta6) tt_um_ericsmi_mips (mips.sv) tt_um_systolicLif (Basic model for Systollic array implementation of LIF) tt_um_algofoogle_tt09_ring_osc2 (Verilog ring oscillator V2) tt_um_dff_mem (dff_mem) tt_um_nomuwill (16 Bit Izhikevich Neuron) tt_um_digital_clock_example (7-Segment Digital Desk Clock) tt_um_udxs (Basic Perceptron + ReLU) tt_um_matrix_mult (Basic Matrix-Vector Multiplication) tt_um_db_MAC (8 bit MAC Unit) tt_um_anas_7193 (Programmable PWM Generator) tt_um_flyingfish800 (Verilog test project) tt_um_project (Basic LIF Neuron) tt_um_lifn (Integrate-and-Fire Neuron Circuit) tt_um_wokwi_413921836641882113 (ovl abc chip) tt_um_mickey_pll (pll) tt_um_rejunity_e2m0_x_i8_matmul (E2M0 x INT8 Systolic Array) tt_um_michaelmcculloch_alu (Michaels Tiny Tapeout ALU) tt_um_dog_BILBO (8-bit CBILBO) tt_um_stochastic_integrator_tt9_CL123abc (Stochastic Integrator) tt_um_vga_clock (VGA clock) tt_um_z2a_rgb_mixer (RGB Mixer demo) tt_um_samkho_two_channel_square_wave_generator (TwoChannelSquareWaveGenerator) tt_um_mattvenn_r2r_dac_3v3 (Analog 8 bit 3.3v R2R DAC) tt_um_b_10_array_multiplier (Lab B Group 10 Array Multiplier) tt_um_urish_giant_ringosc (Giant Ring Oscillator (3853 inverters)) tt_um_htfab_caterpillar (Simon's Caterpillar) tt_um_anders_tt_6502 (tt6502) tt_um_wokwi_414123795172381697 (TinySnake) tt_um_oscillating_bones (Oscillating Bones) tt_um_r2r_dac (4-bit R2R DAC) tt_um_tinytinfoil_saradc_dac (Noise test for a CDAC capacitor chain) tt_um_purdue_socet_uart (SoCET UART) tt_um_rejunity_sn76489 (Classic 8-bit era Programmable Sound Generator SN76489) tt_um_rejunity_ay8913 (Classic 8-bit era Programmable Sound Generator AY-3-8913) tt_um_tommythorn_cgates (Cgates) tt_um_09eksdee (eksdee) tt_um_13hihi31_tdc (Time to Digital Converter) tt_um_rejunity_decoder (ternary, E1M0, E2M0 decoders) tt_um_analog_example (Digital OTA) tt_um_kailinsley (Dynamic Threshold Leaky Integrate-and-Fire) tt_um_C6_array_multiplier (tt09-C6-array-multiplier) tt_um_rejunity_vga_test01 (VGA Drop (audio/visual demo)) tt_um_wallento_4bit_toycpu (4-Bit Toy CPU) tt_um_warp (Warp) tt_um_algofoogle_tt09_ring_osc3 (Verilog ring oscillator V3) tt_um_kev_ma_matmult222 (2-bit 2x2 Matrix Multiplier) tt_um_wokwi_414041465275103233 (SK Test Workshop) tt_um_rejunity_vga_logo (VGA Tiny Logo (1 tile)) tt_um_toivoh_demo (Sequential Shadows [TT08 demo competition]) tt_um_liaf (A simple leaky integrate and fire neuron) tt_um_wokwi_413879612498222081 (Clocked Display) tt_um_wokwi_413919625901452289 (Encoder) tt_um_wokwi_413919442353385473 (Encoder) tt_um_wokwi_413919540668975105 (First Tapeout Chip - OCR) tt_um_wokwi_413918022277139457 (Half Adder) tt_um_wokwi_414120435095328769 (Kai's Death Adder) tt_um_wokwi_413919775044656129 (Kevin Project) tt_um_lif_network_MR (Leaky Neuron Network) tt_um_lsnn_hschweig (Neuromorphic Hardware for SNN LSTM) tt_um_wokwi_413387065963362305 (Project) tt_um_Nishanth_RISCV (RISCV Processor Design) tt_um_wokwi_413883347321632769 (Test_project) tt_um_KoushikCSN_RISCV (RISCV Processor Design) tt_um_wokwi_414120868401584129 (Tian TT9) tt_um_wokwi_414120391864616961 (Tiniest of tapeouts) tt_um_wokwi_414120458938907649 (Who knows what's happening Tiny Tapeout) tt_um_wokwi_413919833599252481 (YoshiTP) tt_um_wokwi_414118269335820289 (chip_fab) tt_um_wokwi_414121281003682817 (dummy) tt_um_wokwi_414124471705253889 (sarah's first chip) tt_um_ccu_goatgate (tiny cipher 4 bit key) tt_um_wokwi_414120526876163073 (2 input multiplexor) tt_um_lif_ZB (Tutorial: Simple LIF Neuron) 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 Available Available Available Available Available Available Available Available Available Available