Added flush controls to cachway.

This commit is contained in:
Ross Thompson 2021-09-16 16:56:48 -05:00
parent cae350abb7
commit d901f60a6d
4 changed files with 17 additions and 3 deletions

View File

@ -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;

View File

@ -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);

View File

@ -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)

View File

@ -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(),