I. Introduction
The memory hierarchy plays a central role in modern microprocessors. Researchers have proposed numerous ideas and techniques that augment caches to improve performance, enhance security and reliability, and extend functionality [1], [2], [3]. However, today's cache implementation is typically fixed and optimized for a particular cache design. This enables the cache implementation to be highly efficient, yet at the same time means that even a small change in the cache requires re-design and re-fabrication of a microprocessor. Such a hardware change is often prohibitively expensive because of ever increasing NRE (Non-Recurring Engineering) costs.