The value of the NITER register determines the number BLOCK_SIZE chunks of input data to send of the AI Engine. Because BRAM resources are finite, it is not possible to store a large amount of unique input data. A design choice has been made to store four BLOCK_SIZE chunks of unique data in the PL masters.
When NITER <=4, send up to four unique BLOCK_SIZE chunks of data to the AI Engine.
When NITER > 4, the BRAMs send the four unique BLOCK_SIZE chunks of data, then the BRAM addresses roll over to address 0, and they repeat the process of sending data.
The NITER register allows continuous input data to the AI Engine graph for any NITER number of data chunks without using a high number of BRAMs.
The ROLLOVER_ADDR register is the address that tells the BRAMs when to restart (or roll over) to address 0. The ROLLOVER_ADDR is calculated as the BLOCK_SIZE * 4. Four is the number of unique BLOCK_SIZE chunks of input data the PL masters store.
For example, set NITER to 4 to test the AI Engine graph on a variety of data inputs. This configures the PL kernels to send four <BLOCK_SIZE> chunks of unique input data to the AI Engine. To test performance, you can then set NITER to 100, which sends the same four chunks of input data to the AI Engine 25 times (for a total of 25*4 = 100 iterations). You can then average the throughput across the iterations to give a valid performance measurement. The following is a table of the rollover addresses:
PL Kernels |
BLOCK_SIZE |
ROLLOVER_ADDR |
|---|---|---|
dlbf_data ulbf_data |
384 |
1536 |
dlbf_coeffs ulbf_coeffs |
256 |
1024 |