716 Sequential Shadows [TT08 demo competition]

716 : Sequential Shadows [TT08 demo competition]

Design render
  • Author: Toivo Henningsson
  • Description: My contribution to the TT08 demo competition
  • GitHub repository
  • Clock: 50400000 Hz

Intro

Curly / Medieval presents

my contribution to the Tiny Tapeout 8 demo competition. Code, graphics, and music by Curly (Toivo Henningsson) of Medieval.

The demo can be seen at https://youtu.be/pkiTu3iLA_U (captured from a Verilator simulation).

How it works

The demo code contains a few different parts:

  • Ray caster
  • Synthesizer
  • Music sequencer
  • Logo
  • Combined timing generator for raster scan and synthesizer
  • Dithering
  • Top level sequencer
  • Audio visualizer

The code was first written without the audio visualizer and top level sequencer. At this point, there was music, but the demo was always showing the same moving landscape as in the intro (without fade-in) with the static logo on top. Also, there was not very much space left.

To add more contents, I went through the code looking for narrow control signals that might do interesting things when changed, and experimented on FPGA with changing them to see if I could get any interesting results. Examples:

  • Sine plasma: Disable 3D part of ray caster
  • Logo animation: Change address calculation into logo bitmap
  • Jagged landscape: Change when bits are inverted in sine table lookup to modify part of sine function

The final steps were to choose which of these effects to use and to tweak the demo until I ran out of area and time.

Ray caster

The ray caster is used to generate the landscapes. The height map is procedurally generated as the sum of 3 sine waves; there was no space to store a full height map. A sine table is used since the sine calculation needs to be fast. Summing 3 sine waves means that each height can be evaluated in 3 cycles, or 1.5 VGA pixels.

The calculated ground height is accumulated and stored in a register. The next ground height can start to be calculated directly, but has to wait to update the register until the previous height is no longer needed. There is also a mode to feed the sum of the 3 sine waves through the sine table to produce the final ground height, requiring 4 cycles per ground height evaluation.

Each sine term has its own phase and phase increment registers. Each phase increment is set based on an angle that is increased for each scan line to look in different directions. The angle is fed through the sine table (and the result scaled) to get the phase increment. The initial phases and the initial angles for the phase increments are updated each frame to animate the landscape.

The ray caster keeps track of the current ray height z, starting at eye level, and current z increment dz, starting at 511 (pointing down as much as possible). If z is above ground, the ray steps forward using dz, and the landscape steps forward to calculate a new height. If z is below ground, the ray steps up by decreasing dz by one, and decreasing z by the distance t the ray has travelled so far. This steps up to the ray given by the new dz value.

The ray caster has to produce output pixels in time with the VGA timing, starting from the left side of each scan line and producing a new pixel every two cycles. The x coordinate where a ground hit should be displayed corresponds to the downward angle of the ray, and is given by 511-dz. If the ray caster is about to run ahead of the display (x) coordinate, it waits for the display coordinate to catch up. If the ray caster is running behind the display coordinate, as often happens after running over the top of a hill in the landscape, a shadow (black pixel) is displayed while the ray tries to catch up.

As dz decreases along the scan line, a longer distance along the ray is needed to find each new ground hit. To be able to keep up with the display coordinate, the step length when moving along the ray is successively doubled after a given number of steps. This works out ok visually since details appear smaller at greater distances, so the increased step lengths don't lose as much detail as they would if they were used from the start.

Synthesizer

The synthesizer is based on a small ALU, with one accumulator register and 7 numbered registers, each 11 bits wide. A program of 100 ALU operations is looped, producing a new sample value between 0 and 99 for each loop. The program is used to calculate sawtooth, triangle, and square waves, and sum them to create the output sample. For the chords, 6 sawtooth waves are calculated based on the same oscillator value (and the global counter) and added together.

