204 Bitty

204 : Bitty

Design render

Bitty System: RTL Design and Verification Framework

This project implements a custom 16-bit processing system, including hardware modules for program counter (PC), instruction fetch, branch logic, UART communication, and integration with the BittyEmulator for co-simulation. The provided system allows robust testing of a Verilog-based design using a Python-based cocotb testbench. The testbench orchestrates data transfer via UART, interacts with shared memory, and verifies execution against the emulator.

System Overview

Core Components

Без имени

  1. Program Counter (PC):

    • Handles sequential and branch-based instruction execution.
    • Interfaces directly with the branch logic for control flow changes.
  2. Instruction Fetch Unit:

    • Reads and decodes instructions from memory.
    • Supplies data to the rest of the system.
  3. Branch Logic:

    • Evaluates branch conditions and modifies the PC as needed.
  4. UART Module:

    • Supports data exchange between the testbench and the DUT.
    • Operates with customizable baud rates and clock frequencies.
  5. Bitty Emulator:

    • Acts as a functional reference model.
    • Validates the outputs and internal states of the hardware implementation.
    • Includes: Control Unit, registers, ALU, mux

Bitty Top Module

Memory Map
  • Shared Memory:
    • Synchronizes data between the testbench, the hardware design (DUT), and the emulator.
    • Supports up to 256 entries.
  • Instruction Set:
    • Defined in instructions_for_em.txt, loaded by the testbench for execution. Here’s the revised version written as a description of a fully implemented system:

Instruction Set Architecture: Fully Implemented 16-bit Processor

Overview

This document outlines the complete instruction set architecture (ISA) for a 16-bit processor, detailing its capabilities, operations, and encoding formats. The ISA is designed to deliver robust functionality for arithmetic, logical, control flow, and memory operations while maintaining a simple, efficient structure.

The processor's instruction set enables dynamic memory interactions, conditional branching, and a wide range of data manipulation tasks, providing the foundation for executing complex algorithms and software applications.


Instruction Set

Arithmetic and Logical Operations

The processor supports both register-to-register and immediate operations, enabling developers to perform computations efficiently.

Register-to-Register Instructions:

изображение

  1. add rx, ry: Adds the value in ry to rx.

    • Operation: rx = rx + ry
  2. sub rx, ry: Subtracts the value in ry from rx.

    • Operation: rx = rx - ry
  3. and rx, ry: Performs a bitwise AND between rx and ry.

    • Operation: rx = rx & ry
  4. or rx, ry: Performs a bitwise OR between rx and ry.

    • Operation: rx = rx | ry
  5. xor rx, ry: Performs a bitwise XOR between rx and ry.

    • Operation: rx = rx ^ ry
  6. shl rx, ry: Shifts the bits in rx left by the number of positions specified in ry.

    • Operation: rx = rx << ry
  7. shr rx, ry: Shifts the bits in rx right by the number of positions specified in ry.

    • Operation: rx = rx >> ry
  8. cmp rx, ry: Compares the values in rx and ry.

    • Operation:
      • rx = 0 if rx == ry
      • rx = 1 if rx > ry
      • rx = 2 if rx < ry
Immediate Instructions:

изображение

  1. addi rx, #i: Adds the immediate value #i to rx.

    • Operation: rx = rx + #i
  2. subi rx, #i: Subtracts the immediate value #i from rx.

    • Operation: rx = rx - #i
  3. andi rx, #i: Performs a bitwise AND between rx and #i.

    • Operation: rx = rx & #i
  4. ori rx, #i: Performs a bitwise OR between rx and #i.

    • Operation: rx = rx | #i
  5. xori rx, #i: Performs a bitwise XOR between rx and #i.

    • Operation: rx = rx ^ #i
  6. shli rx, #i: Shifts rx left by #i positions.

    • Operation: rx = rx << #i
  7. shri rx, #i: Shifts rx right by #i positions.

    • Operation: rx = rx >> #i
  8. cmpi rx, #i: Compares the value in rx with the immediate value #i.

    • Operation:
      • rx = 0 if rx == #i
      • rx = 1 if rx > #i
      • rx = 2 if rx < #i

Memory Operations

Load and Store Instructions:

изображение

  1. ld rx, (ry): Loads the value from the memory address stored in ry into register rx.

    • Operation: rx = mem[ry]
  2. st rx, (ry): Stores the value in register rx into the memory address stored in ry.

    • Operation: mem[ry] = rx
Encoding Format:
  • Bits 15-13 (Rx): Destination register for ld or source register for st.
  • Bits 12-10 (Ry): Register holding the memory address.
  • Bits 9-3 (Reserved): Reserved for future extensions, currently set to zero.
  • Bit 2 (L/S): Load/Store flag (0 for ld, 1 for st).
  • Bits 1-0: Instruction format identifier (11 for memory operations).

Conditional Branching

