mirror of
https://github.com/openhwgroup/cvw
synced 2025-02-11 06:05:49 +00:00
Added flush controls to cachway.
This commit is contained in:
parent
cae350abb7
commit
d901f60a6d
5
wally-pipelined/src/cache/cacheway.sv
vendored
5
wally-pipelined/src/cache/cacheway.sv
vendored
@ -43,6 +43,8 @@ module cacheway #(parameter NUMLINES=512, parameter BLOCKLEN = 256, TAGLEN = 26,
|
|||||||
input logic SelEvict,
|
input logic SelEvict,
|
||||||
input logic VictimWay,
|
input logic VictimWay,
|
||||||
input logic InvalidateAll,
|
input logic InvalidateAll,
|
||||||
|
input logic SelFlush,
|
||||||
|
input logic FlushWay,
|
||||||
|
|
||||||
output logic [BLOCKLEN-1:0] ReadDataBlockWayMasked,
|
output logic [BLOCKLEN-1:0] ReadDataBlockWayMasked,
|
||||||
output logic WayHit,
|
output logic WayHit,
|
||||||
@ -80,7 +82,8 @@ module cacheway #(parameter NUMLINES=512, parameter BLOCKLEN = 256, TAGLEN = 26,
|
|||||||
.WriteEnable(TagWriteEnable));
|
.WriteEnable(TagWriteEnable));
|
||||||
|
|
||||||
assign WayHit = Valid & (ReadTag == PAdr[`PA_BITS-1:OFFSETLEN+INDEXLEN]);
|
assign WayHit = Valid & (ReadTag == PAdr[`PA_BITS-1:OFFSETLEN+INDEXLEN]);
|
||||||
assign SelectedWay = SelEvict ? VictimWay : WayHit;
|
assign SelectedWay = SelFlush ? FlushWay :
|
||||||
|
SelEvict ? VictimWay : WayHit;
|
||||||
assign ReadDataBlockWayMasked = SelectedWay ? ReadDataBlockWay : '0; // first part of AO mux.
|
assign ReadDataBlockWayMasked = SelectedWay ? ReadDataBlockWay : '0; // first part of AO mux.
|
||||||
|
|
||||||
assign VictimDirtyWay = VictimWay & Dirty & Valid;
|
assign VictimDirtyWay = VictimWay & Dirty & Valid;
|
||||||
|
9
wally-pipelined/src/cache/dcache.sv
vendored
9
wally-pipelined/src/cache/dcache.sv
vendored
@ -125,6 +125,9 @@ module dcache
|
|||||||
logic [TAGLEN-1:0] VictimTagWay [NUMWAYS-1:0];
|
logic [TAGLEN-1:0] VictimTagWay [NUMWAYS-1:0];
|
||||||
logic [TAGLEN-1:0] VictimTag;
|
logic [TAGLEN-1:0] VictimTag;
|
||||||
|
|
||||||
|
logic [INDEXLEN-1:0] FlushAdr;
|
||||||
|
logic [NUMWAYS-1:0] FlushWay;
|
||||||
|
logic SelFlush;
|
||||||
|
|
||||||
logic AnyCPUReqM;
|
logic AnyCPUReqM;
|
||||||
logic FetchCountFlag;
|
logic FetchCountFlag;
|
||||||
@ -137,10 +140,11 @@ module dcache
|
|||||||
|
|
||||||
// Read Path CPU (IEU) side
|
// Read Path CPU (IEU) side
|
||||||
|
|
||||||
mux3 #(INDEXLEN)
|
mux4 #(INDEXLEN)
|
||||||
AdrSelMux(.d0(MemAdrE[INDEXLEN+OFFSETLEN-1:OFFSETLEN]),
|
AdrSelMux(.d0(MemAdrE[INDEXLEN+OFFSETLEN-1:OFFSETLEN]),
|
||||||
.d1(VAdr[INDEXLEN+OFFSETLEN-1:OFFSETLEN]),
|
.d1(VAdr[INDEXLEN+OFFSETLEN-1:OFFSETLEN]),
|
||||||
.d2(MemPAdrM[INDEXLEN+OFFSETLEN-1:OFFSETLEN]),
|
.d2(MemPAdrM[INDEXLEN+OFFSETLEN-1:OFFSETLEN]),
|
||||||
|
.d3(FlushAdr),
|
||||||
.s(SelAdrM),
|
.s(SelAdrM),
|
||||||
.y(RAdr));
|
.y(RAdr));
|
||||||
|
|
||||||
@ -160,6 +164,8 @@ module dcache
|
|||||||
.ClearDirty,
|
.ClearDirty,
|
||||||
.SelEvict,
|
.SelEvict,
|
||||||
.VictimWay,
|
.VictimWay,
|
||||||
|
.FlushWay,
|
||||||
|
.SelFlush,
|
||||||
.ReadDataBlockWayMasked(ReadDataBlockWayMaskedM),
|
.ReadDataBlockWayMasked(ReadDataBlockWayMaskedM),
|
||||||
.WayHit,
|
.WayHit,
|
||||||
.VictimDirtyWay,
|
.VictimDirtyWay,
|
||||||
@ -334,6 +340,7 @@ module dcache
|
|||||||
.CntReset,
|
.CntReset,
|
||||||
.SelUncached,
|
.SelUncached,
|
||||||
.SelEvict,
|
.SelEvict,
|
||||||
|
.SelFlush,
|
||||||
.LRUWriteEn);
|
.LRUWriteEn);
|
||||||
|
|
||||||
|
|
||||||
|
4
wally-pipelined/src/cache/dcachefsm.sv
vendored
4
wally-pipelined/src/cache/dcachefsm.sv
vendored
@ -77,7 +77,8 @@ module dcachefsm
|
|||||||
output logic CntReset,
|
output logic CntReset,
|
||||||
output logic SelUncached,
|
output logic SelUncached,
|
||||||
output logic SelEvict,
|
output logic SelEvict,
|
||||||
output logic LRUWriteEn
|
output logic LRUWriteEn,
|
||||||
|
output logic SelFlush
|
||||||
);
|
);
|
||||||
|
|
||||||
logic PreCntEn;
|
logic PreCntEn;
|
||||||
@ -168,6 +169,7 @@ module dcachefsm
|
|||||||
DCacheMiss = 1'b0;
|
DCacheMiss = 1'b0;
|
||||||
LRUWriteEn = 1'b0;
|
LRUWriteEn = 1'b0;
|
||||||
MemAfterIWalkDone = 1'b0;
|
MemAfterIWalkDone = 1'b0;
|
||||||
|
SelFlush = 1'b0;
|
||||||
NextState = STATE_READY;
|
NextState = STATE_READY;
|
||||||
|
|
||||||
case (CurrState)
|
case (CurrState)
|
||||||
|
2
wally-pipelined/src/cache/icache.sv
vendored
2
wally-pipelined/src/cache/icache.sv
vendored
@ -152,6 +152,8 @@ module icache
|
|||||||
.ClearDirty(1'b0),
|
.ClearDirty(1'b0),
|
||||||
.SelEvict(1'b0),
|
.SelEvict(1'b0),
|
||||||
.VictimWay,
|
.VictimWay,
|
||||||
|
.FlushWay(1'b0),
|
||||||
|
.SelFlush(1'b0),
|
||||||
.ReadDataBlockWayMasked,
|
.ReadDataBlockWayMasked,
|
||||||
.WayHit,
|
.WayHit,
|
||||||
.VictimDirtyWay(),
|
.VictimDirtyWay(),
|
||||||
|
Loading…
Reference in New Issue
Block a user