All ALU operations update the accumulator. The accumulator value can then be written to a numbered register. The numbered registers are implemented with latches, and the accumulator value should be held constant while updating one to make sure that the correct value is written. Fortunately, the numbered registers don't need to be updated that often. The numbered registers are:

  • chord phase
  • drum phase
  • bass phase
  • lead phase
  • B: temporary register
  • output accumulator
  • output (written during the last cycle in the loop, never read by the ALU)

The output from the previous sample is compared to the current loop position to create a PWM signal to output as the sound signal.

The phase values for the channels are updated in a similar way to the synth in https://github.com/toivoh/tt06-retro-console, with bit reversed phase compared to mantissa to get a sawooth wave, and octave divider.

Wave forms used:

  • chords: detuned sawtooth
  • drum: triangle (with descending frequency)
  • bass: triangle
  • lead: sawtooth or square, sometimes detuned

Detuning is created by calculating and adding the same waveform twice, but adding the global counter to the phase in one of the cases, suitably shifted.

The chords use different multipliers on the chord phase:

  • major chord: 8, 10, 12
  • minor chord: 10, 12, 15
  • sus2 chord: 8, 9, 12

doubling some of the multipliers to create chord inversions. Each multiplication is calculated as the sum of two shifts. The chord phase is multiplied by each multiplier in turn, creating a sawtooth waveform that is added to the output.

Each ALU instruction has a tag field. A nonzero tag signifies conditional execution for different effects: rase the bass drum one octave, change the lead waveform into a square wave, etc...

Logo

The logo stores two bits per 16x16 pixel square, one for each triangle half. Which one to look up is calculated from the current screen coordinates, and an offset for the logo animation effect.

Top level sequencer

As much as possible is derived from the global counter. This includes the top level sequencer, which is basically a big case statement that sets different control signals depending on the current frame. Some of the control signals feed into the music sequencer to change the music (alternate melody and bass line, change lead between sawtooth and square wave, raise the bass one octave, ...).

Audio visualizer

The audio is produced in sync with the VGA signal, 8 samples per scan line, so the audio visualizer mostly needs to look at the current audio output (0 or 1) after PWM comparison to decide the current pixel value. The synthesizer's ALU program was updated to invert every other sample value, and the audio output is also inverted for these samples. This creates the mirroring effect in the visualizer (and also makes the PWM output almost phase correct).

The music was transposed so that the root note is roughly a power of two times 60 Hz. This avoids most audio channels feeding flicker into the audio visualizer. The drums were cut a bit short when the visualizer is on, since their descending frequency can't avoid creating flicker. The bass line was raised one octave when the visualizer is on, and the amplitude is halved, which also reduces flicker substantially.

How to test

Plug in a TinyVGA compatible Pmod on the TT08 demo board's out Pmod. Plug in a Pmod compatible with Mike's audio Pmod on the TT08 demo board's bidir Pmod. Set all inputs to zero to get the default behavior. Warning: The default behavior includes some flashing ligts. Set v_bass_off and v_drums_off (keep ui_in at 3 instead of 0) to remove flashing. The demo starts directly after reset.

This demo is best viewed with the monitor rotated 90 degrees, with the left side facing down.

Inputs

There is no guarantee that changing the inputs after reset is released works as intended, but it probably does. Some of the inputs provide options on how the demo is run:

  • v_bass_off: Setting this high reduces flashing when the audio visualizer is on by turning off the bass.
  • v_drums_off: Setting this high reduces flashing when the audio visualizer is on by turning off the drums.
  • v_bass_low: Setting this high keeps the bass at its default octave even when the audio visualizer is on, which increases flashing.
  • pause: While this is high, the demo is paused and the sound is turned off. Can probably be used to start the demo paused.
  • step_frame: While this is high, the the demo advances one frame per cycle. Used for testing.

External hardware

This project needs

IO

#InputOutputBidirectional
0v_bass_offR1
1v_drums_offG1
2v_bass_lowB1
3pausevsync
4R0
5G0
6B0
7step_framehsyncaudio_out

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