<div dir="ltr">Hey Rob,<div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Regarding overflows or dropped packets, is this something that might<br>occur inside the FPGA (CE to CE) or is it just a concern on the<br>transfer to the host CPU (which is my only experience with overflows<br>or dropped packets)?  If on the FPGA, what would be the cause of<br>overflows / dropped packets in the following scenario:<br>rx_radio->DDC->FFT->host?</blockquote><div><br></div><div>Overflow generally only occurs due to the host being unable to consume samples quickly enough. It is possible for overflows to occur due to a RFNoC block not consuming samples quickly enough, but all in-tree blocks are designed to avoid that situation. Drops only occur between the device and host.</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Regarding the header, is the concern the following? Assume packet size<br>of 1024 and FFT size of 4096 such that there would be 4 packets for<br>each FFT; Now assume that EOB occurs on the 3rd packet such that the<br>FFT is 3/4 filled.  Thus, on the next start-of-stream, the FFT will be<br>in a bad state.  Is this the issue?  If not, please explain.  If so,<br>is the fix to reset the FFT on any incoming EOB? Without any fix, does<br>this issue correct itself in some way during the subsequent stream or<br>is the input frame mismatch issue going to remain until the FFT is<br>manually reset?</blockquote><div><br></div><div>Correct, resetting the FFT on EOB is a possible solution. If you reset on EOB though, you'll need to figure out a way to still send that final packet with EOB set to the host. Maybe zero fill the missing samples to complete the FFT? The issue will also fix itself on the next burst assuming you don't care that the first FFT might be corrupt.</div><div><br></div><div>Jonathon</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Mar 3, 2019 at 1:16 AM Rob Kossler <<a href="mailto:rkossler@nd.edu">rkossler@nd.edu</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Thanks Jonathon,<br>
<br>
> I'm glad you found those options useful. Unfortunately, there are a number of corner cases that those options do not handle. You can run into synchronization issues when overflows and dropped packets occur. In the overflow case, if one occurs while the FFT is being filled then the next FFT output will be incorrect. In the dropped packet case, the received FFT frames could end up shifted between two FFT frames. The dropped packet case is by the far worse of the two.<br>
<br>
Regarding overflows or dropped packets, is this something that might<br>
occur inside the FPGA (CE to CE) or is it just a concern on the<br>
transfer to the host CPU (which is my only experience with overflows<br>
or dropped packets)?  If on the FPGA, what would be the cause of<br>
overflows / dropped packets in the following scenario:<br>
rx_radio->DDC->FFT->host?<br>
<br>
> The block also does not handle the packet header correctly when FFTs are split between multiple packets. For example, EOBs will not cause the FFT core to reset, so the next burst could have an incorrect FFT output at the beginning. Most of these issues can be worked around or even ignored, but I think for general usage the block will need to be updated to handle them properly.<br>
<br>
Regarding the header, is the concern the following? Assume packet size<br>
of 1024 and FFT size of 4096 such that there would be 4 packets for<br>
each FFT; Now assume that EOB occurs on the 3rd packet such that the<br>
FFT is 3/4 filled.  Thus, on the next start-of-stream, the FFT will be<br>
in a bad state.  Is this the issue?  If not, please explain.  If so,<br>
is the fix to reset the FFT on any incoming EOB? Without any fix, does<br>
this issue correct itself in some way during the subsequent stream or<br>
is the input frame mismatch issue going to remain until the FFT is<br>
manually reset?<br>
<br>
Thanks for your help.<br>
Rob<br>
<br>
<br>
> On Sat, Mar 2, 2019 at 2:41 AM Rob Kossler via USRP-users <<a href="mailto:usrp-users@lists.ettus.com" target="_blank">usrp-users@lists.ettus.com</a>> wrote:<br>
>><br>
>> Turns out there was a surprisingly simple modification to allow FFTs longer than 1024.  The axi_wrapper will automatically resize packets for you if you configure it to do so.  All I had to do was set RESIZE_OUTPUT_PACKET(1) (and keep SIMPLE_MODE(1)) which caused the output packets to be resized to match the input packet size.  I was able to then run 2048 and 4096 pt FFTs successfully (& producing the expected results) and I could use any packet size I wanted going in and out of the overall noc block.<br>
>><br>
>> I did not even have to resize the packets going into the FFT because the FFT doesn't care about input packet size with the caveat that it generates various "bad size" events if it detects mismatches.  Since I am not monitoring such events, it doesn't really matter. And, if I did care about these bad size events, the fix is simply to add RESIZE_INPUT_PACKET(1) and set the desired resize value (i.e., the FFT length) using the axi_wrapper "m_axis_pkt_len_t*" inputs.<br>
>><br>
>> With such a simple fix, it seems that Ettus should permanently change noc_block_fft.v to incorporate this.  Another change would be to modify this block so that MAX_FFT_SIZE_LOG2 is 12 rather than its current setting of 11 in order to match the axi_fft IP core set for a max FFT of 4096.<br>
>><br>
>> Rob<br>
>><br>
>> On Fri, Mar 1, 2019 at 11:24 AM Jason Matusiak <<a href="mailto:jason@gardettoengineering.com" target="_blank">jason@gardettoengineering.com</a>> wrote:<br>
>>><br>
>>> Probably not the approved way, but I made an FFT 2048 block a while back.  I didn't much with packet sizes or anything, I just sucked in two 1024 packets, did the FFT, and then sent two 1024 packets back out.  It seemed to work fine.  The only issue is that you have to remember downstream that you need 2 vectors in a row to get your data.<br>
>>><br>
>>> ________________________________<br>
>>> From: USRP-users <<a href="mailto:usrp-users-bounces@lists.ettus.com" target="_blank">usrp-users-bounces@lists.ettus.com</a>> on behalf of Rob Kossler via USRP-users <<a href="mailto:usrp-users@lists.ettus.com" target="_blank">usrp-users@lists.ettus.com</a>><br>
>>> Sent: Thursday, February 28, 2019 4:08 PM<br>
>>> To: usrp-users<br>
>>> Subject: [USRP-users] RFNoC FFT size > 1024<br>
>>><br>
>>> Hi,<br>
>>> I would like to implement an RFNoC FFT that can work for lengths > 1024.  Here's what I think I know:<br>
>>><br>
>>> Current size for CE-to-CE packets is restricted to 8000 bytes (2000 samples)<br>
>>> Current RFNoC FFT size is tied to packet size and thus 1024 is the max FFT size that can fit in a packet<br>
>>><br>
>>> After reviewing previous posts and Xilinx FFT IP core documentation, it seems that all I need to do is add packet resize logic at the input and output of the block.  Specifically, I am thinking of using "packet_resizer.v" at both input and output (but only modifying tuser in the output instance).<br>
>>><br>
>>> Questions<br>
>>><br>
>>> Is this a good approach?<br>
>>> Anything special that I need to take care of?<br>
>>> Does the selection of FFT architecture (pipelined, radix-4, etc) have any relevance concerning this issue?<br>
>>><br>
>>> Rob<br>
>><br>
>> _______________________________________________<br>
>> USRP-users mailing list<br>
>> <a href="mailto:USRP-users@lists.ettus.com" target="_blank">USRP-users@lists.ettus.com</a><br>
>> <a href="http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com" rel="noreferrer" target="_blank">http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com</a><br>
</blockquote></div>