Hey Nick,

The DDC and the DUC (or any other block using axi_rate_change) will not
modify the packet size. Very small packets can cause underruns once the
header becomes a large percentage of the overall packet size. I'm surprised
that you are running into underruns at 20 samples per packet as that is
less than 10% header overhead. The theoretical crossbar throughput is 375
MSPS. Noc_shell's throughput is similar to the crossbar's since it also
operates on the packet line by line. Flow control packets and crossbar
switching add to the overhead as well, but there should still be plenty of
throughput left.

What version/branch of UHD are you using? If you are using UHD-3.13, try
setting your MTU to something closer to your actual packet size or try
using UHD-3.14.

As for the EOB issue, when the radio core encounters an underrun it will
stop transmitting and wait for an EOB. I wonder if the EOB never comes for
some reason, such as the DUC is not outputting it. Have you tried testing
in loopback and seeing if the DUC actually outputs an EOB on the last
packet?

Jonathon

On Sat, Mar 9, 2019 at 8:36 AM Nick Foster via USRP-users <
usrp-users@lists.ettus.com> wrote:

> Hi all,
>
> I'm trying to write an RFNoC application which generates very short bursts
> -- 20 samples or less -- which are then upsampled. I'm running into
> problems with the radio underflowing which I believe has to do with the DUC.
>
> I can reduce the problem to the following -- create an RFNoC graph (UHD
> only, no gr-ettus) with a radio and a DUC. Wire the DUC to the radio and
> get a tx_streamer pointing to the DUC. Set the DUC to interp=1024. Start
> the streamer via calling the radio's set_tx_streamer().
>
> Now send a packet to the DUC, a short one. Try 20 samples. You'll see a
> bunch of underflows come back, and if you set EOB then the radio will stop
> transmitting. (Incidentally, why is that? If I set EOB and the transmission
> results in an underflow, subsequent bursts won't transmit at all.)
>
> If I pull the radio out of the loop and gather the DUC output on the host,
> Wireshark shows I'm receiving a whole slew of length-88 packets. That's 20
> samples after the 64-bit header. So, it looks to me like axi_rate_change
> inside the DUC isn't resizing the output packets, it's just sending out *lots
> of them* -- in this case, 1024 20-sample packets for every input packet.
> This doesn't make a whole lot of sense to me as it's inefficient, and I can
> fully believe the radio is underflowing while trying to swallow a whole
> mess of short packets at full radio rate.
>
> So: is this intended behavior, and is there anything I can do to change
> that behavior besides padding my bursts?
>
> Nick
> _______________________________________________
> 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