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