icache: Split PLRU into storage and logic
authorPaul Mackerras <paulus@ozlabs.org>
Wed, 7 Sep 2022 10:18:18 +0000 (20:18 +1000)
committerPaul Mackerras <paulus@ozlabs.org>
Thu, 8 Sep 2022 09:27:44 +0000 (19:27 +1000)
commit86212dc8797a454c8dcd52c2b275731ec1dffc6e
treeaf438667b477b1f1afe0b2e11ea2eb30e42fa08c
parentcd2e1741132d3a796da088b3c9bfa2b9611f4eb0
icache: Split PLRU into storage and logic

Rather than having update and decode logic for each individual PLRU
as well as a register to store the current PLRU state, we now put the
PLRU state in a little RAM, which will typically use LUT RAM on FPGAs,
and have just a single copy of the logic to calculate the pseudo-LRU
way and to update the PLRU state.  This logic is in the plrufn module
and is just combinatorial logic.  A new module was created for this as
other parts of the system are still using plru.vhdl.

The PLRU RAM in the icache is read asynchronously in the cycle
after the cache tag matching is done.  At the end of that cycle the
PLRU RAM entry is updated if the access was a cache hit, or a victim
way is calculated and stored if the access was a cache miss and
miss handling is starting in this cycle.

Signed-off-by: Paul Mackerras <paulus@ozlabs.org>
Makefile
icache.vhdl
microwatt.core
plrufn.vhdl [new file with mode: 0644]