Block Memory Generator v1.1
26 www.xilinx.com DS512 January 18, 2006
Product Specification
Specifying Initial Memory Contents
The Block Memory Generator core supports memory initialization using a memory coefficient (COE)
file, the default data option in the CORE Generator GUI, or a combination of both.
The COE file can specify the initial contents of each memory location, while default data specifies the
contents of all memory locations. When used in tandem, the COE file can specify a portion of the mem-
ory space, while default data fills the rest the remaining memory space. COE files and default data shall
be formatted with respect to the port A write width (or port A read width for ROM’s).
A COE a text file which specifies two parameters:
• memory_initialization_radix: The radix of the values in the memory_initialization_vector. Valid
choices are 2, 10, or 16.
• memory_initialization_vector: Defines the contents of each memory element. Each value is
LSB-justified, separated by a space, and assumed to be in the radix defined by
memory_initialization_radix.
The following is an example COE file. Note that semi-colon is the end of line character.
; Sample initialization file for a
; 32-bit wide by 16 deep RAM
memory_initialization_radix = 16;
memory_initialization_vector =
0 1 2 3 4 5 6 7
8 9 A B C D E F;
Verification
The Block Memory Generator core and the simulation models delivered with it are rigorously verified
using advanced verification techniques, including a constrained-random configuration generator and
a cycle-accurate bus functional model.
Resource Utilization and Performance
The resource utilization and performance of the Block Memory Generator core is highly dependent on
user selections, such as algorithm, optional output registers, and memory size.
Block RAM Usage
When using the fixed primitive algorithm, the number of block RAM primitives used is equal to the
width ratio (rounded up) multiplied by the depth ratio (rounded up), where the width ratio is the
width of the memory divided by the width of the selected primitive, and the depth ratio is the depth of
the memory divided by the depth of the primitive selected.
When using the minimum area algorithm, it is not as easy to determine the exact block RAM count.
This is because the actual algorithm performs complex manipulations to produce an optimal solution.
The optimistic estimate is total memory bits divided by 18k (the total number of bits per primitive)
rounded up. Given that the algorithm packs block RAM’s very efficiently, this estimate is often very
accurate for most memories.
LUT Utilization and Performance
The LUT utilization and performance of the core are directly related to the arrangement of primitives
and the selection of output registers. Particularly, the number of primitives cascaded in depth to imple-