SRAM and FIFO Memories in Actel’s Low-Power Flash Devices
v1.1
6 - 5
SRAM and FIFO Architecture
To meet the needs of high-performance designs, the memory blocks operate strictly in synchronous
mode for both read and write operations. The read and write clocks are completely independent,
and each can operate at any desired frequency up to 250 MHz.
4k×1, 2k×2, 1k×4, 512×9 (dual-port RAM—2 read / 2 write or 1 read / 1 write)
512×9, 256×18 (2-port RAM—1 read / 1 write)
Sync write, sync pipelined / nonpipelined read
Automotive ProASIC3 devices support single-port SRAM capabilities or dual-port SRAM only under
specific conditions. Dual-port mode is supported if the clocks to the two SRAM ports are the same
and 180° out of phase (i.e., the port A clock is the inverse of the port B clock). The Actel Libero
Integrated Design Environment (IDE) software macro libraries support a dual-port macro only. For
use of this macro as a single-port SRAM, the inputs and clock of one port should be tied off
(grounded) to prevent errors during design compile. For use in dual-port mode, the same clock
with an inversion between the two clock pins of the macro should be used in the design to prevent
errors during compile.
The IGLOOe and ProASIC3E memory block includes dedicated FIFO control logic to generate
internal addresses and external flag logic (FULL, EMPTY, AFULL, AEMPTY).
Simultaneous dual-port read/write and write/write operations at the same address are allowed
when certain timing requirements are met.
During RAM operation, addresses are sourced by the user logic, and the FIFO controller is ignored.
In FIFO mode, the internal addresses are generated by the FIFO controller and routed to the RAM
array by internal MUXes.
The low-power flash device architecture enables the read and write sizes of RAMs to be organized
independently, allowing for bus conversion. For example, the write size can be set to 256×18 and
the read size to 512×9.
Both the write width and read width for the RAM blocks can be specified independently with the
WW (write width) and RW (read width) pins. The different D×W configurations are 256×18, 512×9,
1k×4, 2k×2, and 4k×1. When widths of one, two, or four are selected, the ninth bit is unused. For
example, when writing nine-bit values and reading four-bit values, only the first four bits and the
second four bits of each nine-bit value are addressable for read operations. The ninth bit is not
accessible.
Conversely, when writing four-bit values and reading nine-bit values, the ninth bit of a read
operation will be undefined. The RAM blocks employ little-endian byte order for read and write
operations.
Memory Blocks and Macros
Memory blocks can be configured with many different aspect ratios, but are generically supported
in the macro libraries as one of two memory elements: RAM4K9 or RAM512X18. The RAM4K9 is
configured as a true dual-port memory block, and the RAM512X18 is configured as a two-port
memory block. Dual-port memory allows the RAM to both read from and write to either port
independently. Two-port memory allows the RAM to read from one port and write to the other
using a common clock or independent read and write clocks. If needed, the RAM4K9 blocks can be
configured as two-port memory blocks. The memory block can be configured as a FIFO by
combining the basic memory block with dedicated FIFO controller logic. The FIFO macro is named
Clocks for the RAM blocks can be driven by the VersaNet (global resources) or by regular nets.
When using local clock segments, the clock segment region that encompasses the RAM blocks can
drive the RAMs. In the dual-port configuration (RAM4K9), each memory block port can be driven
by either rising-edge or falling-edge clocks. Each port can be driven by clocks with different edges.
Though only a rising-edge clock can drive the physical block itself, the Actel Designer software will
automatically bubble-push the inversion to properly implement the falling-edge trigger for the
RAM block.