Hi,
We have an X300 with LFRX on slot A, and LFTX on both slots (uhd_usrp_probe output attached).
The idea was to do signal processing on two synchronously sampled channels from the same LFRX board, using a custom RFNoC OOT. So something along the lines of:
Radio0,0 LFRX(A) -> DDC0,0 -> |in_0 OOT-block out | -> DUC1,0 -> LFTX(A) Radio1,0
Radio0,1 LFRX(B) -> DDC0,1 -> |in_1 |
I tried to test dual-channel processing with RFNoC blocks shipped with UHD, so I built a custom FPGA-bitstream with various blocks connected to individual stream points (as listed in the uhd_usrp_probe output, yml file is also attached).
So the first obvious test was to loopback two RX channel to two TX channels, like this:
Radio0 LFRX(A) -> DDC0,0 -> DUC1,0 -> LFTX(A) Radio1
Radio0 LFRX(B) -> DDC0,1 -> DUC0,0 -> LFTX(A) Radio0
First channel goes from Radio0 to Radio1, and it seems to work. But I can't get the second channel to work. So is it even possible to loop back data from RX to TX on the same radio? Each radio instance has only one TX DSP chain, as I understood, so I had to use the TX chain on the Radio0 side, too. The custom FPGA image has separate SEPs for each DDC and DUC, so traffic should be correctly routed through the CHDR crossbar. Please see the attached minimal C++ example (loopback_test.cpp, modeled after the loopback example shipped with UHD source code).
Active connections formed in the test program are like so:
0/Radio#0:0==>0/DDC#0:0
0/Radio#0:1==>0/DDC#0:1
0/DDC#0:0-->0/DUC#1:0
0/DDC#0:1-->0/DUC#0:0
0/DUC#1:0==>0/Radio#1:0
0/DUC#0:0==>0/Radio#0:0
Graph is committed without problems.
The program outputs something like:
Issuing start stream cmd...
OWait...
U
Test signal propagates fine from Radio0 to Radio1, but the second one does not seem to work. The overflow indicator "O" always appears when trying use the second channel.
In an attempt to eliminate the possibility of loopback problems, I also tried the addsub -block with the subtract-output statically connected to a null sink.
The test program (addsub.cpp) does not seem to stream anything, and outputs the following warnings:
[WARNING] [RFNOC::GRAPH] One or more blocks timed out during flush!
O[WARNING] [RFNOC::GRAPH::DETAIL] Cannot forward action rx_event from 0/Radio#0:OUTPUT_EDGE:1, no neighbour found!
O[WARNING] [RFNOC::GRAPH::DETAIL] Cannot forward action rx_event from 0/Radio#0:OUTPUT_EDGE:0, no neighbour found!
Active connections for the addsub-test are:
0/Radio#0:0==>0/DDC#0:0
0/Radio#0:1==>0/DDC#0:1
0/DDC#0:0-->0/AddSub#0:0
0/DDC#0:1-->0/AddSub#0:1
0/AddSub#0:0-->0/DUC#1:0
0/AddSub#0:1==>0/NullSrcSink#0:0
0/DUC#1:0==>0/Radio#1:0
So am I missing something trivial here? I guess there are at least three things that could be wrong here:
- How to correctly configure synchronous dual-channel sampling?
- Is it possible to loop back data from Radio0 RX to Radio0 TX through CHDR crossbar?
- How to correctly configure and use the addsub-block?
Is it necessary to issue stream commands to both RX radio channels, like so (with identical time spec):
rx_radio_ctrl->issue_stream_cmd(stream_cmd, 0);
rx_radio_ctrl->issue_stream_cmd(stream_cmd, 1);
One more thing to note: using Gnuradio UHD/RFNoC interface (major version 3.10) to stream 2 channels to host though DDCs and RX streamers works just fine.
Thank you in advance.
With best regards,
Kalle Hanhijärvi
Hi,
We have an X300 with LFRX on slot A, and LFTX on both slots (uhd_usrp_probe output attached).
The idea was to do signal processing on two synchronously sampled channels from the same LFRX board, using a custom RFNoC OOT. So something along the lines of:
Radio0,0 LFRX(A) -> DDC0,0 -> |in_0 OOT-block out | -> DUC1,0 -> LFTX(A) Radio1,0
Radio0,1 LFRX(B) -> DDC0,1 -> |in_1 |
I tried to test dual-channel processing with RFNoC blocks shipped with UHD, so I built a custom FPGA-bitstream with various blocks connected to individual stream points (as listed in the uhd_usrp_probe output, yml file is also attached).
So the first obvious test was to loopback two RX channel to two TX channels, like this:
Radio0 LFRX(A) -> DDC0,0 -> DUC1,0 -> LFTX(A) Radio1
Radio0 LFRX(B) -> DDC0,1 -> DUC0,0 -> LFTX(A) Radio0
First channel goes from Radio0 to Radio1, and it seems to work. But I can't get the second channel to work. So is it even possible to loop back data from RX to TX on the same radio? Each radio instance has only one TX DSP chain, as I understood, so I had to use the TX chain on the Radio0 side, too. The custom FPGA image has separate SEPs for each DDC and DUC, so traffic should be correctly routed through the CHDR crossbar. Please see the attached minimal C++ example (loopback_test.cpp, modeled after the loopback example shipped with UHD source code).
Active connections formed in the test program are like so:
0/Radio#0:0==>0/DDC#0:0
0/Radio#0:1==>0/DDC#0:1
0/DDC#0:0-->0/DUC#1:0
0/DDC#0:1-->0/DUC#0:0
0/DUC#1:0==>0/Radio#1:0
0/DUC#0:0==>0/Radio#0:0
Graph is committed without problems.
The program outputs something like:
Issuing start stream cmd...
OWait...
U
Test signal propagates fine from Radio0 to Radio1, but the second one does not seem to work. The overflow indicator "O" always appears when trying use the second channel.
In an attempt to eliminate the possibility of loopback problems, I also tried the addsub -block with the subtract-output statically connected to a null sink.
The test program (addsub.cpp) does not seem to stream anything, and outputs the following warnings:
[WARNING] [RFNOC::GRAPH] One or more blocks timed out during flush!
O[WARNING] [RFNOC::GRAPH::DETAIL] Cannot forward action rx_event from 0/Radio#0:OUTPUT_EDGE:1, no neighbour found!
O[WARNING] [RFNOC::GRAPH::DETAIL] Cannot forward action rx_event from 0/Radio#0:OUTPUT_EDGE:0, no neighbour found!
Active connections for the addsub-test are:
0/Radio#0:0==>0/DDC#0:0
0/Radio#0:1==>0/DDC#0:1
0/DDC#0:0-->0/AddSub#0:0
0/DDC#0:1-->0/AddSub#0:1
0/AddSub#0:0-->0/DUC#1:0
0/AddSub#0:1==>0/NullSrcSink#0:0
0/DUC#1:0==>0/Radio#1:0
So am I missing something trivial here? I guess there are at least three things that could be wrong here:
- How to correctly configure synchronous dual-channel sampling?
- Is it possible to loop back data from Radio0 RX to Radio0 TX through CHDR crossbar?
- How to correctly configure and use the addsub-block?
Is it necessary to issue stream commands to both RX radio channels, like so (with identical time spec):
rx_radio_ctrl->issue_stream_cmd(stream_cmd, 0);
rx_radio_ctrl->issue_stream_cmd(stream_cmd, 1);
One more thing to note: using Gnuradio UHD/RFNoC interface (major version 3.10) to stream 2 channels to host though DDCs and RX streamers works just fine.
Thank you in advance.
With best regards,
Kalle Hanhijärvi