Block RAM Resources
Introduction to the UltraScale Architecture
Block RAM Summary
Differences from Previous Generations
Changes from 7 Series FPGAs
Block RAM Introduction
Synchronous Dual-Port and Single-Port RAMs
Data Flow
Read Operation
Write Operation
Write Modes
WRITE_FIRST or Transparent Mode (Default)
READ_FIRST or Read-Before-Write Mode
NO_CHANGE Mode
Address Collision
Additional Block RAM Features
Optional Output Registers
Independent Read and Write Port Width Selection
Simple Dual-Port Block RAM
Cascadable Block RAM
Standard Data Output Cascade Mode
Data Out Cascade in Pipeline Mode
Data in Cascade for a Block RAM Array Matrix (Systolic) Mode
Address Enable
Byte-Wide Write Enable
Block RAM Error Correction Code
Power Gating of Unused Block RAMs
Block RAM Library Primitives
Block RAM Port Signals
Clock – CLKARDCLK and CLKBWRCLK
Enable – ENARDEN and ENBWREN
Byte-Wide Write Enable – WEA and WEBWE
Register Enable – REGCEAREGCE and REGCEB
Set/Reset
RSTREGARSTREG, RSTREGB, RSTRAMARSTRAM, and RSTRAMB
Address Bus – ADDRARDADDR and ADDRBWRADDR
Data-In Buses – DINADIN, DINPADINP, DINBDIN, and DINPBDINP
Data-Out Buses – DOUTADOUT, DOUTPADOUTP, DOUTBDOUT, and DOUTPBDOUTP
ADDRENA
ADDRENB
CASDINA
CASDINB
CASDINPA
CASDINPB
CASDOUTA
CASDOUTB
CASDOUTPA
CASDOUTPB
Cascade Selection – CASDIMUX
Cascade Selection – CASOREGIMUX
Cascade Selection – CASOREGIMUXEN
Cascade Selection – CASDOMUX
Cascade Selection – CASDOMUXEN
SLEEP
Inverting Control Pins
RAMB18/36 Unused Inputs
Block RAM Address Mapping
Block RAM Attributes
Data Cascading – CASCADE_ORDER
Clocking – CLOCK_DOMAINS
Enable Address Latching – ENADDREN
Content Initialization – INIT_xx
Content Initialization – INITP_xx
Output Latches Initialization – INIT (INIT_A or INIT_B)
Power Saving – RDADDRCHANGE[A|B]
Read Width – READ_WIDTH_[A|B]
Reset or CE Priority – RSTREG_PRIORITY_[A|B]
Power Saving – SLEEP_ASYNC
Output Latches/Registers Synchronous Set/Reset (SRVAL_[A|B])
Optional Output Register On/Off Switch – DOUT[A|B]_REG
Write Width – WRITE_WIDTH_[A|B]
Write Mode – WRITE_MODE_[A|B]
SIM_COLLISION_CHECK
INIT_FILE
Block RAM and FIFO Placement
Block RAM Initialization in VHDL or Verilog Code
Additional RAMB18E2 and RAMB36E2 Primitive Design Considerations
Optional Output Registers
Independent Read and Write Port Width
RAMB18E2 and RAMB36E2 Port Mapping Design Rules
Byte-Wide Write Enable
Block RAM Applications
Block RAM RSTREG in Register Mode
Built-in FIFO
Overview
Independent-Clock/Dual-Clock FIFO
Common-Clock/Single-Clock FIFO
FIFO Architecture: Top-Level View
FIFO Port Width and Depth
FIFO Primitives
FIFO Port Descriptions and Attributes
FIFO 18/36 Unused Inputs
FIFO Attribute Descriptions
PROG_EMPTY_THRESH
PROG_FULL_THRESH
WRITE_WIDTH
READ_WIDTH
REGISTER_MODE
CLOCK_DOMAINS
FIRST_WORD_FALL_THROUGH
INIT and SRVAL
WRCOUNT_TYPE
RDCOUNT_TYPE
RSTREG_PRIORITY
CASCADE_ORDER
FIFO Operations
Reset
Operating Mode
Standard Mode
FWFT Mode
Flags
Empty Flag
PROGEMPTY Flag
Read Error Flag
Full Flag
Write Error Flag
PROGFULL Flag
Flag Assertion/Deassertion and Flag Latencies
Cascading FIFOs Serially and in Parallel to Extend Depth
Cascading Serially
Cascading in Parallel
Built-in Error Correction
Overview
ECC Modes
Top-Level View of the Block RAM ECC Architecture
Block RAM and FIFO ECC Primitive
Block RAM and FIFO ECC Port Descriptions
Block RAM and FIFO ECC Attributes
ECC Modes of Operation
Standard ECC
Set by Attributes
ECC Encode Only
Set by Attributes
ECC Encode-Only Read
ECC Decode Only
Set by Attributes
Creating Eight Parity Bits for a 64-bit Word
Block RAM ECC VHDL and Verilog Templates
UltraRAM Resources
UltraRAM Summary
UltraRAM Key Features
UltraRAM Cascade
UltraRAM Error Correction Coding
Block RAM and UltraRAM Differences
Block RAM and UltraRAM Comparison
UltraRAM Primitives
UltraRAM Port Names and Description
No Cascade Ports
Cascade Ports
UltraRAM Port Signals
Clock – CLK
Power Gating Enable Input – SLEEP
Address Bus – ADDR_A, ADDR_B
Enable – EN_A and EN_B
Read/Write Select – RDB_WR_A and RDB_WR_B
Byte-Wide Write Enable – BWE_A, BWE_B
Data-In Buses – DIN_A, DIN_B
Inject Single and Double Bit Error Inputs – INJECT_SBITERR_A, INJECT_DBITERR_A, INJECT_SBITERR_B, INJECT_DBITERR_B
Register Enable for OREG Pipeline Stage – OREG_CE_A, OREG_CE_B
Register Enable for OREG_ECC Pipeline Stage – OREG_ECC_CE_A, OREG_ECC_CE_B
Reset – RST_A, RST_B
Data-Out Buses – DOUT_A, DOUT_B
Read Status Output – RDACCESS_A, RDACCESS_B
ECC Error Bit Output – SBITERR_A, DBITERR_A, SBITERR_B, DBITERR_B
Invertible Control Signal Pins
UltraRAM Attributes
Auto Sleep Latency – AUTO_SLEEP_LATENCY
Byte Write Enable Mode – BWE_MODE_[A|B]
Cascade Chain Order – CASCADE_ORDER_[A|B]
AVG_CONS_INACTIVE_CYCLES, MATRIX_ID, NUM_URAM_IN_MATRIX, and NUM_UNIQUE_SELF_ADDR_A|B Attributes
Set Enable Auto Sleep Mode – EN_AUTO_SLEEP_MODE
Enable ECC Write – EN_ECC_WR_[A/B]
Enable ECC Read – EN_ECC_RD_[A/B]
Optional Input Register Stage – IREG_PRE_[A|B]
Optional Output Register Stage – OREG_[A|B]
Optional ECC Output Register Stage – OREG_ECC_[A|B]
Optional Cascade Register Stage – REG_CAS_[A|B]
Reset Mode – RST_MODE_[A|B]
Self Address – SELF_ADDR_[A|B]
Self Mask Value – SELF_MASK_[A|B]
External CE Usage – USE_EXT_CE_[A|B]
Dual Port SRAM Array Operations
Read Operation
Write Operation
Optional Input Registers
Optional Output Registers
RESET operation
Byte Write Enable Function
Cascading UltraRAM and Matrix Configurations
Cascade User Attributes
Building a Matrix From Cascaded UltraRAMs
Address Bit Decoding
Built-in Error Detection and Correction
ECC Modes
ECC Modes of Operation
Standard ECC
Set by Attributes
Standard ECC Write
Standard ECC Read
ECC Encode Only
Set by Attributes
ECC Encode-Only Write
ECC Encode-Only Read
ECC Decode Only
Set by Attributes
Using ECC Decode Only to Inject Single-Bit Error
Using the ECC Decode-Only to Inject Double-Bit Error
UltraRAM Timing Diagrams
Read/Write Waveforms With and Without Optional Pipeline Registers
Read/Write Waveforms With Reset — With and Without Optional Output Pipeline Registers
Read/Write Waveforms With External CE
Read From Matrix Waveforms With Reset
Sleep Waveforms
Auto Sleep Waveforms
Additional Resources and Legal Notices
Finding Additional Documentation
Support Resources
References
Revision History
Please Read: Important Legal Notices
When used as SDP memory, all write
modes are supported (READ_FIRST, WRITE_FIRST, NO_CHANGE).
UltraScale architecture-based devices
have a new data cascading scheme. Large block RAMs can now be built in a bottom-up fashion
directly in the block RAM column without additional use of logic resources.
An address enable feature has been
added to the block RAM. If disabled, the new address is not latched
in the block.
A dynamic power gating capability
has been added. The block RAM can be put into sleep mode while
preserving the data content.
The RAM_MODE attribute has been removed. The AMD Vivado™
tools automatically determine if a block RAM is used in TDP or SDP
mode.
The built-in FIFOs and IP FIFOs
have been harmonized as much as possible. This makes it easier to
switch between soft and hard FIFO implementations.
FIFOs allow cascading of multiple
FIFO36s and FIFO18s for building deeper FIFOs in hardware.
A synchronous FIFO reset replacing
the asynchronous reset in previous generations has been added.
FIFO latencies of the deassertion
of the EMPTY/PROGEMPTY flag for a write operation and the
FULL/PROGFULL flag for a read operation have changed.
The behavior of WRERR and RDERR
during reset has changed.
FIFO asymmetric ports are now
supported. The write port and read port can each be configured
independently as x4, x9, x18, x36, or x72 for the FIFO36E2, and x4,
x9, x18, or x36 for the FIFO18E2.
The combination of output
operating modes (standard and first-word-fall-through) and output
register stages configurations has changed.
WRCOUNT and RDCOUNT now support
additional user-selectable functionality.
The block RAM ECC has additional pipeline registers for
improved FMAX .
Hardware FIFOs are not backward compatible with 7 series FIFOs.