PyRogue API Reference
This page documents the platform-level PyRogue classes provided by the
axi_soc_ultra_plus_core Python package (installed from the
firmware/submodules/axi-soc-ultra-plus-core/ submodule). These classes form the
foundation that every Simple-*-Example application repo extends.
Application-level PyRogue (the per-board Root / RFSoC / Application device tree)
is documented in the reference pages of each application repo.
Device tree pattern
The PyRogue device tree is a direct mirror of the RTL AXI-Lite address hierarchy.
Each pr.Device subclass holds its offset relative to its parent; the absolute
address of any register is the sum of offsets along the path from root to leaf.
class MyDevice(pr.Device):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.add(SomeChild(
offset = 0x00_000000,
param = value,
))
Key rules:
Always pass
**kwargs— never enumerate base-class arguments explicitly.Use
self.add(...)for every child device or variable.Offset addresses use hex with underscore byte groupings:
0x00_000000,0xA000_0000,0x04_0000_0000.Each
pr.Deviceoffset must match the correspondingAXIL_CONFIG_C(INDEX).baseAddrvalue generated in the VHDL crossbar.
AxiSocCore
python/axi_soc_ultra_plus_core/_AxiSocCore.py
AxiSocCore is the platform core PyRogue Device. It wraps the AXI-Lite bridge from
the Zynq PS to the PL, the DMA engine, and the SysMon subsystem.
Responsibilities:
Exposes the AXI-Lite register space of the
AxiSocUltraPlusCoreRTL block.Provides
AxiVersion, system monitor (SysMonLvAuxDet), and DMA status registers.Acts as the first-level child of the application
RFSoCdevice at a fixed offset determined by the platform crossbar.
Typical instantiation (inside the application RFSoC device):
import axi_soc_ultra_plus_core as soc_core
self.add(soc_core.AxiSocCore(
offset = 0x0000_0000,
expand = True,
))
AppRingBuffer
python/axi_soc_ultra_plus_core/rfsoc_utility/_AppRingBuffer.py
AppRingBuffer is the PyRogue Device that controls the ADC and DAC capture ring
buffers in the RTL. It provides AXI-Lite register access to the ring buffer control and
status, and is the source of the DMA inbound data stream.
Responsibilities:
Sets the ring buffer trigger mode, depth, and channel enables.
Reports capture status (fill level, overrun flags).
Coordinates with the host-side
RingBufferProcessorto frame captured ADC/DAC samples.
AppRingBuffer is instantiated inside the application Application device, not directly
in AxiSocCore. Each application repo sets the numAdcCh and numDacCh generics to
match the board’s RFDC configuration.
RingBufferProcessor
python/axi_soc_ultra_plus_core/hardware/_RingBufferProcessor.py
RingBufferProcessor is a host-side Rogue stream receiver. It sits at the end of the
DMA TCP stream pipeline and processes captured ADC or DAC frames for display or storage.
The stream is wired in the application Root using the Rogue >> operator:
# Connect TCP stream → drop FIFO → ring buffer processor
self.ringBufferAdc[i] >> self.adcDropFifo[i] >> self.adcProcessor[i]
The drop FIFO (maxDepth=1) prevents host-side backpressure from stalling the DMA
path inside the firmware.
RFDC API
python/axi_soc_ultra_plus_core/rfsoc_utility/_Rfdc.py
The Rfdc device (and its children RfdcTile and RfdcBlock) wraps the Xilinx RF
Data Converter IP core register map. It exposes:
Per-tile and per-block ADC/DAC configuration registers.
Multi-Tile Synchronization (MTS) control.
Sample rate, decimation/interpolation factor, and mixer frequency settings.
The Rfdc device is instantiated at the RFDC crossbar slot (index 1 in the top-level
crossbar). Application Root.start() sequences clock initialization before calling
Rfdc.Init() to program the IP core.
Source files:
PyDM GUI launcher
The platform package provides a PyDM-based GUI entry point:
from axi_soc_ultra_plus_core.rfsoc_utility import pydm as rfsoc_pydm
rfsoc_pydm.runPyDM(root=root, title='RFSoC Demo')
The GUI launcher is invoked by each application repo’s devGui.py script after
constructing the Root object and calling root.start(). It launches the
pyrogue.pydm.runPyDM() GUI backed by the platform ZMQ server at the address
configured in Root.__init__.
The axi_soc_ultra_plus_core.rfsoc_utility.pydm subpackage contains PyDM display
panels for ADC/DAC ring buffer waveforms, RFDC tile configuration, and ring buffer
control — all board-agnostic and reused across every Simple-*-Example application.