Update.  I solved the bulk of the performance problem.  I realized that I
wasn't comparing apples to apples when comparing my rfnoc tx graph with my
multi_usrp example.  In the latter example, I was taking care of sending
data in vector sizes that were aligned with
tx_stream->get_max_num_samples() which in my case defaults to 1996.  After
I changed my example to send data (using send() function) with vector
length 1996, things started behaving much better.  In fact, I am now able
to send single channel data at 200 MS/s with just one or two "U" at the
beginning.

But, I still have the questions about the "L" which I believe are caused by
sub-optimal configuration of the pkt_size parameter in the connect() call
(see warnings below).  Presently, my code uses the default value of zero.
Also, I don't know what's causing the exception at the end (see assertion
below).
Rob


On Tue, Oct 2, 2018 at 3:33 PM Rob Kossler <rkoss...@nd.edu> wrote:

> Using similar code, but with the addition of the DmaFIFO to the chain, I
> have created the attached source code.  Additionally, I have attached a
> "log" file which shows the command line parameters as well as the response
> for an individual run.  I have a few remarks:
>
>    - In general, the code works in that I can repetitively stream the
>    desired waveform file and it looks as expected on a signal analyzer.
>    However, it is not well optimized such that when I increase the streaming
>    rate to 100 MS/s, I get errors (and sometimes see a couple of issues at 50
>    MS/s.
>    - In the log file, you will find some "L" and many "U".  This was
>    actually a "good" run.  In additional runs, there were many more "U" that
>    continued throughout the run
>    - If instead of this rfnoc tx example, I use a multi_usrp object to
>    handle the details of connecting the blocks and streaming the data, I have
>    no problems (no "L" or "U"), even at 100 MS/s
>    - So, it seems clear to me that I have not connected / configured the
>    blocks optimally
>
> Here are my questions:
>
>    - What am I doing wrong that is causing the sub-optimal streaming?
>    - Why do I get the following warnings?  Could this explain the
>    sub-optimal streaming?  What is the correct way to configure SPP for each
>    block or connection?
>       - [WARNING] [RFNOC] Assuming max packet size for 0/DmaFIFO_0
>       - [WARNING] [RFNOC] Assuming max packet size for 0/DUC_0
>    - Why do I get the following error message upon program termination?
>       - AssertionError: [0/DmaFIFO_0] Attempting to disconnect input port
>       0, which is not registered as connected!
>
> Thanks for any help.
> Rob
>
>
> On Thu, Sep 20, 2018 at 7:22 PM Ryan Marlow via USRP-users <
> usrp-users@lists.ettus.com> wrote:
>
>> Hey Leo,
>> Glad to hear you were able to work things out. One quick note about the
>> code I attached previously. Located a minor typo/bug that you'll want to
>> fix if you want to actually transmit useful data.
>>
>>> 219         radio_ctrl->set_rx_frequency(freq, radio_chan);
>>>
>> should be:
>>
>>> 219         radio_ctrl->set_tx_frequency(freq, radio_chan);
>>>
>> Notice the change from rx->tx.
>> Best,
>> Ryan Marlow
>>
>>
>> On Thu, Sep 20, 2018 at 10:35 AM, Leandro Echevarría <
>> leoechevar...@gmail.com> wrote:
>>
>>> Hey Ryan,
>>>
>>> Thanks a lot! I actually ended up doing pretty much the exact same
>>> things you described, and came up with a piece of code very similar to
>>> yours. Yours is neater though, so I will keep it ;-).
>>>
>>> Regards,
>>>
>>> Leo
>>>
>>> On Wed, Sep 19, 2018 at 7:52 PM Ryan Marlow <r...@lmarlow.com> wrote:
>>>
>>>> Hey Leo,
>>>> I haven't seen anyone respond yet and I recently needed to develop a TX
>>>> RFNoC example of my own. I worked off the rfnoc_rx_to_file.cpp example. Far
>>>> from perfect, but it gets the job done (transmits data). The main changes
>>>> are:
>>>> - copied send_from_file function from tx_samples_from_file.cpp example
>>>> to handle the streaming of data from the input file
>>>> - reversed the order that blocks are connected in the graph->connect()
>>>> function. Now connects optional arg block -> radio. Was radio -> optional
>>>> arg block.
>>>> - uses tx_stream instead of rx_stream.
>>>> Just add this cpp file to the CMake file in the host/examples dir to
>>>> build it then try it out.
>>>> I ran it with:
>>>> build/examples$ ./rfnoc_tx_from_file --block-id DUC_0 --block-args
>>>> output_rate=200e6,input_rate=5e6 --duration 5 --file usrp_samples.dat
>>>>
>>>> Hope that helps,
>>>> Ryan
>>>> --
>>>> Ryan L. Marlow
>>>> R L Marlow Consulting LLC
>>>> rlmarlow.com
>>>>
>>>
>>
>>
>> --
>> Ryan L. Marlow
>> R L Marlow Consulting LLC
>> rlmarlow.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