549 Detronyx UART Trace Exerciser

549 : Detronyx UART Trace Exerciser

Design render

How it works

Detronyx UART Trace Exerciser is a 1x1 digital bring-up tile. It exposes eight trace probe inputs on ui_in[7:0], eight generated pattern outputs on uo_out[7:0], and a UART control/status link on uio[0]/uio[1].

The trace side samples ui_in[7:0] at a programmable interval. When any masked bit changes while tracing is armed and streaming is enabled, the tile emits a four-byte UART trace packet:

0xe1 sample delta changed_mask

delta is an 8-bit saturated count of sample ticks since the previous emitted event. If a second event arrives while a previous trace event is still waiting to be transmitted, the event is dropped and the overflow/drop counters update. This keeps the design small and predictable for a single TTGF tile.

The pattern side drives uo_out[7:0] with one of eight modes:

0 hold pattern_a
1 incrementing counter
2 walking one
3 8-bit LFSR
4 inverted pattern_a
5 mirror trace probe inputs
6 trace probe inputs XOR pattern_a
7 trace probe inputs XOR pattern_a

The project config targets the AvalonSemiconductors gf180mcu_as_sc_mcu7t3v3 GF180 native-3.3 V standard-cell library.

UART protocol

Default UART settings are 115200 baud, 8 data bits, no parity, 1 stop bit, with a 50 MHz clk. The UART bit divider is the top-level BAUD_RELOAD parameter; the default is 433, which gives 434 clock cycles per bit at 50 MHz. For a different system clock, set BAUD_RELOAD to round(clock_hz / baud) - 1.

Most commands are two bytes: command, then argument. They do not ACK, to avoid polluting the trace stream.

0x10 mask    set trace bit mask
0x11 div     set trace sample divider; low 4 bits used, 0 samples every clock
0x12 ctrl    bit0 arm, bit1 stream enable, bit2 clear counters/errors, bit3 snapshot
0x20 mode    set pattern mode, low three bits used
0x21 div     set pattern update divider; low 6 bits used
0x22 value   set pattern_a

Single-byte commands:

0x30         emit status packet
0x31         emit ping/version packet

Status packets are:

0xa5 status event_count drop_count

Ping packets are:

0xd7 0x54 0x01 status

The status byte is:

bit7 overflow
bit6 uart_rx_error
bit5 trace_packet_pending
bit4 stream_enabled
bit3 trace_armed
bit2..0 pattern_mode

Pinout

ui_in[7:0]   trace probes
uo_out[7:0]  generated pattern
uio[0]       UART RX input
uio[1]       UART TX output
uio[2]       trace armed status
uio[3]       stream enabled status
uio[4]       UART/packet busy status
uio[5]       trace overflow status
uio[6]       UART RX framing error sticky status
uio[7]       toggles on every accepted trace event

How to test

Run the local RTL simulation from the TTGF experiment directory:

make sim-trace-exerciser

The test configures the pattern generator over UART, arms trace streaming, changes a probe input, checks the emitted trace packet, and then requests a status packet.

External hardware

No required external hardware beyond a UART adapter or host MCU. For a simple demo, loop selected uo_out pattern pins back into ui_in trace probe pins and watch the trace packets on uio[1].

IO

#InputOutputBidirectional
0trace_probe[0]pattern[0]uart_rx
1trace_probe[1]pattern[1]uart_tx
2trace_probe[2]pattern[2]trace_armed
3trace_probe[3]pattern[3]stream_enabled
4trace_probe[4]pattern[4]uart_busy
5trace_probe[5]pattern[5]trace_overflow
6trace_probe[6]pattern[6]uart_rx_error
7trace_probe[7]pattern[7]event_toggle

Chip location

