A
memory item is a data storage container of a specified size, used to store and reference data samples on an FPGA.
Unlike reading from a FIFO or register, you can read data from any location within a memory item, called an address, without
respect to the order in which the data was written. You can create memory items in a resource collection or from within a
document targeted to an FPGA.
You can read and write data to memory items on the FPGA at run time. You can also
pre-initialize data which stores data in memory items, as ROM or RAM, prior to run time. You must always pre-initialize ROM. Pre-initialized
data can save logic resources and computation time.
You can implement memory items using look-up tables, block RAM, or dynamic RAM. The best memory item implementation for your
system depends on the needs of your particular application.
Memory Item Implementation
|
Advantages
|
Recommendations
|
Look-up tables (LUTs)
|
-
Allow access to a memory item within a Clock-Driven Loop
-
Provide an alternative implementation of memory when you have limited block RAM remaining
|
Implement memory in LUTs when you need to read data from a memory item during the same cycle as the one in which you invoke
the memory item. Implementing memory in LUTs consumes logic resources and reduces the number of logic resources available
for data processing.
|
Block RAM (BRAM)
|
-
Compiles at a high clock rate relative to other types of memory items
-
Does not consume FPGA logic resources
|
Implement memory items in BRAM to write data in one clock domain and read the data from the same clock domain. Use memory
items implemented in BRAM to conserve LUTs on your FPGA.
|
Dynamic RAM (DRAM)
|
-
Provides a larger storage capacity than memory items implemented in LUTs or BRAM
-
Does not consume FPGA logic resources
|
Implement memory items in DRAM when you need to store large sets of data that are not immediately required by other parts
of your system. DRAM is ideal for storing large data sets in embedded applications.
|