291 UART Controller with FIFO and Interrupts

291 : UART Controller with FIFO and Interrupts

Design render

Tiny Tapeout UART Module Documentation

Project Overview

This project implements a full-featured UART (Universal Asynchronous Receiver-Transmitter) controller designed specifically for the Tiny Tapeout platform. The UART enables bidirectional serial communication with configurable parameters and includes interrupt generation capabilities.

How it works

UART Theory and Fundamentals

UART (Universal Asynchronous Receiver-Transmitter) is a hardware communication protocol that enables serial data transmission between devices without requiring a shared clock signal. Unlike synchronous protocols, UART relies on predefined timing agreements between communicating devices.

Core UART Principles:

  1. Asynchronous Communication: No shared clock line between devices. Each device maintains its own clock and relies on precise timing synchronization based on agreed baud rates.

  2. Serial Data Format: Data is transmitted one bit at a time in a specific frame structure:

    [START] [D0] [D1] [D2] [D3] [D4] [D5] [D6] [D7] [PARITY] [STOP]
    
    • Start Bit: Logic '0' signals beginning of data frame
    • Data Bits: 5-9 bits of actual data (typically 8 bits)
    • Parity Bit: Optional error detection bit
    • Stop Bit(s): Logic '1' signals end of frame (1 or 2 bits)
  3. Baud Rate: Transmission speed measured in bits per second (bps). Common rates include 9600, 19200, 38400, 57600, 115200 bps.

  4. Oversampling: Internal clock runs at 16x baud rate for precise bit timing and noise immunity. This allows accurate detection of bit transitions and sampling at optimal points.

Implementation Architecture

The UART module (tt_um_uart) serves as a wrapper around a more comprehensive uart_top module, mapping its functionality to Tiny Tapeout's standardized 8-bit I/O interface.

Internal Structure:

  • Transmit Path: Parallel-to-serial converter with FIFO buffering
  • Receive Path: Serial-to-parallel converter with frame detection
  • Baud Rate Generator: Clock divider creating precise timing signals
  • Control Logic: State machines managing TX/RX operations and interrupts
Key Components

Input Mapping (ui_in[7:0]):

  • ui_in[0]: tr_en - Transmitter enable
  • ui_in[1]: mode_osl - Mode/operational select
  • ui_in[2]: clk_sel - Clock selection (0 = 16x oversampling, 1 = full rate)
  • ui_in[3]: tx_data_w_en - TX data write enable
  • ui_in[4]: tr_data_load - Transmit data load signal
  • ui_in[5]: rx_data_read_en - RX data read enable

Bidirectional I/O (uio_in[7:0] / uio_out[7:0]):

  • uio_in[7:1]: tr_fifo_data_w - 7-bit transmit data input
  • uio_in[0]: rx_data_in - Serial receive data input
  • uio_out[0]: tx_line - Serial transmit data output
  • uio_out[1]: tx_i_int - TX input interrupt
  • uio_out[2]: rx_i_int - RX input interrupt
  • uio_out[3]: tx_o_int - TX output interrupt
  • uio_out[4]: rx_o_int - RX output interrupt
  • uio_out[5]: tr_busy - Transmitter busy flag
  • uio_out[7:6]: Reserved (tied to 0)

Output (uo_out[7:0]):

  • uo_out[7:0]: rx_data - 8-bit received data
Operational Flow

State Machine Operation:

The UART operates through several interconnected state machines:

  1. TX State Machine:

    • IDLE: Waiting for data to transmit
    • START: Transmitting start bit (logic '0')
    • DATA: Shifting out data bits (LSB first)
    • STOP: Transmitting stop bit(s) (logic '1')
  2. RX State Machine:

    • IDLE: Monitoring for start bit detection
    • START: Validating start bit timing
    • DATA: Sampling incoming data bits
    • STOP: Verifying stop bit and frame validity

Detailed Operation Sequence:

  1. Initialization: Reset the module using rst_n (active low)
  2. Baud Rate Setup: Fixed at dlh_dll = 16'h0020 creating a divisor for the input clock
  3. Configuration: Set operational parameters via ui_in control bits
  4. Transmission Process:
    • Load 7-bit data into uio_in[7:1] (MSB alignment)
    • Assert ui_in[3] (tx_data_w_en) to load data into TX FIFO
    • TX state machine automatically begins frame transmission
    • Monitor uio_out[5] (tr_busy) for completion status
    • TX interrupts signal various transmission events
  5. Reception Process:
    • RX state machine continuously monitors uio_in[0] for start bit
    • Oversampling (16x) ensures accurate bit detection
    • Received byte appears on uo_out[7:0] when frame completes
    • Assert ui_in[5] (rx_data_read_en) to acknowledge receipt
    • RX interrupts indicate data availability and errors
  6. Error Detection: Frame errors, overrun conditions trigger interrupt flags
  7. Flow Control: Busy signals prevent data loss during active transmission
Baud Rate Configuration and Timing Analysis

The module uses a fixed baud rate configuration with dlh_dll = 16'h0020 (32 decimal), which acts as a clock divider for the internal baud rate generator.

