If the breakdown of the memory usage of your design is known, the XPE spreadsheet allows you to specify which block RAM modes are being used. The Mode column has selectable values from a drop-down menu that lists the different primitive names and modes of the block RAM. Depending on the target family, this includes:
- BRAM
- Simple dual-port or True dual-port Block RAM.
- FIFO
- Dedicated built-in FIFO.
- CASC (pair) (7 series only)
- Cascaded block RAM blocks (built from two RAM blocks).
- ECC
- When the block RAM is configured in ECC mode.
In True dual-port mode the following data write mode options are available:
- WRITE_FIRST
- The port will first write to the location and then read out the newly written data.
- READ_FIRST
- The old data is first read out and then the new data is written in. This mode effectively allows 4 operations per clock cycle (saving power or resource utilization), because the old data can be read out and replaced with new data on the same clock cycle of each port. However, note that READ_FIRST is only more power efficient if the data in the memory is used the same time as writing out new data, and does not force separate read and write operations to get the data. If that is not the case, READ_FIRST is generally less efficient in power than NO_CHANGE in TDP mode. If the functionality of READ_FIRST is not needed, the block RAM should be configured as WRITE_FIRST or NO_CHANGE to save power.
- NO_CHANGE
- When a Write happens the block RAM outputs remain unchanged.
In Simple dual-port mode the following data write mode options are available:
- WRITE_FIRST
- The port will first write to the location and then read out the newly written data.
- READ_FIRST
- The old data is first read out and then the new data is written in. This mode effectively allows 2 operations per clock cycle (saving power or resource utilization), because the old data can be read out and replaced with new data on the same clock cycle of each port. However, note that READ_FIRST is only more power efficient if the data in the memory is used the same time as writing out new data, and does not force separate read and write operations to get the data. If that is not the case, READ_FIRST is generally less efficient in power than WRITE_FIRST in SDP mode. If the functionality of READ_FIRST is not needed, the block RAM should be configured as WRITE_FIRST to save power.
- NO_CHANGE
- Not available in the SDP mode because it is identical in behavior to WRITE_FIRST mode.