Most FPGA boards have three types of memory. First is the LUT memory, which is built into the FPGA logic. LUT memory is useful for small-size memory. Second, FPGAs have memory blocks that can be organized into various sizes or word lengths. These embedded memory blocks are a useful part of FPGA for implementing medium-sized storage. And third, most FPGA boards have external memory, often DDR memory.
The psC language supports arrays, as in C++. Since psC is parallel, simultaneous read and write at two addresses is possible. Here is an example showing declaration and usage of psC arrays.
Novakod supports external memory, which is implemented as an external component. It is accessed using simple IO ports: Command, Address, Data_w and Data_r. Here is an example where a psC program accesses two memory banks.
Using the Novakod API, a C+++ application can directly read or write to the memory banks. This is supported in simulation and on real FPGA boards supporting the API, like the Opal Kelly XEM6002. Here is a diagram showing how a C++ application connects to a FPGA board.
Novakod supports block-based memories as external component. For example, the memory blocks in the DE1SoC Board from Terasic are organized into six dual port memory banks:
These are accessed like external memory.