Timing Calculations:

  • Base Clock: Tiny Tapeout typically operates at 50MHz
  • Baud Divisor: 32 (0x0020)
  • 16x Oversampling: Internal clock = Base Clock / (Divisor × 16)
  • Effective Baud Rate: 50MHz / (32 × 16) = ~97,656 bps

Bit Timing Precision:

  • Each bit period = 1/97,656 ≈ 10.24 μs
  • Oversampling provides 16 sample points per bit
  • Sample resolution = 10.24 μs / 16 ≈ 640 ns
  • This precision ensures reliable communication even with ±5% clock tolerance

Clock Selection Impact:

  • ui_in[2] = 0: Standard 16x oversampling mode (recommended)
  • ui_in[2] = 1: Direct clock mode (advanced applications only)
Advanced Features and Design Considerations

FIFO Implementation:

  • Internal buffering prevents data loss during burst communications
  • TX FIFO allows queuing multiple bytes for transmission
  • RX FIFO stores received data until software can process it
  • Interrupt-driven operation enables efficient CPU utilization

Interrupt System:

  • TX Input Interrupt (uio_out[1]): Triggered when TX FIFO has space
  • RX Input Interrupt (uio_out[2]): Triggered when RX FIFO has data
  • TX Output Interrupt (uio_out[3]): Transmission completion events
  • RX Output Interrupt (uio_out[4]): Reception completion and error events

Error Handling:

  • Framing Errors: Invalid stop bit detection
  • Overrun Errors: Data received faster than software can process
  • Buffer Overflow: FIFO capacity exceeded
  • All error conditions generate appropriate interrupt signals

Power and Resource Optimization:

  • Designed for minimal silicon area on Tiny Tapeout
  • Clock gating reduces power consumption during idle periods
  • Configurable operation modes balance functionality vs. resource usage
Prerequisites
  • Cocotb testbench environment
  • Icarus Verilog or compatible simulator
  • Python 3.x with cocotb installed
Running the Test
  1. Setup the environment:

    pip install cocotb
    
  2. Execute the test:

    make
    
Test Procedure

The provided test (test.py) performs the following sequence:

  1. Clock and Reset Setup:

    • Generates 100 MHz clock (10ns period)
    • Applies reset sequence
  2. Configuration:

    • Enables transmitter and receiver: ui_in = 0b00000011
    • Sets up operational mode
  3. Loopback Test:

    • Transmits test byte 0xA5 via uio_in[7:1]
    • Simulates serial reception on uio_in[0]
    • Verifies received data matches transmitted data
  4. Verification:

    • Compares transmitted vs received data
    • Reports success/failure with detailed output
Expected Results

The test should output:

TX sending byte: 0xA5
RX received byte: 0xA5
Waveform Analysis

The testbench generates tb.vcd for waveform viewing. Key signals to monitor:

  • Clock and reset behavior
  • Control signal transitions
  • TX/RX data flow
  • Interrupt flag states
  • Busy signal timing

External hardware

Required Connections

For basic UART communication:

  • TX Line: Connect uio_out[0] to receiving device's RX input
  • RX Line: Connect external transmitter to uio_in[0]
  • Ground: Common ground reference between devices
Recommended External Hardware
  1. USB-to-Serial Converter:

    • FTDI FT232R/FT234X based modules
    • CP2102/CP2104 based modules
    • For PC connectivity and debugging
  2. RS-232 Level Shifter (if needed):

    • MAX3232 or similar
    • Required for true RS-232 voltage levels (±12V)
    • Most modern devices use 3.3V/5V TTL levels
  3. Microcontroller Interface:

    • Arduino boards (3.3V/5V compatible)
    • Raspberry Pi GPIO pins
    • ESP32/ESP8266 modules
  4. Test Equipment:

    • Logic analyzer for signal debugging
    • Oscilloscope for timing analysis
    • Breadboard and jumper wires for connections
Connection Example
Tiny Tapeout UART    ←→    External Device
─────────────────          ────────────────
uio_out[0] (TX)     ──→    RX Input
uio_in[0]  (RX)     ←──    TX Output
GND                 ──→    GND
Pin Configuration Summary
Pin Direction Function External Connection
uio_out[0] Output TX Data → External RX
uio_in[0] Input RX Data ← External TX
uio_out[5:1] Output Status/Interrupts → Status LEDs (optional)
ui_in[5:0] Input Control ← Control switches/MCU
Notes
  • Ensure voltage level compatibility (3.3V TTL for Tiny Tapeout)
  • Add pull-up resistors on communication lines if experiencing reliability issues
  • Consider adding decoupling capacitors for stable operation
  • The fixed baud rate configuration may require adjustment based on your target communication speed

IO

#InputOutputBidirectional
0TR_ENRX_DATA[0]RX_IN/TX_OUT
1MODE_OSLRX_DATA[1]TX_FIFO[1]/TX_I_INT
2CLK_SELRX_DATA[2]TX_FIFO[2]/RX_I_INT
3TX_WR_ENRX_DATA[3]TX_FIFO[3]/TX_O_INT
4TR_DATA_LOADRX_DATA[4]TX_FIFO[4]/RX_O_INT
5RX_RD_ENRX_DATA[5]TX_FIFO[5]/TR_BUSY
6RX_DATA[6]TX_FIFO[6]
7RX_DATA[7]TX_FIFO[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