Following are the block RAM primitives in Versal ACAP.
|Primitives||Supported Aspect Ratios||Supported Mode|
|x72 mode when running in simple dual-port (SDP) mode|
|x36 mode when running in SDP mode|
In SDP mode, one address reads the RAM and the other address writes to the RAM. You can use different clocks for the read and the write, but the address lines must be separate. The following figures show examples.
Following are the types of resets on the block RAM:
- Synchronous reset on the block RAM output, which uses the RESETRAMA or RESETRAMB pin
- Asynchronous reset on the block RAM output, which uses the
ARST_A or ARST_B pinNote: If the ARST_A or ARST_B pin is used, the RESETRAMA, RESETRAMB, RSTREGA, and RSTREGB pins are ignored.
- Synchronous reset that controls the optional output registers of the block RAM, which uses the RSTREGA or RSTREGB pin
When using asynchronous resets:
- Both the RAM and optional output register must use the same
asynchronous reset.Note: If the optional output register does not use the same reset, it is not inferred into the block RAM.
- The output enables and SRVAL properties are ignored.
- The asynchronous reset can only reset to a 0 value.
The Versal ACAP block RAMs support the same write modes as UltraScale™ devices and use the same RTL coding styles:
- WRITE_FIRST outputs the newly written data onto the output bus.
- READ_FIRST outputs the previously stored data onto the output bus.
- NO_CHANGE maintains the previous value of the output bus.
Byte Write Enables
The control ports for byte write enables are the WEA and WEB pins, which vary based on usage:
- In non-SDP mode, the WEA and WEB [3:0] pins control 4 bytes of either size 8 or 9.
- In SDP mode, the WEA and WEB [7:0] pins control 8 bytes of size 8 or 9.
- In non-SDP mode, the WEA and WEB [1:0] pins control 2 bytes of size 8 or 9.
- In SDP mode, pins WEA and WEB [3:0] pins control 4 bytes of 8 or 9.
Currently, Vivado synthesis only infers byte write RAM if sizes of 8 or 9 are used. In addition, Vivado synthesis only infers byte write enable RAM if the enables use one-hot state encoding. For example, in a byte write enabled RAM that is configured as true dual port with a data width of 36, there are 4 different bytes, but only 1 byte can be written to at a time. To infer the block RAM, make sure the RTL adheres to these restrictions.
For asymmetric block RAMs in Versal ACAPs, use the same coding styles and rules that you use for asymmetric block RAMs in UltraScale devices. For information on setting up asymmetric block RAMs, see the Vivado Design Suite User Guide: Synthesis (UG901).
Block RAMs can also be inferred using XPMs. The advantage of using this approach is that XPMs always have the correct coding style for any type of RAM needed. For more information on XPMs, see the Vivado Design Suite User Guide: System-Level Design Entry (UG895).