All memory writes take place using the write buffer. To ensure that the write buffer is not drained on reads, the following features are implemented:
The write buffer is a FIFO of outstanding writes to memory. It consists of a set of addresses and a set of data words (together with their size information).
If a sequence of data words is contained in the write buffer, these are denoted as applying to the same address by the write buffer storing the size of the store multiple. This reduces the number of address entries that have to be stored in the write buffer.
In addition to this, a separate FIFO of write-back addresses and data words is implemented. Having a separate structure avoids complications associated with performing an external write while the write-though is being handled.
The address of a new read access is compared against the addresses in the write buffer. If a read is to a location that is already in the write buffer, the read is blocked until the write buffer has drained sufficiently far for that location to be no longer in the write buffer. The sequential marker only applies to words in the same 8 word (8 word aligned) block, and the address comparisons are based on 8 word aligned addresses.
The ordering of memory accesses is described in Memory access control.