865 16-bit bit-serial CPU

865 : 16-bit bit-serial CPU

Design render

TinyTapeout 16-Bit-Serial CPU

Andrew Wang, Tim Gu

A bit-serial CPU processes one bit of a data word at a time using minimal logic - often reusing a small ALU and control unit across clock cycles. This is in contrast to a bit-parallel CPU, which processes entire data words (e.g., 8/16/32 bits) at once.

Processing a single bit at a time instead of in parallel means that the CPU is much slower, but it can be made much smaller. This makes the bit-serial architecture very suitable for a submission to TinyTapeout in which a chip area of 160 x 100 um is one of the primary constraints.

In this design, 16-bit width instructions are fed into the CPU over two clock cycles using the 8 TinyTapeout input signals. These instructions are decoded and the relevant operands (either immediates or stored values from a register file) are processed bit-serially from LSB to MSB and shifted into an accumulator register. The CPU supports parallel load operations to the accumulator and storing results from the accumulator to an addressable register file.

GDS Render

<img width="2021" height="1550" alt="gds_render" src="https://github.com/user-attachments/assets/af303a02-cf40-4cd0-9aa9-7db6f32abe07" />

Functional Use (Instruction Loading)

Instruction Set

Opcode Mnemonic C Operation Description
0000 ADDI acc = rs1 + imm Add Immediate
0001 SUBI acc = rs1 - imm Subtract Immediate
0010 SLLI acc = rs1 << imm Shift left Immediate
0011 SRLI acc = rs1 >> imm Shift right Immediate
0100 ORI acc = rs1 | imm Bitwise OR Immediate
0101 ANDI acc = rs1 & imm Bitwise AND Immediate
0110 XORI acc = rs1 ^ imm Bitwise Exclusive OR Immediate
0111 LOADI acc = imm Load immediate into accumulator
1000 ADD acc = rs1 + rs2 Add Registers
1001 SUB acc = rs1 - rs2 Subtract Registers
1010 OR acc = rs1 | rs2 Bitwise OR Registers
1011 AND acc = rs1 & rs2 Bitwise AND Registers
1100 XOR acc = rs1 ^ rs2 Bitwise Exclusive OR Registers
1101 LOAD acc = rs1 Load from register into accumulator
1110 STORE rs1 = acc Store from accumulator into register

TinyTapeout Signals Used

Pin Group Type Usage
ui_in[7:0] Input Instruction bit inputs
uio_in[0] Bidirectional Pushbutton input for instruction loading
uo_out[7:0] Output Parallel output
clk Clock Clock input
rst_n Reset Active low synchronous reset

16-bit Instruction Bit Fields

I-Type (opcode[3] == 0)
[15:8] [7] [6:4] [3:0]
immediate[7:0] unused rs1_addr[2:0] opcode[3:0]
R-Type (opcode[3] == 1)
[15:11] [10:7] [6:4] [3:0]
unused rs2_addr rs1_addr[2:0] opcode[3:0]

Instructions are loaded manually over two clock cycles via button press:

First press:

  • Lower 4 bits (ui_in[3:0]) are latched into opcode[3:0]
  • Upper 4 bits (ui_in[7:4]) go into instr[3:0]
  • inst_done is set high

Second press:

  • ui_in[7:0] fills in instr[11:4]
  • inst_done is cleared

An edge-detected pushbutton (connected via uio_in[0]) triggers instruction loading. Once loaded, the FSM executes the instruction, and the final result is output on uo_out[7:0].

Architecture

Block Diagram

<img width="2719" height="1014" alt="image" src="https://github.com/user-attachments/assets/c0e4eb80-4685-4eb3-b876-7a634d39eb94" />

Control FSM

The fsm_control module orchestrates datapath sequencing using a 5-state FSM:

  1. S_IDLE = 0x0: Waits for button press and valid instruction

  2. S_DECODE = 0x1: Decodes opcode, issues control signals for load/store/ALU

  3. S_SHIFT_REGS = 0x2: Performs serial operations; enables register shifting and accumulator writes

  4. S_WRITE_ACC = 0x3: Special case state for direct writes (not commonly used)

  5. S_OUTPUT = 0x4: Signals end of execution and enables writing to output LEDs

