Thanks Wade!
Perhaps this information could be incorporated into the RFNoC specification.
Rob

On Thu, May 27, 2021 at 9:53 PM Wade Fife <wade.f...@ettus.com> wrote:

> Rob,
>
> The "buff_size" parameter controls the "INGRESS_BUFF_SIZE" Verilog
> parameter used in the stream endpoint. It has a significant effect on
> streaming performance in the TX direction (host to USRP). A practical lower
> limit is two MTU-sized packets, and the rfnoc_image_builder will coerce it
> to at least that value. If the port is not actually used for steaming RF
> data, you can set buff_size to 0 and it will use a very small FIFO
> (32-deep). You generally want big buffers for the TX data paths that stream
> RF data at high rates and the default images set these about as large as is
> practical for the FPGA size.
>
> The "payload_fifo_depth" parameter sets the "PAYLOAD_FIFO_SIZE" Verilog
> parameter used in the NoC Shell in both the TX and RX directions. I don't
> think there's really a lower limit on this one and I agree that it makes
> sense to make this 2 for most blocks. How big this one should be is block
> dependent. For example, the Replay block can use this as a buffer that can
> help to hide some of the latency of the DRAM. The Radio can benefit because
> it serves as a buffer that can guard against underflow/overflow. But most
> other blocks can set it to a really small value, like 2, which basically
> means no FIFO.
>
> The context/info FIFO depths don't need to be very big, and they should
> already be small by default. I believe they're usually set to 32-deep.
> These FIFOs essentially buffer the header information for packets being
> sent/received. You would only make these bigger if you needed to have
> several packets in flight simultaneously in a single block (for example, if
> you had big payload FIFOs and a small packet size such that multiple
> packets were buffered in the FIFO at the same time). There's not really
> much benefit to making them smaller than 32 since FIFOs that size are
> implemented using SRL, which is very efficient. So I don't recommend
> decreasing this value.
>
> Wade
>
> On Thu, May 27, 2021 at 9:55 AM Rob Kossler <rkoss...@nd.edu> wrote:
>
>> I am having some trouble building a custom RFNoC 4 FPGA design and so I
>> am looking to reduce the footprint. One easy thing to try is to reduce
>> various buffer sizes such as the ingress buffer size on the streaming
>> endpoint or the incoming RFNoC block fifo depths.  But, I am wondering if
>> there are practical lower limits for how small these should be set to. Any
>> comments on the questions below (or other insights or rules-of-thumb) would
>> be greatly appreciated. Thanks.
>> Rob
>>
>>    - *Stream endpoint ingress buffer size*: "buff_size" parameter for
>>    endpoint in core yml
>>       - Is there a practical lower limit?  For example, should it be at
>>       least MTU size? Does anything bad happen if I set it as low as 256?
>>       - Are large sizes needed only for SEPs that will accept steaming
>>       from host? For example if a DDC was connected to its own SEP would 
>> there be
>>       any need for a large buff_size on that SEP given that the incoming data
>>       would likely be coming from another FPGA block (i.e., the Radio)?
>>       - Are large sizes needed only for SEPs that require real-time flow
>>       (e.g. paths that terminate at a Radio)? For example, even though a 
>> Replay
>>       block accepts data from the host, it may not need real-time flow if 
>> you are
>>       just pre-storing samples that will later be played out in real-time. 
>> For
>>       this case, is there a practical lower limit for how small we should set
>>       buff_size?
>>       - Does the buffer size affect both directions? In other words,
>>       are 2 buffers created: one for the incoming packets from the crossbar 
>> AND
>>       one for the incoming packets from the static router?
>>    - *RFNoC block payload_fifo_depth*:
>>       - Is there a practical lower limit?
>>       - What is the disadvantage to setting this to one?  My thinking is
>>       that I don't generally insert a buffer between two AXIS components 
>> within
>>       an RFNoC block so why do I want buffering between two AXIS components 
>> that
>>       span between two RFNoC blocks?
>>    - *RFNoC block <context|info>_fifo_depth*:
>>       - Should this be sized based on the expected packet length and the
>>       specified payload_fifo_depth?  For example, if I expect incoming 
>> packets of
>>       1000 samples and set my payload_fifo_depth to 2000 so that I can 
>> buffer 2
>>       packets, should I then set the context or info fifo_depth to be 2?
>>
>> _______________________________________________
>> USRP-users mailing list -- usrp-users@lists.ettus.com
>> To unsubscribe send an email to usrp-users-le...@lists.ettus.com
>>
>
_______________________________________________
USRP-users mailing list -- usrp-users@lists.ettus.com
To unsubscribe send an email to usrp-users-le...@lists.ettus.com

Reply via email to