![Digital Equipment Alpha 21164PC Hardware Reference Manual Download Page 102](http://html.mh-extra.com/html/digital-equipment/alpha-21164pc/alpha-21164pc_hardware-reference-manual_2498508102.webp)
4–14
Clocks, Cache, and External Interface
29 September 1997 – Subject To Change
Cache Coherency
The system hardware designer need not be concerned about Icache and Dcache
coherency. Coherency of the Icache is a software concern—it is flushed with an IMB
(PALcode) instruction.
The 21164PC requires the system to allow only one change to a block at a time. This
means that if the 21164PC gains the bus to read or write a block, I/O devices on the
system bus should not be allowed to access that block until the data has been moved.
Flush Cache Coherency Protocol
The 21164PC provides hardware mechanisms to support a flush-based cache coher-
ence protocol. This protocol is best suited for low-cost uniprocessor systems. It is
typically used by an I/O subsystem to ensure that data coherence is maintained when
DMA transactions are performed. Flush protocol does not allow shared data in the
cache. Table 4–5 shows the Bcache states for the cache coherency protocols.
The Bcache is probed for each transaction to determine if the block is present. If the
block is present, the requested action is taken. If the block is not present, the com-
mand is still acknowledged, but no other action is taken. The Flush protocol for the
21164PC does not support a duplicate tag store.
Section 4.5.1 provides a more detailed description of flush cache coherency protocol.
The system commands that are used to maintain cache coherency are described in
more detail in Section 4.8.2.
4.5.1 Flush Cache Coherency Protocol
System logic notifies the 21164PC of all DMA read operations that occur on the sys-
tem bus by using the interface READ command. The 21164PC returns data if the
block is dirty.
1
The tag_valid_h and tag_dirty_h signals are described in Table 3–1.
Table 4–5 Bcache States for Cache Coherency Protocols
Valid
1
Dirty
State of Cache Line
0
X
Not valid.
1
0
Valid for read or write operations. This cache line contains the only
cached copy of the block and the copy in memory is identical to this
line.
1
1
Valid for read or write operations. This cache line contains the only
cached copy of the block. The contents of the block have been modified
more recently than the copy in memory.