Hi,
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”?
Mario
1 Like
Hi,
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
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?
After some studies on the provided Vivado block design, it seems that the architecture is only for receiving signals via the ADCs. Their channels are more detailed with DMA blocks to send the data to the PS of the board. On the contrary, the transmitter part with the DAC only contains a block “Amplitude Controller” that formates an AXi-KLite signal to an AXI-Stream format for the RF Data Converter. It seems to send only a specific signal to test via a loopback setup if the ADC ports are damaged or not.
To conclude, it is currently better to use a custom architecture with custom blocks to transmit signals via the DAC port of the RFSoC 4x2.
2 Likes