Description
The design requires more Block-RAM resources than are available. The total number of BlockRAM elements required by all kernels is more than the number available on the device.
Explanation
Arrays in the source code are automatically mapped to Block-RAM. Block-RAM is an internal memory resource that can be configured in a variety of sizes.
Almost every design built within an FPGA requires the use of some Block-RAM for storage of coefficients, buffering of data, and a variety of other uses. Designers typically use the pragma HLS array_map (with the same instance=target) to combine multiple smaller arrays into a single larger array. This larger array can then be targeted to a single larger memory (RAM or FIFO) resource. Use of the pragma HLS array_partition can result in RTL with multiple registers instead of one large memory. Finally, use of the pragma HLS array_reshape can reduce the number of BlockRAM consumed while providing parallel access to the data. These can reduce the resources required for all kernels.
Recommendation
There are a few ways to reduce the number of block-RAMs:
- RESOURCE directive
- ARRAY_PARTITION directive
- ARRAY_MAP directive