The caching policy used by the MicroBlaze data cache,
write-back or write-through, is determined by the parameter
C_DCACHE_USE_WRITEBACK
. When this parameter is set, a write-back
protocol is implemented; otherwise write-through is implemented.
However, when configured with an MMU (C_USE_MMU
> 1,
C_AREA_OPTIMIZED
= 0 (Performance) or 2 (Frequency),
C_DCACHE_USE_WRITEBACK
= 1), the caching policy in virtual mode is
determined by the W storage attribute in the TLB entry, whereas write-back is used in
real mode.
With the write-back protocol, a store to an address within the cacheable range
always updates the cached data. If the target address word is not in the cache (that is,
the access is a cache miss), and the location in the cache contains data that has not
yet been written to memory (the cache location is dirty), the old data is written over
the data AXI4 interface (M_AXI_DC
) to external
memory before updating the cache with the new data. If only a single word needs to be
written, a single word write is used, otherwise a burst write is used. For byte or
halfword stores, in case of a cache miss, the address is first requested over the data
AXI4 interface, while a word store only updates the cache.
With the write-through protocol, a store to an address within the cacheable range generates an equivalent byte, halfword, or word write over the data AXI4 interface to external memory. The write also updates the cached data if the target address word is in the cache (that is, the write is a cache hit). A write cache-miss does not load the associated cache line into the cache.
Provided that the cache is enabled a load from an address within the cacheable range triggers a check to determine if the requested data is currently cached. If it is (that is, on a cache hit) the requested data is retrieved from the cache. If not (that is, on a cache miss) the address is requested over the data AXI4 interface using a burst read, and the processor pipeline stalls until the cache line associated to the requested address is returned from the external memory controller.
The parameter C_DCACHE_DATA_WIDTH
determines the bus data width, either 32 bits, an entire cache line (128, 256, or 512
bits), or 512 bits.
When C_FAULT_TOLERANT
is set to 1 and write-through protocol
is used, a cache miss also occurs if a parity error is detected in the tag or data block
RAM.
The following table summarizes all types of accesses issued by the data cache AXI4 interface.
Policy | State | Direction | Access Type |
---|---|---|---|
Write-through | Cache Enabled | Read | Burst for 32-bit interface non-exclusive access and exclusive access with ACE enabled, single access otherwise |
Write | Single access | ||
Cache Disabled | Read | Burst for 32-bit interface exclusive access with ACE enabled, single access otherwise | |
Write | Single access | ||
Write-back | Cache Enabled | Read | Burst for 32-bit interface, single access otherwise |
Write | Burst for 32-bit interface cache lines with more than one valid word, a single access otherwise | ||
Cache Disabled | Read | Burst for 32-bit interface non-exclusive access, discarding all but the desired data, a single access otherwise | |
Write | Single access |