The processor supports conditional branching with a dedicated encoding format for efficient control flow.

Conditional Branch Instructions:

изображение

  1. bie addr: Branch if equal (condition flag EQ is set).
  2. big addr: Branch if greater (condition flag GT is set).
  3. bil addr: Branch if less (condition flag LT is set).
Encoding Format:
  • Bits 15-4 (Immediate): Encodes the branch target address.
  • Bits 3-2 (Condition):
    • 00: Equal
    • 01: Greater than
    • 10: Less than
  • Bits 1-0 (Format): Instruction format identifier (10 for conditional branching).

Here’s a detailed step-by-step guide for users to set up and test their system with the assembler and testbench:


How to Use the System

Before running the testbench, you must first prepare the assembly instructions or machine code. Here’s how:

Step 1: Prepare Instructions
  1. Option 1: Generate machine code automatically
    Run the CIG_run.py script to generate output.txt automatically with pre-defined assembly instructions.

    python3 CIG_run.py
    

    This will create output.txt containing machine code.

  2. Option 2: Write custom assembly instructions
    If you prefer to write your own instructions, directly create or modify the output.txt file. These instructions will later be disassembled for further testing.

Step 2: Disassemble Machine Code

Disassemble the output.txt file (machine code) to generate instructions_for_em.txt (assembly code):

./er_tool -d -i output.txt -o instructions_for_em.txt

This step ensures that the instructions in instructions_for_em.txt are ready for use in the testbench.


Running the Testbench

Once you have the instructions_for_em.txt file ready, navigate to the bitty-tt10/test directory and execute the testbench using make:

cd ~/bitty-tt10/test
make

The testbench will:

  1. Load the instructions from instructions_for_em.txt.
  2. Simulate UART communication for instruction execution.
  3. Compare the outputs of the DUT (Device Under Test) with expected results.
  4. Log the results, including any discrepancies, into uart_emulator_log.txt.

Testbench Overview
Assembling Code

To convert instructions_for_em.txt into machine code (if needed for testing):

./er_tool -a -i instructions_for_em.txt -o output.txt 
Disassembling Code

To convert machine code (output.txt) back into assembly:

./er_tool -d -i output.txt -o instructions_for_em.txt 

Practical Workflow Example
  1. Generate Machine Code:
    Run CIG_run.py to create machine code:

    python3 CIG_run.py
    
  2. Disassemble Code:
    Use the er_tool to create instructions_for_em.txt:

    ./er_tool -d -i output.txt -o instructions_for_em.txt
    
  3. Run Testbench:
    Navigate to the test directory and run the testbench:

    cd ~/bitty-tt10/test
    make
    

Key Features of the Testbench
  • Simulated UART Communication: Generates UART signals and captures DUT transmissions.
  • Instruction Execution: Fetches and executes instructions in real-time.
  • State Validation: Logs and compares DUT outputs with expected results.
  • Error Reporting: Logs any mismatches in uart_emulator_log.txt.

Following these steps ensures smooth operation from writing or generating instructions to verifying the system’s functionality. If you encounter issues, double-check the prepared files or logs for guidance. Let me know if you need further clarification!

How to Use

Setup
  1. Prerequisites:

    • Install Python and cocotb.
    • Ensure Verilog simulation tools (Verilator, Iverilog) are installed.
    • Use the following command to install the dependencies:
       pip install -r requirements.txt
    
  2. Input Files:

    • Place the instruction file (instructions_for_em.txt) in the working directory.
    • Modify the file as needed to test specific scenarios.
  3. Shared Libraries:

    • Ensure BittyEmulator.py and shared_memory.py are in the project directory.
Running the Test
  1. Execute the cocotb testbench:

    make
    
  2. Observe the test results in the terminal and logs:

    • Successes and failures are detailed in uart_emulator_log.txt.

External Hardware

This system does not require external hardware. UART communication is emulated within the testbench.


Files Overview

Verilog Files
  • <module_name>.v: Contains the RTL design files for the system.
  • tb_<module_name>.v: Top-level Verilog testbench wrapper.
Python Files
  • test_bitty.py: The cocotb testbench described above.
  • BittyEmulator.py: Emulator for reference model validation.
  • shared_memory.py: Utility for creating shared memory structures.

Limitations and Future Work

  1. Hardware Expansion:

    • Current implementation is limited to basic arithmetic and control operations.
    • Future iterations could incorporate advanced features like pipelining or caching.
  2. Error Handling:

    • Expand error reporting for unresolved signals during simulation.
  3. Scalability:

    • Extend memory and instruction sets for larger programs.

This project demonstrates a robust framework for RTL verification, combining software co-simulation with hardware modeling for high-fidelity testing and validation.

IO

#InputOutputBidirectional
0rx_data_bittx_data_bit
1sel_baude_rate[0]
2sel_baude_rate[1]
3
4
5
6
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