Block RAM Summary

Versal ACAP Memory Resources Architecture Manual (AM007)

Document ID
AM007
Release Date
2020-11-24
Revision
1.1 English

The block RAM in Versal devices stores up to 36 Kbits of data and can be configured as either two independent 18 Kb RAMs, or one 36 Kb RAM. Each block RAM has two write and two read ports. A 36 Kb block RAM can be configured with independent port widths for each of those ports as 4K x 9, 2K x 18, or 1K x 36 (when used as true dual-port (TDP) memory). If only one write and one read port are used, a 36 Kb block RAM can additionally be configured with a port width of 512 x 72 bits (when used as simple dual-port (SDP) memory). An 18 Kb block RAM can be configured with independent port widths for each of those ports as 2K x 9 or 1K x 18 (when used as TDP memory). If only one write and one read port are used, an 18 Kb block RAM can additionally be configured with a port width of 512 x 36 bits (when used as SDP memory).

Identical to the UltraScale series FPGA block RAMs, write and read are synchronous operations. The two ports are symmetrical and totally independent, sharing only the stored data. Each port can be configured in one of the available widths, independent of the other port. In addition, the read port width can be different from the write port width for each port. The memory content can be initialized or cleared by the configuration bitstream. During a write operation, the memory can be set to have the data output remain unchanged, reflect the new data being written or the previous data now being overwritten.

The block RAM features include:

  • Per-block memory storage capability where each block RAM can store up to 36 Kbits of data.
  • Support of two independent 18 Kb blocks, or a single 36 Kb block RAM.
  • Each 36 Kb block RAM can be used with a single read and write port (SDP), doubling data width of the block RAM to 72 bits. The 18 Kb block RAM can also be used with a single read and write port, doubling data width to 36 bits.
  • When used as RAMB36 SDP memory, one port width is fixed (i.e., 512 x 64 or 512 x 72). The other port width can then be 4K x 9 through 512 x 72. When used as RAMB18 SDP memory, one port width is fixed (i.e., 512 x 36). The other port width can then be 2K x 9 through 512 x 36.
  • The data outputs of the lower to upper adjacent block RAMs can be cascaded to build large block RAM blocks. Optional pipeline registers are available to support maximum performance.
  • One 64-bit error correction coding (ECC) block is provided per 36 Kb block RAM. Independent encode/decode functionality is available. ECC mode has the capability of injecting errors.
  • Synchronous or asynchronous set/resets of the outputs to an initial value is available for both the latch and register modes of the block RAM output.
  • Separate synchronous or asynchronous set/reset pins independently control the set/reset of the optional output registers and output latch stages in the block RAM.
  • 18, 36, or 72-bit wide block RAM ports can have an individual write enable per byte. There is also an additional byte write enable for the parity bits. This feature is popular for interfacing to a microprocessor.
  • All inputs are registered with the port clock and have a setup-to-clock timing specification.
  • All outputs have a read function or a read-during-write function, depending on the state of the write enable (WE) pin. The outputs are available after the clock-to-out timing interval. The read-during-write outputs have one of three operating modes: WRITE_FIRST, READ_FIRST, and NO_CHANGE.
  • A write operation requires one clock edge.
  • A read operation requires one clock edge.
  • All output ports are latched or registered (optional). The state of the output port does not change until the port executes another read or write operation. The default block RAM output is register mode.