FIFOs may be implemented in shared memory using linked lists and
interleaved linked lists such that any individual FIFO can dynamically
use any free memory location. The system may be implemented in hardware
efficiently and does not pre-allocate memory to any FIFO, so that the
whole shared memory may be used by any one of the FIFOs. The maximum
physical size of a FIFO is then limited only by the size of the physical
memory and not by the number of FIFOs sharing the same physical memory or
by any mechanism for pre-allocating physical memory to the FIFOs. The
linked lists contain data words, each data word containing a data field
and a reference to a subsequent free memory location. A subsequent data
word may be enqueued to the FIFO at the last referenced free memory
location. A dequeue operation returns free memory locations to the free
memory pool. Multiple linked lists may be interleaved to accelerate
reading of data words from the FIFO.