Efficient Multi-Ported Memories for FPGAs
Better ways to build concurrent-access memories on FPGAs
As FPGAs continue to increase in transistor density, designers are using
them to build larger and more complex systems-on-chip that require frequent
sharing, communication, queueing, and synchronization among distributed
functional units and compute nodes. These functions boil down to FIFOs and
register files, which can both be implemented using multi-ported memories.
In this work we propose various designs for true multi-ported memories that
capitalizes on FPGA block RAMs while providing:
- substantially better area scaling than a pure logic-based approach
- higher operating frequencies than the multipumping approach
- true random access from all ports without contention
We have (so far) explored two major approaches which each use hardware
resources differently, but provide identical functionality:
- A form of indirection through a structure called the Live Value
Table (LVT), which is itself a small multi-ported memory implemented in
reconfigurable logic. Essentially, the LVT coordinates multiple banks of memory
into a true multi-ported memory by directing reads to appropriate banks based
on which bank holds the most recent or ''live'' write value. The LVT is much
narrower than the actual memory banks since it only holds bank numbers rather
than full data values, leaving bulk data storage to the Block RAMs.
- A form of data distribution and reconstruction we call XOR-mixing
similar to that used in RAID disk arrays. Briefly, we make use of the
A XOR B XOR B = A property to spread
writes to all memory banks, and use a simple XOR of the output of
all banks to reconstruct the original data during reads. XOR-mixing uses more
Block RAMs, but less reconfigurable logic, than LVTs for a given memory
depth.
People
Publications
Links
Download
Home
Last Updated March 02, 2012