The FSM generates control signals including reg_shift_en, acc_write_en, alu_start, alu_op, and out_en based on instruction type.

Register File

The regfile_serial module implements an 8x8 register file, where each register is 8 bits wide. It supports:

  • Serial read: each clock cycle, the bit_index increments, allowing serial bit access.
  • Parallel write: a whole 8-bit register is overwritten at once from the accumulator.
  • Shift operations: for shift-left/right immediate (SLLI/SRLI), rs1_bit is offset by shift_imm, computed from instr[6:4].

The register file outputs:

  • rs1_bit: used as ALU operand 1
  • rs2_bit: used as ALU operand 2 (only valid for R-type)
  • regfile_bits: parallel content of the selected rs1 register, for LOAD/LOADI
Bit-Serial ALU

The alu_1bit module performs a one-bit computation per cycle based on alu_op:

  • Supports operations: ADD, SUB, XOR, AND, OR, pass-through (for shift ops).
  • carry_in and carry_out are managed explicitly to support serial arithmetic.
  • For SUB, rs2 is inverted and an initial carry is injected on the first cycle.

The ALU receives rs1, rs2, alu_op, alu_start, and outputs a single-bit result to the accumulator.

Accumulator Register

The accumulator is an 8-bit shift register that:

  • Loads data in parallel from regfile_bits or instr[11:4] (based on opcode[3])
  • Receives ALU output one bit at a time via alu_result
  • Tracks the write index using a delayed bit_index_d signal to update the correct bit and signals completion when done

The accumulator provides the final output via acc_bits.

Test Plan

This project uses a black-box testing strategy to validate the behavior of the bit-serial CPU.

  • Inputs: Sequences of instructions are applied to the design via ui_in[7:0] and a simulated pushbutton uio_in[0].
  • Outputs: uo_out[7:0] is compared against the expected result to determine if the CPU gives the correct output.
  • Clock and Reset: Controlled via clk and rst_n.

This is a clean abstraction of test logic that reflects the real-world usage model of the CPU with portability to gate-level simulations.

A cocoTB testbench is used to run tests in Python. Each test uses the following structure:

  1. Begin by starting the system clock and asserting/deasserting reset.
  2. Instructions are loaded using simulated button presses. After an instruction load, insert a delay matching the bit-serial ALU's processing time (via await ClockCycles(...)) before giving the next instruction.
  3. Compare uo_out against the expected result using assert_result(...). A test fails if the result mismatches or the CPU fails to update the output.

Test Coverage

full.py
  • Instructions: All (R-type, I-type, LOAD, STORE, LOADI, shifts)
  • Strategy: Executes a full sequence of loads, arithmetic, logical and memory ops to test integration across all instruction types.
  • Modules:
    • top.v
    • fsm_control.v
    • cpu_core.v
    • regfile_serial.v
    • accumulator.v
    • alu_1bit.v
  • Features: Full FSM flow; end-to-end bit-serial execution; regfile store/load; instruction-decode logic

Example:

  • Operation: LOADI 0x2D
  • Expected result: 0x2D <img width="1217" height="869" alt="image" src="https://github.com/user-attachments/assets/685b6ed6-9bf2-432a-b280-d606e5539934" />
alu_ops.py
  • Instructions: ADD, SUB, AND, OR, XOR, LOADI, STORE
  • Strategy: Loads fixed values into registers; runs R-type ALU instructions; checks accumulator result.
  • Modules: fsm_control.v, cpu_core.v, regfile_serial.v, accumulator.v, alu_1bit.v
  • Features: Bit-serial ALU correctness; regfile serial access; R-type decode; accumulator correctness

Example:

  • Setup: R3 contains 0x73, R4 contains 0x2D
  • Operation: XOR R3, R4
  • Expected result: 0x5E <img width="1684" height="856" alt="image" src="https://github.com/user-attachments/assets/41db3e04-fcba-4719-9a9c-b11cd0cde3a1" />
