Efficient transfer of data to and from random access memory is described.
Multiple request sources and a memory system comprise memory modules
having memory banks, each bank containing rows of data. The retrieval
comprises transferring all data pursuant to a given request by one source
before any data is transferred pursuant to a subsequent request from said
second source. This retrieval is achieved using a memory arbiter that
implements an algorithm for atomic read/write. Each bank is assigned a
FIFO buffer by the arbiter to store access requests. The access requests
are arbitrated, and an encoded value of a winner of arbitration is loaded
into the relevant FIFO buffer(s) before choosing the next winner. When an
encoded value reaches the head of the buffer, all associated data is
accessed in the given bank before accessing data for another request
source.