[RF SoC 4x2] How to send complexes from a board to another via the analog converters?


I have 2 RF Soc 4x2. I want to send a stream of complex from one to the other, from a DAC port to a ADC port of the other board. However, there is no indication on where to send the complexes from the PS to the DAC port. Can someone indicate me a way to do this electromagnetic transfer, please? The tutorials “rf_dataconverter_introduction” and “rf_spectrum_analysis” in the base Overlay are only presenting the carrier frequence and not where to send the message signal.

Thank you in advance for your assistance

1 Like

Hi @matthew,

Is this what you are looking for? GitHub - strath-sdr/rfsoc_ofdm: PYNQ example of an OFDM Transmitter and Receiver on RFSoC.

If not, can you please clarify what do you mean with “send the complexes”?


1 Like


Thank for the link. This github talks about sending symbols, but do not detail the DAC part, it just uses “ofdm_hw.ofdm_transmitter.modulation_dropdown.get_widget()” for the analog transmission.

Precisely, I want to generate an array of complexes via a python code in a board A (in its PS), send it to the PL of board A, send it via the ADC to the DAC port of a board B, and read that array in the PS of board B. I know how to read the array from the receiving PL of the board B, because there are DMA blocks in the Overlay for that part. However, I do not know how to transmit this array of complexes, as there are no DMA blocks in the transmitter part of the Overlay (see picture).

Any ideas?

Thank you in advance for your assistance

1 Like

Maybe check this design GitHub - Xilinx/RFSoC-MTS: A PYNQ overlay demonstrating AMD RFSoC Multi-Tile Synchronization (MTS).

1 Like

I check the notebooks of your link and of the multiple projects in that github:
(University of Strathclyde - Software Defined Radio Research Laboratory · GitHub)
The options were not allowing the transfer of complexes, only integers or strings.

I have a question about the base Overlay and about a RF DC jupyter notebook:
(RFSoC-PYNQ/boards/RFSoC4x2/base/notebooks/rfdc/01_rf_dataconverter_introduction.ipynb at master · Xilinx/RFSoC-PYNQ · GitHub)

the DAC is sending a modulated signal. In the jupyter, it defines the carrier signal via

base.radio.transmitter.channel[0].dac_block.MixerSettings[‘Freq’] = 900 # MHz
for i in range(0, len(base.radio.transmitter.channel)):
base.radio.transmitter.channel[i].control.gain = 0.5
base.radio.transmitter.channel[i].control.enable = True

But where does it find the message to be transmitted? in this Jupyter, the only mention is in the definition of the block amplitude controller:

  • Amplitude Controller - can apply a value to the input of the RF DAC. The value can be set by writing to an AXI-Lite register. The register value can be mixed with the Numerically Controlled Oscillator (NCO) in the fine mixer to create a tone. The tone is looped back round into the RF ADC.

How can I write in this AXI-Lite register? How can I send the message signal to the amplitude controller via a python function?

In the Vivado design, there are no DMA for the transmission, only a link to the PS. How can I send the message to the amplitude controller via the PS?
I tried MMIO via the adress of the link but it did not work, as mmio.read only returned integers and not complexes.

Thank you in advance for your assistance.

Any Idea about that AXI register mentioned?