forked from Github_Repos/cvw
Cache cleanup.
This commit is contained in:
parent
41a79556e0
commit
529d8b629a
36
pipelined/src/cache/cachefsm.sv
vendored
36
pipelined/src/cache/cachefsm.sv
vendored
@ -140,9 +140,7 @@ module cachefsm
|
||||
// *** Ross simplify: factor out next state and output logic
|
||||
always_comb begin
|
||||
PreSelAdr = 2'b00;
|
||||
LRUWriteEn = 1'b0;
|
||||
SelFlush = 1'b0;
|
||||
FlushAdrCntEn = 1'b0;
|
||||
//SelFlush = 1'b0;
|
||||
FlushWayCntEn = 1'b0;
|
||||
FlushAdrCntRst = 1'b0;
|
||||
FlushWayCntRst = 1'b0;
|
||||
@ -156,7 +154,6 @@ module cachefsm
|
||||
STATE_READY: begin
|
||||
|
||||
PreSelAdr = 2'b00;
|
||||
LRUWriteEn = 1'b0;
|
||||
|
||||
// TLB Miss
|
||||
if(IgnoreRequest) begin
|
||||
@ -180,7 +177,6 @@ module cachefsm
|
||||
// amo hit
|
||||
else if(Atomic[1] & (&RW) & CacheHit) begin
|
||||
PreSelAdr = 2'b01;
|
||||
LRUWriteEn = 1'b1;
|
||||
|
||||
if(CPUBusy) begin
|
||||
NextState = STATE_CPU_BUSY_FINISH_AMO;
|
||||
@ -193,7 +189,6 @@ module cachefsm
|
||||
end
|
||||
// read hit valid cached
|
||||
else if(RW[1] & CacheHit) begin
|
||||
LRUWriteEn = 1'b1;
|
||||
|
||||
if(CPUBusy) begin
|
||||
NextState = STATE_CPU_BUSY;
|
||||
@ -207,7 +202,6 @@ module cachefsm
|
||||
// write hit valid cached
|
||||
else if (RW[0] & CacheHit) begin
|
||||
PreSelAdr = 2'b01;
|
||||
LRUWriteEn = 1'b1;
|
||||
|
||||
if(CPUBusy) begin
|
||||
NextState = STATE_CPU_BUSY;
|
||||
@ -264,7 +258,6 @@ module cachefsm
|
||||
end
|
||||
|
||||
STATE_MISS_READ_WORD_DELAY: begin
|
||||
LRUWriteEn = 1'b0;
|
||||
if(&RW & Atomic[1]) begin // amo write
|
||||
PreSelAdr = 2'b01;
|
||||
if(CPUBusy) begin
|
||||
@ -272,11 +265,9 @@ module cachefsm
|
||||
if(~`REPLAY) save = 1'b1;
|
||||
end
|
||||
else begin
|
||||
LRUWriteEn = 1'b1;
|
||||
NextState = STATE_READY;
|
||||
end
|
||||
end else begin
|
||||
LRUWriteEn = 1'b1;
|
||||
if(CPUBusy) begin
|
||||
NextState = STATE_CPU_BUSY;
|
||||
if(`REPLAY) PreSelAdr = 2'b01;
|
||||
@ -290,7 +281,6 @@ module cachefsm
|
||||
|
||||
STATE_MISS_WRITE_WORD: begin
|
||||
PreSelAdr = 2'b01;
|
||||
LRUWriteEn = 1'b1;
|
||||
if(CPUBusy) begin
|
||||
NextState = STATE_CPU_BUSY;
|
||||
if(`REPLAY) PreSelAdr = 2'b01;
|
||||
@ -325,27 +315,25 @@ module cachefsm
|
||||
|
||||
STATE_CPU_BUSY_FINISH_AMO: begin
|
||||
PreSelAdr = 2'b01;
|
||||
LRUWriteEn = 1'b0;
|
||||
restore = 1'b1;
|
||||
if(CPUBusy) begin
|
||||
NextState = STATE_CPU_BUSY_FINISH_AMO;
|
||||
end
|
||||
else begin
|
||||
LRUWriteEn = 1'b1;
|
||||
NextState = STATE_READY;
|
||||
end
|
||||
end
|
||||
|
||||
STATE_FLUSH: begin
|
||||
// intialize flush counters
|
||||
SelFlush = 1'b1;
|
||||
//SelFlush = 1'b1;
|
||||
PreSelAdr = 2'b10;
|
||||
NextState = STATE_FLUSH_CHECK;
|
||||
end
|
||||
|
||||
STATE_FLUSH_CHECK: begin
|
||||
PreSelAdr = 2'b10;
|
||||
SelFlush = 1'b1;
|
||||
//SelFlush = 1'b1;
|
||||
if(VictimDirty) begin
|
||||
NextState = STATE_FLUSH_WRITE_BACK;
|
||||
FlushWayCntEn = 1'b0;
|
||||
@ -356,8 +344,6 @@ module cachefsm
|
||||
FlushWayCntEn = 1'b0;
|
||||
end else if(FlushWayFlag) begin
|
||||
NextState = STATE_FLUSH_INCR;
|
||||
FlushAdrCntEn = 1'b1;
|
||||
|
||||
FlushWayCntEn = 1'b1;
|
||||
end else begin
|
||||
FlushWayCntEn = 1'b1;
|
||||
@ -367,14 +353,14 @@ module cachefsm
|
||||
|
||||
STATE_FLUSH_INCR: begin
|
||||
PreSelAdr = 2'b10;
|
||||
SelFlush = 1'b1;
|
||||
//SelFlush = 1'b1;
|
||||
FlushWayCntRst = 1'b1;
|
||||
NextState = STATE_FLUSH_CHECK;
|
||||
end
|
||||
|
||||
STATE_FLUSH_WRITE_BACK: begin
|
||||
PreSelAdr = 2'b10;
|
||||
SelFlush = 1'b1;
|
||||
//SelFlush = 1'b1;
|
||||
if(CacheBusAck) begin
|
||||
NextState = STATE_FLUSH_CLEAR_DIRTY;
|
||||
end else begin
|
||||
@ -384,7 +370,7 @@ module cachefsm
|
||||
|
||||
STATE_FLUSH_CLEAR_DIRTY: begin
|
||||
VDWriteEnable = 1'b1;
|
||||
SelFlush = 1'b1;
|
||||
//SelFlush = 1'b1;
|
||||
PreSelAdr = 2'b10;
|
||||
FlushWayCntEn = 1'b0;
|
||||
if(FlushAdrFlag & FlushWayFlag) begin
|
||||
@ -392,7 +378,6 @@ module cachefsm
|
||||
PreSelAdr = 2'b00;
|
||||
end else if (FlushWayFlag) begin
|
||||
NextState = STATE_FLUSH_INCR;
|
||||
FlushAdrCntEn = 1'b1;
|
||||
|
||||
FlushWayCntEn = 1'b1;
|
||||
end else begin
|
||||
@ -434,6 +419,15 @@ module cachefsm
|
||||
(CurrState == STATE_MISS_WRITE_WORD);
|
||||
assign SRAMLineWriteEnable = (CurrState == STATE_MISS_WRITE_CACHE_LINE);
|
||||
assign SelEvict = (CurrState == STATE_MISS_EVICT_DIRTY);
|
||||
assign LRUWriteEn = (CurrState == STATE_READY & (DoAMOHit | DoReadHit | DoWriteHit)) |
|
||||
(CurrState == STATE_MISS_READ_WORD_DELAY) |
|
||||
(CurrState == STATE_MISS_WRITE_WORD);
|
||||
assign SelFlush = (CurrState == STATE_FLUSH) | (CurrState == STATE_FLUSH_CHECK) |
|
||||
(CurrState == STATE_FLUSH_INCR) | (CurrState == STATE_FLUSH_WRITE_BACK) |
|
||||
(CurrState == STATE_FLUSH_CLEAR_DIRTY);
|
||||
assign FlushAdrCntEn = (CurrState == STATE_FLUSH_CHECK & VictimDirty & FlushWayFlag & ~FlushAdrFlag) |
|
||||
(CurrState == STATE_FLUSH_CLEAR_DIRTY & FlushWayFlag & ~FlushAdrFlag);
|
||||
|
||||
|
||||
endmodule // cachefsm
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user