<!– SPDX-FileCopyrightText: 2026 Ahmed Imamović SPDX-FileCopyrightText: 2026 Tarik Hamedović SPDX-License-Identifier: CC-BY-SA-4.0 –>
CSR Map
This page summarizes the software-visible Control and Status Registers (CSRs) generated by LiteX for the uberClock SoC.
The CSR region is memory-mapped at:
0xF0000000
Within that region, LiteX exposes timer, DMA, datapath control, event, UART, and Ethernet-related register banks.
Overview
The most important CSR banks for the uberClock design are:
UBDDR3for DDR3-backed DMA controlMAINfor DSP, routing, FIFO, and capture controlEVMfor event/interrupt signalingCFG_LINKfor atomic configuration commit into the datapathUARTfor firmware console I/O
The exact register names come from the auto-generated LiteX csr.h file.
UBDDR3 bank
Base address:
0xF0000800
This bank controls high-speed capture into DDR3.
DMA control registers
dma_req– start a DMA requestdma_inc– enable incrementing destination addressdma_size– transfer size encodingdma_addr0– low 32 bits of DDR destination addressdma_addr1– high 32 bits of DDR destination address
DMA status registers
dma_busy– DMA transfer is activedma_err– DMA error flagcalib_done– DDR3 controller initialization/calibration complete
This bank is used by the high-speed capture workflow and the UDP export flow.
MAIN bank
Base address:
0xF0001000
This is the main software-visible control surface for the DSP datapath.
NCO and phase control
phase_inc_ncophase_inc_down_1..phase_inc_down_5phase_inc_down_refphase_inc_cpu1..phase_inc_cpu5
These registers control the numerically controlled oscillator and the downconversion / CPU-generated phase increments used in the signal path.
Magnitude and gain control
nco_magmag_cpu1..mag_cpu5gain1..gain5
These registers set the signal magnitudes and per-channel gains.
Routing and debug selection
input_selectupsampler_input_muxoutput_select_ch1output_select_ch2lowspeed_dbg_selecthighspeed_dbg_select
These registers control routing through the datapath and select which internal signals are exposed through the debug paths.
CPU-fed sample injection
upsampler_input_xupsampler_input_yfinal_shift
These registers allow firmware to inject low-rate samples into the datapath and adjust final output scaling.
FIFO interface
Downsample FIFO registers:
ds_fifo_popds_fifo_xds_fifo_yds_fifo_overflowds_fifo_underflowds_fifo_cleards_fifo_flags
Upsampler FIFO registers:
ups_fifo_xups_fifo_yups_fifo_pushups_fifo_overflowups_fifo_underflowups_fifo_clearups_fifo_flags
These registers provide the firmware-visible streaming interface used for low-speed interaction with the DSP path.
Low-speed capture
cap_enablecap_beatscap_armcap_idxcap_donecap_data
These registers support both the low-speed capture path and the control side of the DDR3-backed capture flow.
Readback / measurement
magnitudephase
These registers expose processed measurement-style outputs back to firmware.
EVM bank
Base address:
0xF0001800
This bank provides the event manager used by the firmware runtime.
Registers:
statuspendingenable
The main event exposed here is ce_down, which is promoted into a LiteX
interrupt/event source and used by firmware to service the low-rate runtime
path.
CFG_LINK bank
Base address:
0xF0002000
This bank supports atomic configuration transfer into the datapath.
Registers:
commit– enqueue / commit one configuration updateoverflow– sticky overflow indicatorfifo_flags– readable/writable status flags
This is the software-visible side of the configuration snapshot / commit path.
CTRL bank
Base address:
0xF0002800
Registers:
resetscratchbus_errors
This bank provides generic SoC control and debug support.
UART bank
Base address:
0xF0005000
Registers include:
rxtxtxfullrxemptyev_statusev_pendingev_enabletxemptyrxfull
This bank underlies the firmware UART console.
Other generated banks
The generated CSR space also includes:
TIMER1at0xF0000000ETHMACat0xF0003000ETHPHYat0xF0003800IDENTIFIER_MEMat0xF0004000TIMER0at0xF0004800
These are part of the LiteX SoC environment but are less central to the uberClock-specific DSP control path.
Notes
The exact register names and helper accessors are generated by LiteX into
generated/csr.h. Firmware code normally accesses them through the generated
inline functions such as:
main_phase_inc_nco_write(value);
main_gain1_write(value);
main_cap_enable_write(1);
ubddr3_dma_req_write(1);