Controller Mux Mux Mux Mux Mux Mux Mux Mux Mux Mux Mux Mux Mux Mux Mux tt_um_chip_rom (Chip ROM) tt_um_factory_test (Tiny Tapeout Factory Test) tt_um_Vincent2405_adder_tree (BSD Convolution Adder Tree) tt_um_BastiBudde_i2c_slave_sensor (I2C Slave Template with Emulated Sensor) tt_um_60hz_load (60 Hz Grid-Forming ASIC with Dump-Load Control) tt_um_spi_config_reg (Simple SPI configuration for analog designs) tt_um_ex_drosen766 (Project) tt_um_spi_cpu_top (SPI-CPU) tt_um_d5smith_mfa (Music for ASICs) tt_um_i2c_master (I2C Master Controller) tt_um_aswarby_mac (Aswarby INT8 MAC) tt_um_arrakeen_spsram_direct (TT-Arrakeen-SPSRAM-direct) tt_um_alu (8-bit Interactive ALU) tt_um_JCT_PoC (ttgf jct PoC) tt_um_jct_lea (LEA-128) tt_um_cwru_cpu (CWRU CPU) tt_um_teapot (100Mbps Ethernet Accelerator Wrapper) tt_um_jte_cordic (CORDIC sin/cos generator) tt_um_aidenkoch4 (Three Channel RGB PWM Controller) tt_um_pschuetz_tremolo (Tremolo guitar pedal ASIC) tt_um_jsabree11_fibonacci_checker (fibbonaci_tt) tt_um_connerdaehler_boop (Procedural ASIC) tt_um_Kieckenwama_Traffic_LIGHT_FSM (Traffic Light FSM) tt_um_KimLuu02_WashingMachine_FSM (WashingMachine_FSM) tt_um_PaulineKreis_PWM_Analyser (PWM-Analyser) tt_um_PWM (PWM Generator) tt_um_wokwi_466666882406199297 (Simple Sprinkler) tt_um_rebeccargb_universal_decoder (Universal Binary to Segment Decoder) tt_um_rebeccargb_hardware_utf8 (Hardware UTF Encoder/Decoder) tt_um_spi_master (SPI Master Slave Communication) tt_um_likitha_trng (Secure TRNG Entropy Generator) tt_um_wnn (8-bit WNN Pattern Recognizer) tt_um_raksha (Raksha) tt_um_uart_soc (UART_SOC) tt_um_ecdsa_verify (ECDSA Verification) tt_um_ecc_processor (ECC Processor) tt_um_fast_auth (Fast Authentication Accelerator) tt_um_karthik_trng (TRNG using Ring Oscillator) tt_um_push (Secure V2X Mini Demonstrator) tt_um_santosh_aes_sbox (AES S-Box Accelerator) tt_um_hardware_anomaly_detection (Hardware Anomaly Detection) tt_um_multi_protocol (Multi-Protocol Communication Controller) tt_um_pqc_ntt_butterfly (PQC NTT Butterfly Core) tt_um_cambridge_nlfsr (Programmable Chaotic NLFSR) tt_um_4b_accumulator_cpu (4 bit Accumulator CPU) tt_um_spi_slave (SPI Slave with 8-Register File) tt_um_geeta_doddamani_lfsr (4-bit Maximum-Length LFSR) tt_um_ecc_accelerator (ECC Scalar Accelerator) tt_um_egurapha_chacha20 (ChaCha20) tt_um_configurable_pwm (Configurable PWM Generator) tt_um_Arctic0 (Arctic0 16-bit CPU) tt_um_comp8 (8-bit Comparator) tt_um_pwm_cit (Configurable 8-bit PWM Generator) tt_um_rameshwar_door_lock (Digital Door Lock) tt_um_sandy_venky (8-bit LFSR Circuit) tt_um_ljhahne_pong (Pong) tt_um_v2x_warning (V2X Collision Warning) tt_um_ecc_scalar_mult (ECC Scalar Multiplication) tt_um_fhw_appel_spiPWMio (spiPWMio) tt_um_arrakeen_spsram_direct_sramrules (TT-Arrakeen-SPSRAM-direct-sramrules) tt_um_arrakeen_spsram_direct_5v (TT-Arrakeen-SPSRAM-direct-5V) tt_um_LukeSilva_cartrip (Car Trip) tt_um_coffeepot (100Mpbs 3 port Ethernet switch) tt_um_emiliopeju_lightscan (Lightscan) tt_um_Alanduan21_triad01_top (triad01) tt_um_lif_snn (4-Neuron LIF Spiking Neural Network) tt_um_smerity_mandelbrot (Smerity-Mandelbrot) tt_um_elvtide01_7SegmentDice (7SegmentDice) tt_um_elemental_harmony (Elemental Harmony Game) tt_um_pattern_gen (Programmable Waveform and PWM Generator) tt_um_antimatter15_pdm_vad (PDM Voice Activity Detector) tt_um_layla_spike_detector (Neural Spike Detector) tt_um_detronyx_arith_lab (Detronyx Arithmetic Lab Tile) tt_um_hasheddan_nni (Nearest Neighbor Interpolation) tt_um_brisq (BRISQ) tt_um_santhosh_spike_codec_gf (Neuromorphic Spike Codec (GF180)) tt_um_santhosh_aer_router_gf (Asynchronous-AER Spike Router (4-phase REQ/ACK, 16-entry routing table, GF180)) tt_um_santhosh_snn_wta_gf (Spiking Neural Network WTA Inference Engine (GF180)) tt_um_santhosh_cim_bist_gf (CIM Controller with BIST and Fault Map (GF180)) tt_um_santhosh_neuro_puf_gf (Neuromorphic PUF (distinct-tap LFSR arbiter + memristor XOR, GF180)) tt_um_detronyx_uart_trace_exerciser (Detronyx UART Trace Exerciser) tt_um_ro_puf (Tiny RIng Oscillator PUF) tt_um_franretfie_top (Quadrature sine generator) tt_um_cherny_xor_8bi (XORing given bits) tt_um_mealycpp_ascon_sdmc_uart (ASCON Integrated Crypto Processor) tt_um_reflex_s4 (AER Reflex Chip - MCP2515 CAN gateway) tt_um_polytrig_core (PolyTrig Digital Waveform Synthesis Core) tt_um_waferspace_vga_screensaver (Wafer.space Logo VGA Screensaver) tt_um_2048_vga_game (2048 sliding tile puzzle game (VGA)) tt_um_urish_simon (Simon Says memory game) Available