Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RFNoC4.0 endpoint buffer size #718

Closed
hakegit opened this issue Jan 11, 2024 · 2 comments
Closed

RFNoC4.0 endpoint buffer size #718

hakegit opened this issue Jan 11, 2024 · 2 comments

Comments

@hakegit
Copy link

hakegit commented Jan 11, 2024

Issue Description

Setup Details

Expected Behavior

Actual Behaviour

Steps to reproduce the problem

Additional Information

I have some issues when using RFNoC4.0. When I was using RFNoC3.0, I needed to input a series of modules make by myself when building an image using IMAGE_BUILDER.py. When I am using RFNoC4.0, I need to input the modules in the image_core.yml. The problem is that my own modules need a large amount of BRAM in FPGA. When I am using RFNoC3.0, if I use more than four my own modules, building failure will arise, which is clearly due to insufficient BRAM. But when I use RFNoC4.0, I need to determind the buffer size of ENDPOINT (ep) in image_core.yml for each module when creating an image .And the connection need to be written by myself ,too. So I don't know how the BRAM used by my module corresponds to the cache size specified by me for ep. That is, how do I set the cache size for ep so that when my own module is added between ddc and radio, and between radio and duc. Currently, I am constantly trying to set the cache size of different EPs to different sizes, which may lead to issues with OOOOO or UUUUUU. I hope developers can provide me with a detailed explanation of how to set the cache size when my own module requires a large BRAM (approximately 8000 complex floating numbers). The specific names of my two own modules are sig1 and sig2. Each module requires a cache area of 8192 complex floating-point numbers.
My module connection methods are radio-sig2-ddc-ep and ep-duc-sig2-radio, with two identical links for sending and receiving. I would greatly appreciate it if I could receive guidance.

@hakegit
Copy link
Author

hakegit commented Jan 25, 2024

1

@mbr0wn
Copy link
Contributor

mbr0wn commented Feb 16, 2024

Hey @hakegit, I think you are misunderstanding how the buffering works in RFNoC 4. The individual RFNoC blocks have zero buffering in the NoC shell, only whatever they have internally. All buffering for streaming purposes is in the stream endpoint.

See here for example. The first two stream endpoints have 64kib buffer, and zero buffer, respectively:

stream_endpoints:
ep0: # Stream endpoint name
ctrl: True # Endpoint passes control traffic
data: True # Endpoint passes data traffic
buff_size: 65536 # Ingress buffer size for data
ep1:
ctrl: False
data: True
buff_size: 0

(zero buffer because EP1 is used for RX only)

The blocks have no buffers:

noc_blocks:
duc0: # NoC block name
block_desc: 'duc.yml' # Block device descriptor file
parameters:
NUM_PORTS: 1
ddc0:
block_desc: 'ddc.yml'
parameters:
NUM_PORTS: 2
radio0:
block_desc: 'radio.yml'
parameters:
NUM_PORTS: 2

(Note that the radio block, for example, has an internal buffer for collecting samples to packetize them, but the framework doesn't need to know that).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants