1

I'm confused about Virtex-6 BlockRAM.

I want to implement a BRAM with 15 bit address (32,768 words) and 12 bit write and read data per word. 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?!

What is the data width and capacity of each BlockRAM in a Virtex-6?

Paebbels
  • 15,573
  • 13
  • 70
  • 139
Mohammad
  • 69
  • 10
  • May be easier to think that you have a RAM that stores 32,768x12 = 393,216 bits = 384 kB and each RAMB can store up to 36 kB (Paebbels reply details the size and ratios). This means you need 384/36 = 10.667 RAMBs, for which the tool has adjusted to 12 RAMBs. As a rule of thumb, if this calculation fails (which is not your case), you may need to explicitly write your code to adapt to the RAMB format. – suoto Feb 29 '16 at 12:41

1 Answers1

4

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.

Martin Zabel
  • 3,589
  • 3
  • 19
  • 34
Paebbels
  • 15,573
  • 13
  • 70
  • 139