Parameterizable macros (XPM) are the preferred method for building memory arrays in RTL because of the flexibility and control afforded to the designer. By using an XPM macro, the designer can specify the required characteristics of the memory, including width, depth, clocking, number of ports, array type (LUTRAM, block RAM, or UltraRAM), for each array. Because the XPM is part of the RTL, there is no need to recompile a large list of memory IP because the XPMs are compiled as part of the top-level synthesis of the design.
The two XPM types supported are XPM_MEMORY for memory arrays and XPM_FIFO for FIFO arrays. Examples of using each are provided in the XPM section of the language templates in the Vivado tools.
| Description | Altera Parameterizable Macro | AMD Parameterizable Macro Choices |
|---|---|---|
| Simple dual-port memory | simple_dual_port_ram | xpm_memory_sdpram |
| True dual-port memory | true_dual_port_ram | xpm_memory_tdpram |
| Synchronous FIFO | sync_fifo | xpm_fifo_sync |
| Asynchronous FIFO | async_fifo | xpm_fifo_async |
| Single-port memory | N/A | xpm_memory_spram |
| Dual-port LUTRAM | N/A | xpm_memory_dpdistram |