Hi Thomas,

One option instead of using the Replay block could be to stream 2x 200e6
from your host.

On the X310, this requires using a SRAM image and DPDK. DPDK support was
added with UHD 3.14.1.0 for the X310, I'd suggest to use 3.14.1.1 at this
time though.

Some links on DPDK:

https://www.dpdk.org/
http://files.ettus.com/manual/page_dpdk.html

I've been able to run 2x2 @ 200e6 with the X310 with DPDK using a 4 GHz CPU.

./benchmark_rate --rx_rate 200e6 --rx_channels 0,1 --tx_rate 200e6
--tx_channels 0,1 --args
"addr=192.168.10.2,second_addr=192.168.20.2,use_dpdk=1,num_recv_frames=512,enable_tx_dual_eth=1,skip_ddc=1,skip_duc=1"

num_recv_frames=512 can help if you're seeing overflows.

enable_tx_dual_eth=1 is required for 2x TX @ 200e6

skip_ddc=1,skip_duc=1 can help as well since you'd be sending at full rate.



Regards,
Nate Temple

On Wed, Dec 11, 2019 at 7:03 AM Rob Kossler via USRP-users <
usrp-users@lists.ettus.com> wrote:

> I do not think it is possible using the stock FPGA image.  However, I can
> think of a couple of possibilities:
>
>    - On the N310, Ettus includes 4 FIFO blocks (rather than the DmaFIFO
>    which used the off-FPGA RAM for memory), to provide capability for 4x125
>    MS/s streaming. Perhaps if you built an X310 FPGA image with 2 such FIFO
>    blocks, you could use these rather than the DmaFIFO and achieve the desired
>    streaming.  Note that this requires a Vivado license to build your own FPGA
>    image, but does not require FPGA experience because you would be building
>    an image with "stock" blocks.  One caution though is that streaming at this
>    very high rate still requires a high performance host and so it is still
>    possible that you would have underruns if your host could not keep up.  If
>    you go this route, I believe you will likely need to use the "DPDK"
>    capability which is a bit of a pain to configure and get it working
>    properly.
>    - Another possibility is to create a custom RFNoC block that is
>    similar to the replay block but that uses FPGA memory to store a fixed
>    duration waveform and then plays it out cyclically like the replay block.
>    The Ettus 'window' RFNoC block provides a good example of how to store
>    coefficients and play them out repeatedly.  But, making the needed
>    modifications is not a trivial task except for someone who is pretty good
>    at FPGA programming.
>
> Given that you were trying the replay block, I'm guessing that your Tx
> waveforms are of fixed duration.  What is the duration (in number of
> samples) that you require?
> Rob
>
> On Wed, Dec 11, 2019 at 5:05 AM Thomas Harder <thomas.har...@oca.eu>
> wrote:
>
>> Thank you Rob for this comment.
>>
>> But I am not sure if I understand you correctly. Do you want to say, that
>> it is *IMPOSSIBLE* to stream TX two different waveforms synchronized  on
>> the 2 channels of the x310 with the full bandwidth of 200MS/s on each
>> channel?
>>
>> That is what I am trying the last 6 months full time, starting with
>> Labview under windows and then UHD under Linux with a Dell Precision 5820
>> desktop (16GB RAM, Intel Xeon W-2125 CPU@ 4.GHz x8) with MXI connection,
>> dual 10Gbit connection(Intel X520-DA2), the replay block recently: always
>> the same result: continuous underruns.
>>
>> If you can confirm that this is not possible without an important FPGA
>> change (because I have no experience in this field and I have not the time
>> to invest into it), I must search for another solution to create two
>> different synchronized RF waveforms with 160MHz bandwidth (optical,
>> electronical,…) because this will be just a part of my experimental setup
>> but it is crucial to go on .
>>
>> I am thankful for any advise,
>>
>> Thomas
>>
>>
>>
>>
>>
>> *From: *Rob Kossler <rkoss...@nd.edu>
>> *Sent: *Tuesday, December 10, 2019 5:01 AM
>> *To: *Thomas Harder <thomas.har...@oca.eu>
>> *Cc: *Sam Reiter <sam.rei...@ettus.com>; usrp-users@lists.ettus.com
>> *Subject: *Re: [USRP-users] transmitting on two channels with replay
>> block
>>
>>
>>
>> Apart from solving the underrun issue, there is also an issue with
>> synchronization.  The replay block doesn't presently support timed commands.
>>
>>
>>
>> And, as a side note, the issue with streaming from the host is not just
>> the host.  The DMA FIFO has a maximum bandwidth of something like 600 MS/s
>> (combination of all inputs and outputs) that precludes streaming 400 MS/s
>> in and out of the block simultaneously.  So, even if the host could keep
>> up, the FIFO could not.
>>
>> Rob
>>
>>
>>
>> On Mon, Dec 9, 2019 at 4:34 AM Thomas Harder via USRP-users <
>> usrp-users@lists.ettus.com> wrote:
>>
>> Hi Sam,
>>
>> Thank you for your reply.
>>
>> This morning I set the MCR to 184.32 and I am still having continuous
>> underruns using also
>>
>> replay_ctrl->get_record_fullness
>>
>> for both channels.
>>
>>
>>
>> But since I need the full bandwidth of 160MHz I would like implement a
>> second replay block in my fpga image.
>>
>>
>>
>> Could anyone help me with this?
>>
>> I am really new in fpga programming and for the image with one replay
>> block I was just following the instructions in
>> https://kb.ettus.com/Using_the_RFNoC_Replay_Block.
>>
>> Thank you,
>>
>> Thomas
>>
>>
>>
>>
>>
>> *From: *Sam Reiter <sam.rei...@ettus.com>
>> *Sent: *Friday, December 6, 2019 10:23 PM
>> *To: *Thomas Harder <thomas.har...@oca.eu>
>> *Cc: *usrp-users@lists.ettus.com
>> *Subject: *Re: [USRP-users] transmitting on two channels with replay
>> block
>>
>>
>>
>> Thomas,
>>
>>
>>
>> Upon further investigation, we may be running up to a practical limit of
>> a single CHDR interface rather than an issue with your code. A single
>> replay block servicing two radios will have a max (theoretical) rate of
>> 187.5 MSPS on either channel. This means that you might be able to squeeze
>> full rate out on 2 channels with an MCR of 184.32, but that's cutting it
>> pretty close. Sounds like 2 channels at 200 MSPS with a replay setup will
>> require 2 replay blocks serving each channel independently. If you end up
>> trying either of the above out, I'd be curious to know what results you
>> observe.
>>
>>
>>
>> Sam Reiter
>>
>> Ettus Research
>>
>>
>>
>>
>>
>> On Fri, Dec 6, 2019 at 2:38 PM Sam Reiter <sam.rei...@ettus.com> wrote:
>>
>> Thomas,
>>
>>
>>
>> I'd need to set it up on my end, but I believe you can TX two distinct
>> waveforms from a single replay block instance. You'd need to make sure that
>> your adding your data to the buffer in separate locations and at an address
>> that is a multiple of 8 bytes (which it looks like you're doing from the
>> above snippets). Are you seeing continuous underruns, or just a handful at
>> the beginning on the run? Does your duplicated code also use:
>>
>>
>>
>> replay_ctrl->get_record_fullness
>>
>>
>>
>> on both channels before kicking off the stream start?
>>
>>
>>
>> Sam Reiter
>>
>> Ettus Research
>>
>>
>>
>> On Wed, Dec 4, 2019 at 3:48 AM Thomas Harder via USRP-users <
>> usrp-users@lists.ettus.com> wrote:
>>
>> Hello everyone,
>>
>> Is it possible to transmit two different waveforms on the two channels of
>> the USRP X310 with the two UBX-160 daughterboards?
>>
>> I want to transmit two different waveforms simultaneous (synchronized )
>> on the two channels of the USRP with the full sample rate of 200 MS/s. I
>> tried already to do it with a dual 10Gbit-ethernet connection and I seemed
>> to be limited by my computer. Now I am trying to do it with the replay
>> block.
>>
>>
>>
>> I built the FPGA image with one Replay block as described in
>> https://kb.ettus.com/Using_the_RFNoC_Replay_Block to run the example
>> “replay_samples_from_file” and it is working fine if I transmit just on one
>> channel. Now I was modifying the code by connecting the replay block to
>> both channels:
>>
>>
>> replay_graph->connect(replay_ctrl->get_block_id(),replay_chan,tx_blockid,tx_chan,replay_spp);
>>
>>
>> replay_graph->connect(replay_ctrl->get_block_id(),replay_chan1,tx_blockid1,tx_chan,replay_spp);
>>
>>
>>
>> and writing the same waveform into another region of the DRAM-buffer:
>>
>> replay_ctrl->config_record(0,words_to_replay*replay_word_size,
>> replay_chan);
>>
>> replay_ctrl->config_record(20000,words_to_replay*replay_word_size,
>> replay_chan1);
>>
>> and
>>
>> replay_ctrl->config_play(0,words_to_replay*replay_word_size, replay_chan);
>>
>> replay_ctrl->config_play(20000,words_to_replay*replay_word_size,
>> replay_chan1);
>>
>>
>>
>> where
>>
>> words_to_replay*replay_word_size=16000
>>
>> replay_chan=0
>>
>> replay_chan1=1
>>
>> tx_blockid=0/Radio_0
>>
>> tx_blockid=0/Radio_1
>>
>>
>>
>> then I stream my waveforms to the replay block as defined in the example
>> and I start to replay the data:
>>
>> replay_ctrl->issue_stream_cmd(stream_cmd, replay_chan);
>>
>> replay_ctrl->issue_stream_cmd(stream_cmd, replay_chan1);
>>
>>
>>
>> It works but with plenty of Underflows!!
>>
>>
>>
>> So what does it mean when it says in the manual:
>>
>> “Note that the record and playback buffers do not need to the same,
>> allowing a single Replay block to both record and playback to different
>> regions of memory* simultaneously*.”
>>
>> (https://kb.ettus.com/Using_the_RFNoC_Replay_Block)?
>>
>>
>>
>> Because in the manual it says also:
>>
>> “The replay block has the following features: One input and *one* output”
>>
>> (
>> https://files.ettus.com/manual/classuhd_1_1rfnoc_1_1replay__block__ctrl.html
>> )
>>
>>
>>
>> So if the replay block has just one output why does it have two channels
>> connected to it (replay_chan= 0 and 1)?
>>
>>
>>
>> If one replay block can just stream to one channel at the same time, can
>> I implement easily a second replay block in the FPGA to stream on the two
>> channels of my USRP two different waveforms simultaneously?
>>
>>
>>
>> Thank you,
>>
>> Thomas
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> _______________________________________________
>> USRP-users mailing list
>> USRP-users@lists.ettus.com
>> http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com
>>
>>
>>
>> _______________________________________________
>> USRP-users mailing list
>> USRP-users@lists.ettus.com
>> http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com
>>
>>
>>
> _______________________________________________
> USRP-users mailing list
> USRP-users@lists.ettus.com
> http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com
>
_______________________________________________
USRP-users mailing list
USRP-users@lists.ettus.com
http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com

Reply via email to