imm_alu_ops.py
  • Instructions: ADDI, SUBI, ANDI, ORI, XORI, LOADI, STORE
  • Strategy: Sets known register values; executes I-type ops with immediates; checks accumulator output.
  • Modules: fsm_control.v, cpu_core.v, regfile_serial.v, accumulator.v, alu_1bit.v
  • Features: Immediate-decode logic; bit-serial ALU with immediate operand; regfile serial access; accumulator correctness

Example:

  • Setup: R3 contains 0x73, R4 contains 0x2D
  • Operation: SUBI R3, 0x2C
  • Expected result: 0x47 <img width="1684" height="901" alt="image" src="https://github.com/user-attachments/assets/f4138d6a-19f4-46eb-b4e2-71315d5c8499" />

Note that in this case, the bits in the I-type instruction that correspond to the rs2 address are a value of 4. However, the mux logic correctly selects the immediate bits for use in the ALU rather than using R4 as the second operand.

shift_ops.py
  • Instructions: SLLI, SRLI, LOADI, STORE
  • Strategy: Loads values into registers; shifts left/right by various immediates; checks accumulator.
  • Modules: fsm_control.v, cpu_core.v, regfile_serial.v, accumulator.v
  • Features: Shift-index calculation; bit-serial offset-shifting; regfile serial access; accumulator correctness

Example:

  • Setup: R6 contains 0x12
  • Operation: SLLI R6, 0x02
  • Expected result: 0x48 <img width="1717" height="888" alt="image" src="https://github.com/user-attachments/assets/9b64fd95-4092-4d5a-bcf6-ff4758816b37" />

Test Results

tests.full.test_alu_ops
  • Status: PASS
  • SIM Time: 1 650 000 ns
  • Real Time: 0.02 s
  • Ratio: 1.05 x 10^8 ns/s
tests.full.test_imm_alu_ops
  • Status: PASS
  • SIM Time: 1 660 000 ns
  • Real Time: 0.02 s
  • Ratio: 1.10 x 10^8 ns/s
tests.full.test_shift_ops
  • Status: PASS
  • SIM Time: 1 430 000 ns
  • Real Time: 0.01 s
  • Ratio: 1.15 x 10^8 ns/s
tests.full.test_full
  • Status: PASS
  • SIM Time: 3 730 000 ns
  • Real Time: 0.03 s
  • Ratio: 1.10 x 10^8 ns/s

  • TOTAL: TESTS = 4, PASS = 4, FAIL = 0, SKIP = 0
  • Aggregate SIM Time: 8 470 000 ns
  • Aggregate Real Time: 0.11 s
  • Overall Ratio: 7.68 x 10^7 ns/s

Project Duties & Contributions

Andrew W:

  • Initial planning and design bring-up of data pipeline, instruction width, and design considerations
  • Designed Verilog module hierarchy, top-level integration & module connections in top.v and cpu_core.v
  • Designed and implemented the finite state machine (FSM) in fsm_control.v for instruction decode and control sequencing
  • Maintained local hardening workflow, comparing gate-level tests to GitHub CI jobs
  • Debugged and fixed RTL flaws
  • Documented high-level interfacing and low-level design process

Tim G:

Documentation & Planning
  • Defined instruction set - opcodes, bit field layout, and supported operations for both R-type and I-type instructions
  • Created the system block diagram which was used to scope out the hardware requirements for the datapath
  • Wrote the test plan, identifying test cases for all instruction types and edge cases
Code Development
  • Designed and implemented the bit-serial ALU and register file in alu_1bit.v and regfile_serial.v and developed the core features required for integration of these modules. This includes R vs I-type operand multiplexing, regfile addressing, and serial arithmetic/logic operations.
  • Developed timing/sequencing logic for shifting the final result into the accumulator in accumulator.v
Testbench & Simulation
  • Wrote cocotb tests for each instruction category (ALU ops, shifts, immediates) and for full integration
  • Debugged and verified system functionality using gtkwave simulations

