The L1P cache controller supports a fixed cache size of 32KB. The purpose of the L1P cache is to maximize performance of the code execution. L1P cache is necessary to facilitate fetching program code at a fast clock rate in order to maintain a large system memory. The cache is responsible for hiding the latency associated with executing code from the slower system memory.
The L1P memory system provides the following key features:
- L1 program memory controller (PMC) with 32KB L1P memory, all cache (no support for L1P SRAM)
- L1P cache
- 4-way set associative
- 64-byte line size
- Virtually indexed, virtually tagged (48-bit virtual address)
- Auto-prefetching on L1P misses from L2
- Prefetch and branch prediction
- ECC SECDED support
- Software initiated coherence operations
- Single cycle invalidate with support for three modes: all cache lines, only user cache lines, only supervisor cache lines
- Virtual memory
- Virtual-to-physical addressing on misses
- Micro-TLB (uTLB) to handle address translation and for code protection
- Extended control register (ECR) access
- L1P ECR registers are not memory mapped and instead are mapped to a MOVC CPU instruction