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

Reply via email to