IO

#InputOutputBidirectional
0INST_0LED_0PB_INST
1INST_1LED_1
2INST_2LED_2
3INST_3LED_3
4INST_4LED_4
5INST_5LED_5
6INST_6LED_6
7INST_7LED_7

Chip location

Controller 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_rebelmike_incrementer (Incrementer) tt_um_rebeccargb_tt09ball_gdsart (TT09Ball GDS Art) tt_um_tt_tinyQV (TinyQV 'Asteroids' - Crowdsourced Risc-V SoC) tt_um_DalinEM_asic_1 (ASIC) tt_um_urish_simon (Simon Says memory game) tt_um_rburt16_bias_generator (Bias Generator) tt_um_librelane3_test (Tiny Tapeout LibreLane 3 Test) tt_um_10_vga_crossyroad (Crossyroad) 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_dipped (Densely Packed Decimal) tt_um_rebeccargb_styler (Styler) tt_um_rebeccargb_vga_timing_experiments (VGA Timing Experiments) tt_um_rebeccargb_colorbars (Color Bars) tt_um_rebeccargb_vga_pride (VGA Pride) tt_um_cw_vref (Current-Mode Bandgap Reference) tt_um_tinytapeout_logo_screensaver (VGA Screensaver with Tiny Tapeout Logo) tt_um_rburt16_opamp_3stage (OpAmp 3stage) tt_um_gamepad_pmod_demo (Gamepad Pmod Demo) tt_um_micro_tiles_container (Micro tile container) tt_um_virantha_enigma (Enigma - 52-bit Key Length) tt_um_jamesrosssharp_1bitam (1bit_am_sdr) tt_um_jamesrosssharp_tiny1bitam (Tiny 1-bit AM Radio) tt_um_MichaelBell_rle_vga (RLE Video Player) tt_um_MichaelBell_mandelbrot (VGA Mandelbrot) tt_um_murmann_group (Decimation Filter for Incremental and Regular Delta-Sigma Modulators) tt_um_betz_morse_keyer (Morse Code Keyer) tt_um_urish_giant_ringosc (Giant Ring Oscillator (3853 inverters)) tt_um_tiny_pll (Tiny PLL) tt_um_tc503_countdown_timer (Countdown Timer) tt_um_richardgonzalez_ped_traff_light (Pedestrian Traffic Light) tt_um_analog_factory_test (TT08 Analog Factory Test) tt_um_alexandercoabad_mixedsignal (mixedsignal) tt_um_tgrillz_sixSidedDie (Six Sided Die) tt_um_mattvenn_analog_ring_osc (Ring Oscillators) tt_um_vga_clock (VGA clock) tt_um_mattvenn_r2r_dac_3v3 (Analog 8 bit 3.3v R2R DAC) tt_um_mattvenn_spi_test (SPI test) tt_um_quarren42_demoscene_top (asic design is my passion) tt_um_micro_tiles_container_group2 (Micro tile container (group 2)) tt_um_z2a_rgb_mixer (RGB Mixer demo) tt_um_frequency_counter (Frequency counter) tt_um_urish_sic1 (SIC-1 8-bit SUBLEQ Single Instruction Computer) tt_um_tobi_mckellar_top (Capacitive Touch Sensor) tt_um_log_afpm (16-bit Logarithmic Approximate Floating Point Multiplier) tt_um_uwasic_dinogame (UW ASIC - Optimized Dino) tt_um_ece298a_8_bit_cpu_top (8-Bit CPU) tt_um_tqv_peripheral_harness (Rotary Encoder Peripheral) tt_um_led_matrix_driver (SPI LED Matrix Driver) tt_um_2048_vga_game (2048 sliding tile puzzle game (VGA)) tt_um_mac (MAC) tt_um_dpmunit (DPM_Unit) tt_um_nitelich_riscyjr (RISCY Jr.) tt_um_nitelich_conway (Conway's GoL) tt_um_pwen (Pulse Width Encoder) tt_um_mcs4_cpu (MCS-4 4004 CPU) tt_um_mbist (Design of SRAM BIST) tt_um_weighted_majority (Weighted Majority Voter / Trend Detector) tt_um_brandonramos_VGA_Pong_with_NES_Controllers (VGA Pong with NES Controllers) tt_um_brandonramos_opamp_ladder (2-bit Flash ADC) tt_um_NE567Mixer28 (OTA folded cascode) tt_um_acidonitroso_programmable_threshold_voltage_sensor (Programmable threshold voltage sensor) tt_um_DAC1 (tt_um_DAC1) tt_um_trivium_stream_processor (Trivium Stream Cipher) tt_um_analog_example (Digital OTA) tt_um_sortaALUAriaMitra (Sorta 4-Bit ALU) tt_um_RoyTr16 (Connect Four VGA) tt_um_jnw_wulffern (JNW-TEMP) tt_um_serdes (Secure SERDES with Integrated FIR Filtering) tt_um_limpix31_r0 (VGA Human Reaction Meter) tt_um_torurstrom_async_lock (Asynchronous Locking Unit) tt_um_galaguna_PostSys (Post's Machine CPU Based) tt_um_edwintorok (Rounding error) tt_um_td4 (tt-td04) tt_um_snn (Reward implemented Spiking Neural Network) tt_um_matrag_chirp_top (Tiny Tapeout Chirp Modulator) tt_um_sha256_processor_dvirdc (SHA-256 Processor) tt_um_pchri03_levenshtein (Fuzzy Search Engine) tt_um_AriaMitraClock (12 Hour Clock (with AM and PM)) tt_um_swangust (posit8_add) tt_um_DelosReyesJordan_HDL (Reaction Time Test) tt_um_upalermo_simple_analog_circuit (Simple Analog Circuit) tt_um_swangust2 (posit8_mul) tt_um_thexeno_rgbw_controller (RGBW Color Processor) tt_um_top_layer (Spike Detection and Classification System) tt_um_Alida_DutyCycleMeter (Duty Cycle Meter) tt_um_dco (Digitally Controlled Oscillator) tt_um_8bitalu (8-bit Pipelined ALU) tt_um_resfuzzy (resfuzzy) tt_um_javibajocero_top (MarcoPolo) tt_um_Scimia_oscillator_tester (Oscillator tester) tt_um_ag_priority_encoder_parity_checker (Priority Encoder with Parity Checker) tt_um_tnt_mosbius (tnt's variant of SKY130 mini-MOSbius) tt_um_program_counter_top_level (Test Design 1) tt_um_subdiduntil2_mixed_signal_classifier (Mixed-signal Classifier) tt_um_dac_test3v3 (Analog 8 bit 3.3v R2R DAC) tt_um_LPCAS_TP1 ( LPCAS_TP1 ) tt_um_regfield (Register Field) tt_um_delaychain (Delay Chain) tt_um_tdctest_container (Micro tile container) tt_um_spacewar (Spacewar) tt_um_Enhanced_pll (Enhance PLL) tt_um_romless_cordic_engine (ROM-less Cordic Engine) tt_um_ev_motor_control (PLC Based Electric Vehicle Motor Control System) tt_um_plc_prg (PLC-PRG) tt_um_kishorenetheti_tt16_mips (8-bit MIPS Single Cycle Processor) tt_um_snn_core (Adaptive Leaky Integrate-and-Fire spiking neuron core for edge AI) tt_um_myprocessor (8-bit Custom Processor) tt_um_sjsu (SJSU vga demo) tt_um_vedic_4x4 (Vedic 4x4 Multiplier) tt_um_braun_mult (8x8 Braun Array Multiplier) tt_um_r2r_dac (4-bit R2R DAC) tt_um_stochastic_integrator_tt9_CL123abc (Stochastic Integrator) tt_um_uart (UART Controller with FIFO and Interrupts) tt_um_lfsr_stevej (Linear Feedback Shift Register) tt_um_FFT_engine (FFT Engine) tt_um_tpu (Tiny Tapeout Tensor Processing Unit) tt_um_tt_tinyQVb (TinyQV 'Berzerk' - Crowdsourced Risc-V SoC) tt_um_IZ_RG_22 (IZ_RG_22) tt_um_32_bit_fp_ALU_S_M (32-bit floating point ALU) tt_um_AriaMitraGames (Games (Tic Tac Toe and Rock Paper Scissors)) tt_um_sc_bipolar_qif_neuron (Stochastic Computing based QIF model neuron) tt_um_mac_spst_tiny (Low Power and Enhanced Speed Multiplier, Accumulator with SPST Adder) tt_um_kb2ghz_xalu (4-bit minicomputer ALU) tt_um_emmersonv_tiq_adc (3 Bit TIQ ADC) tt_um_simonsays (Simon Says) tt_um_BNN (8-bit Binary Neural Network) tt_um_anweiteck_2stageCMOSOpAmp (2 Stage CMOS Op Amp) tt_um_6502 (Simplified 6502 Processor) tt_um_swangust3 (posit8_div) tt_um_jonathan_thing_vga (VGA-Video-Player) tt_um_wokwi_412635532198550529 (ttsky-pettit-wokproc-trainer) tt_um_vga_hello_world (VGA HELLO WORLD) tt_um_jyblue1001_pll (Analog PLL) tt_um_BryanKuang_mac_peripheral (8-bit Multiply-Accumulate (MAC) with 2-Cycle Serial Interface) tt_um_rebeccargb_tt09ball_screensaver (TT09Ball VGA Screensaver) tt_um_openfpga22 (Open FGPA 2x2 design) tt_um_andyshor_demux (Demux) tt_um_flash_raid_controller (SPI flash raid controller) tt_um_jonnor_pdm_microphone (PDM microphone) tt_um_digital_playground (Sky130 Digital Playground) tt_um_mod6_counter (Mod-6 Counter) tt_um_BMSCE_T2 (Choreo8) tt_um_Richard28277 (4-bit ALU) tt_um_shuangyu_top (Calculator) tt_um_wokwi_441382314812372993 (Sumador/restador de 4 bits) tt_um_TensorFlowE (TensorFlowE) tt_um_wokwi_441378095886546945 (7SDSC) tt_um_wokwi_440004235377529857 (Latched 4-bits adder) tt_um_dlmiles_tqvph_i2c (TinyQV I2C Controller Device) tt_um_markgarnold_pdp8 (Serial PDP8) tt_um_wokwi_441564414591667201 (tt-parity-detector) tt_um_vga_glyph_mode (VGA Glyph Mode) tt_um_toivoh_pwl_synth (PiecewiseOrionSynth Deluxe) tt_um_minirisc (MiniRISC-FSM) tt_um_wokwi_438920793944579073 (Multiple digital design structures) tt_um_sleepwell (Sleep Well) tt_um_lcd_controller_Andres078 (LCD_controller) tt_um_SummerTT_HDL (SJSU Summer Project: Game of Life) tt_um_chrishtet_LIF (Leaky Integrate and Fire Neuron) tt_um_diff (ttsky25_EpitaXC) tt_um_htfab_split_flops (Split Flops) tt_um_alu_4bit_wrapper (4-bit ALU with Flags) tt_um_tnt_rf_test (TTSKY25A Register File Test) tt_um_mosbius (mini mosbius) tt_um_robot_controller_top_module (AR Chip) tt_um_flummer_ltc (Linear Timecode (LTC) generator) tt_um_stress_sensor (Tiny_Tapeout_2025_three_sensors) tt_um_krisjdev_manchester_baby (Manchester Baby) tt_um_mbikovitsky_audio_player (Simple audio player) tt_um_wokwi_414123795172381697 (TinySnake) tt_um_vga_example (Jabulani Ball VGA Demo ) tt_um_stochastic_addmultiply_CL123abc (Stochastic Multiplier, Adder and Self-Multiplier) tt_um_nvious_graphics (nVious Graphics) tt_um_pe_simonbju (pe) tt_um_mikael (TinyTestOut) tt_um_brent_kung (brent-kung_4) tt_um_7FM_ShadyPong (ShadyPong) tt_um_algofoogle_vga_matrix_dac (Analog VGA CSDAC experiments) tt_um_tv_b_gone (TV-B-Gone) tt_um_sjsu_vga_music (SJSU Fight Song) tt_um_fsm_haz (FSM based RISC-V Pipeline Hazard Resolver) tt_um_dma (DMA controller) tt_um_3v_inverter_SiliconeGuide (Analog Double Inverter) tt_um_rejunity_lgn_mnist (LGN hand-written digit classifier (MNIST, 16x16 pixels)) tt_um_gray_sobel (Gray scale and Sobel filter for Edge Detection) tt_um_Xgamer1999_LIF (Demonstration of Leaky integrate and Fire neuron SJSU) tt_um_dac12 (12 bit DAC) tt_um_voting_machine (Digital Voting Machine) tt_um_updown_counter (8bit_up-down_counter) tt_um_openram_top (Single Port OpenRAM Testchip) tt_um_customalu (Custom ALU) tt_um_assaify_mssf_pll (24 MHz MSSF PLL) tt_um_Maj_opamp (2-Stage OpAmp Design) tt_um_wokwi_442131619043064833 (Encoder 7 segments display) tt_um_wokwi_441835796137492481 (TESVG Binary Counter and shif register ) tt_um_combo_haz (Combinational Logic Based RISC-V Pipeline Hazard Resolver) tt_um_tx_fsm (Design and Functional Verification of Error-Correcting FIFO Buffer with SECDED and ARQ ) tt_um_will_keen_solitaire (solitaire) tt_um_rom_vga_screensaver (VGA Screensaver with embedded bitmap ROM) tt_um_13hihi31_tdc (Time to Digital Converter) tt_um_dteal_awg (Arbitrary Waveform Generator) tt_um_LIF_neuron (AFM_LIF) tt_um_rebelmike_register (Circulating register test) tt_um_MichaelBell_hs_mul (8b10b decoder and multiplier) tt_um_SNPU (random_latch) tt_um_rejunity_atari2600 (Atari 2600) tt_um_bit_serial_cpu_top (16-bit bit-serial CPU) tt_um_semaforo (semaforo) tt_um_bleeptrack_cc1 (Cross stitch Creatures #1) tt_um_bleeptrack_cc2 (Cross stitch Creatures #2) tt_um_bleeptrack_cc3 (Cross stitch Creatures #3) tt_um_bleeptrack_cc4 (Cross stitch Creatures #4) tt_um_bitty (Bitty) tt_um_spi2ws2811x16 (spi2ws2811x8) tt_um_uart_spi (UART and SPI Communication blocks with loopback) tt_um_urish_charge_pump (Dickson Charge Pump) tt_um_adc_dac_tern_alu (adc_dac_BCT_addr_ALU_STI) tt_um_sky1 (GD Sky Processor) tt_um_fifo (ASYNCHRONOUS FIFO) tt_um_TT16 (Asynchronous FIFO) tt_um_axi4lite_top (Axi4_Lite) tt_um_TT06_pwm (PWM Generator) tt_um_hack_cpu (HACK CPU) tt_um_marxkar_jtag (JTAG CONTROLLER) tt_um_cache_controller (Simple Cache Controller) tt_um_stopwatchtop (Stopwatch with 7-seg Display) tt_um_adpll (all-digital pll) tt_um_tnt_rom_test (TT09 SKY130 ROM Test) tt_um_tnt_rom_nolvt_test (TT09 SKY130 ROM Test (no LVT variant)) tt_um_wokwi_414120207283716097 (fulladder) tt_um_kianV_rv32ima_uLinux_SoC (KianV uLinux SoC) tt_um_tv_b_gone_rom (TV-B-Gone-EU) Available Available Available Available Available Available Available Available Available Available Available Available Available