A data
caching system comprises a hashing function, a data store, a tag array, a page
translator, a comparator and a duplicate tag array. The hashing function combines
an index portion of a virtual address with a virtual page portion of the
virtual address to form a cache index. The data store comprises a plurality of
data blocks for holding data. The tag array comprises a plurality of tag
entries corresponding to the data blocks, and both the data store and tag array
are addressed with the cache index. The tag array provides a plurality of
physical address tags corresponding to physical addresses of data resident
within corresponding data blocks in the data store addressed by the cache
index. The page translator translates a tag portion of the virtual address to a
corresponding physical address tag. The comparator verifies a match between the
physical address tag from the page translator and the plurality of physical
address tags from the tag array, a match indicating that data addressed by the
virtual address is resident within the data store. Finally, the duplicate tag
array resolves synonym issues caused by hashing. The hashing function is such
that addresses which are equivalent mod 213 are pseudo-randomly displaced
within the cache. The preferred hashing function maps VA<14, 15 XOR 13,
12:6> to bits <14:6> of the cache index (Full Patent Here).