Cache misses can be costly in terms of processor wait states if main memory must be updated before the line is filled. A more efficient algorithm would be to store the miss address and date, then fill and update the memory later.
In this circuit, every memory access is checked by the cache controller to see if the data for the memory address is available in the cache (Fig. 1). If the least-significant bits of the address match the tag field from the cache, the memory request is filled by the cache in a single cycle and the controller takes no action. If there's no match (i.e., a cache miss), the controller asserts a signal to a memory controller to request a memory-access cycle. The cache must be updated in one of two ways, as determined by the update flag field in the cache data (Fig. 2). The bit is automatically set for a cache location when the data in the location is changed (written to) by the processor.
If the bit hasn't been set, the location may be overwritten by the lower bits of the address and the data from the main memory. The new entry is made in parallel by fulfilling the original memory request. If the bit is set, both the old address and data are retained in registers so the memory request may be filled without delay. The cache controller then requests a memory cycle to update the main memory with the contents for the stored address.
The register used to store the cache-miss addresses may also be used to trap any processor address for examination in case of a parity or bus error. As shown in Figure 1a, the trapped address can be read by simply multiplexing the register on to the system data bus.