Creating Heterogeneous Memory Systems in Intel® FPGA SDK for OpenCL Custom Platforms

ID 683654
Date 12/13/2016
Public

1.3. Setting Up Multiple Memory Dividers in Qsys

Currently, the OpenCL™ Memory Bank Divider in the the Qsys design does not support non-power-of-2 number of memory banks, which is not a limitation for typical configurations. However, there are scenarios where non-power-of-2 number of memory interfaces are necessary.
To accommodate non-power-of-2 number of memory interfaces, use multiple OpenCL Memory Bank Dividers to create heterogeneous memory systems with non-power-of-2 number of memory banks.

You must create multiple OpenCL Memory Bank Dividers when you have a true heterogeneous memory system. Consider a system with one DDR memory interface and one QDR memory interface. Because the two banks have different memory topologies, you cannot combine them under a single global memory.

Figure 1. Block Diagram of a Three-Bank Heterogeneous Memory SystemThis heterogeneous memory system contains two DDR memory interfaces and one QDR memory interface.
If you are using version 16.0, 16.0.1, or 16.0.2 of the Intel® Quartus® Prime software and the Altera SDK for OpenCL, the OpenCL Memory Bank Divider incorrectly handles memory bursts across address boundaries. To work around this known issue, add a pipeline bridge with a burst size of 1 and connect its Avalon® Memory-Mapped (Avalon®-MM) master to the OpenCL Memory Bank Divider's slave port.
Note: This known issue is fixed in the Intel® Quartus® Prime software and the Intel® FPGA SDK for OpenCL™ version 16.1.
Figure 2. Block Diagram of a Three-Bank Heterogeneous Memory System with a Pipeline Bridge