Each embedded BlockRAM (RAMB36E1
) has 36 KiBit. It can also be split into two 18 KiBit primitives (RAMB18E1
).
The internal organisation is 1024 × (32+4). 1024 rows with 4 bytes + 4 parity bits.
The BlockRAM macro has a variable layout from 32.768 × 1 up to 512 × 72, which is also depending on the mode: single port, simple dual port or true dual port.
Here is the full list of address to data width ratios:
- 64 Ki x 1, (cascaded adjacent BlockRAMs)
- 32 Ki x 1,
- 16 Ki x 2,
- 8 Ki x 4,
- 4 Ki x 8,
- 4 Ki x 9,
- 2 Ki x 16,
- 2 Ki x 18,
- 1 Ki x 32
- 1 Ki x 36 or
- 512 x 64 (simple dual-port mode) and
- 512 x 72 (simple dual-port mode)
See:
for more details.
When I explore the implemented design, I founded that 12 BlockRAM are used for this. Does this mean each BRAM in a Virtex-6 has 1 bit data?!
The used area (memory size) is equal to other organizations, but using 12 × (32.768 × 1) doesn't require multiplexers to combine the 12 BlockRAMs. This saves resources and is faster.