mirror of
https://github.com/openhwgroup/cvw
synced 2025-02-01 17:34:27 +00:00
Merged evict dirty clear with flush write back.
This commit is contained in:
parent
8193946996
commit
cd68896637
21
pipelined/src/cache/cachefsm.sv
vendored
21
pipelined/src/cache/cachefsm.sv
vendored
@ -95,8 +95,7 @@ module cachefsm
|
|||||||
STATE_FLUSH,
|
STATE_FLUSH,
|
||||||
STATE_FLUSH_CHECK,
|
STATE_FLUSH_CHECK,
|
||||||
STATE_FLUSH_INCR,
|
STATE_FLUSH_INCR,
|
||||||
STATE_FLUSH_WRITE_BACK,
|
STATE_FLUSH_WRITE_BACK} statetype;
|
||||||
STATE_FLUSH_CLEAR_DIRTY} statetype;
|
|
||||||
|
|
||||||
(* mark_debug = "true" *) statetype CurrState, NextState;
|
(* mark_debug = "true" *) statetype CurrState, NextState;
|
||||||
logic IgnoreRequest;
|
logic IgnoreRequest;
|
||||||
@ -149,11 +148,11 @@ module cachefsm
|
|||||||
else if(FlushWayFlag) NextState = STATE_FLUSH_INCR;
|
else if(FlushWayFlag) NextState = STATE_FLUSH_INCR;
|
||||||
else NextState = STATE_FLUSH_CHECK;
|
else NextState = STATE_FLUSH_CHECK;
|
||||||
STATE_FLUSH_INCR: NextState = STATE_FLUSH_CHECK;
|
STATE_FLUSH_INCR: NextState = STATE_FLUSH_CHECK;
|
||||||
STATE_FLUSH_WRITE_BACK: if(CacheBusAck) NextState = STATE_FLUSH_CLEAR_DIRTY;
|
STATE_FLUSH_WRITE_BACK: if(CacheBusAck) begin
|
||||||
else NextState = STATE_FLUSH_WRITE_BACK;
|
if(FlushFlag) NextState = STATE_READY;
|
||||||
STATE_FLUSH_CLEAR_DIRTY: if(FlushFlag) NextState = STATE_READY;
|
|
||||||
else if(FlushWayFlag) NextState = STATE_FLUSH_INCR;
|
else if(FlushWayFlag) NextState = STATE_FLUSH_INCR;
|
||||||
else NextState = STATE_FLUSH_CHECK;
|
else NextState = STATE_FLUSH_CHECK;
|
||||||
|
end else NextState = STATE_FLUSH_WRITE_BACK;
|
||||||
default: NextState = STATE_READY;
|
default: NextState = STATE_READY;
|
||||||
endcase
|
endcase
|
||||||
end
|
end
|
||||||
@ -169,27 +168,26 @@ module cachefsm
|
|||||||
(CurrState == STATE_FLUSH_CHECK & ~(FlushFlag)) |
|
(CurrState == STATE_FLUSH_CHECK & ~(FlushFlag)) |
|
||||||
(CurrState == STATE_FLUSH_INCR) |
|
(CurrState == STATE_FLUSH_INCR) |
|
||||||
(CurrState == STATE_FLUSH_WRITE_BACK) |
|
(CurrState == STATE_FLUSH_WRITE_BACK) |
|
||||||
(CurrState == STATE_FLUSH_CLEAR_DIRTY & ~(FlushFlag));
|
(CurrState == STATE_FLUSH_WRITE_BACK & ~(FlushFlag) & CacheBusAck);
|
||||||
// write enables internal to cache
|
// write enables internal to cache
|
||||||
assign SetValid = CurrState == STATE_MISS_WRITE_CACHE_LINE;
|
assign SetValid = CurrState == STATE_MISS_WRITE_CACHE_LINE;
|
||||||
assign SetDirty = (CurrState == STATE_READY & DoAnyUpdateHit) |
|
assign SetDirty = (CurrState == STATE_READY & DoAnyUpdateHit) |
|
||||||
(CurrState == STATE_MISS_WRITE_CACHE_LINE & (AMO | CacheRW[0]));
|
(CurrState == STATE_MISS_WRITE_CACHE_LINE & (AMO | CacheRW[0]));
|
||||||
assign ClearValid = '0;
|
assign ClearValid = '0;
|
||||||
assign ClearDirty = (CurrState == STATE_MISS_WRITE_CACHE_LINE & ~(AMO | CacheRW[0])) |
|
assign ClearDirty = (CurrState == STATE_MISS_WRITE_CACHE_LINE & ~(AMO | CacheRW[0])) |
|
||||||
(CurrState == STATE_FLUSH_CLEAR_DIRTY);
|
(CurrState == STATE_FLUSH_WRITE_BACK & CacheBusAck);
|
||||||
assign LRUWriteEn = (CurrState == STATE_READY & DoAnyHit) |
|
assign LRUWriteEn = (CurrState == STATE_READY & DoAnyHit) |
|
||||||
(CurrState == STATE_MISS_WRITE_CACHE_LINE);
|
(CurrState == STATE_MISS_WRITE_CACHE_LINE);
|
||||||
// Flush and eviction controls
|
// Flush and eviction controls
|
||||||
assign SelEvict = (CurrState == STATE_MISS_EVICT_DIRTY_START) |
|
assign SelEvict = (CurrState == STATE_MISS_EVICT_DIRTY_START) |
|
||||||
(CurrState == STATE_MISS_EVICT_DIRTY);
|
(CurrState == STATE_MISS_EVICT_DIRTY);
|
||||||
assign SelFlush = (CurrState == STATE_FLUSH) | (CurrState == STATE_FLUSH_CHECK) |
|
assign SelFlush = (CurrState == STATE_FLUSH) | (CurrState == STATE_FLUSH_CHECK) |
|
||||||
(CurrState == STATE_FLUSH_INCR) | (CurrState == STATE_FLUSH_WRITE_BACK) |
|
(CurrState == STATE_FLUSH_INCR) | (CurrState == STATE_FLUSH_WRITE_BACK);
|
||||||
(CurrState == STATE_FLUSH_CLEAR_DIRTY);
|
|
||||||
assign FlushWayAndNotAdrFlag = FlushWayFlag & ~FlushAdrFlag;
|
assign FlushWayAndNotAdrFlag = FlushWayFlag & ~FlushAdrFlag;
|
||||||
assign FlushAdrCntEn = (CurrState == STATE_FLUSH_CHECK & ~VictimDirty & FlushWayAndNotAdrFlag) |
|
assign FlushAdrCntEn = (CurrState == STATE_FLUSH_CHECK & ~VictimDirty & FlushWayAndNotAdrFlag) |
|
||||||
(CurrState == STATE_FLUSH_CLEAR_DIRTY & FlushWayAndNotAdrFlag);
|
(CurrState == STATE_FLUSH_WRITE_BACK & FlushWayAndNotAdrFlag & CacheBusAck);
|
||||||
assign FlushWayCntEn = (CurrState == STATE_FLUSH_CHECK & ~VictimDirty & ~(FlushFlag)) |
|
assign FlushWayCntEn = (CurrState == STATE_FLUSH_CHECK & ~VictimDirty & ~(FlushFlag)) |
|
||||||
(CurrState == STATE_FLUSH_CLEAR_DIRTY & ~FlushFlag);
|
(CurrState == STATE_FLUSH_WRITE_BACK & ~FlushFlag & CacheBusAck);
|
||||||
assign FlushAdrCntRst = (CurrState == STATE_READY);
|
assign FlushAdrCntRst = (CurrState == STATE_READY);
|
||||||
assign FlushWayCntRst = (CurrState == STATE_READY) | (CurrState == STATE_FLUSH_INCR);
|
assign FlushWayCntRst = (CurrState == STATE_READY) | (CurrState == STATE_FLUSH_INCR);
|
||||||
// Bus interface controls
|
// Bus interface controls
|
||||||
@ -210,6 +208,5 @@ module cachefsm
|
|||||||
|
|
||||||
assign SelBusBuffer = CurrState == STATE_MISS_WRITE_CACHE_LINE;
|
assign SelBusBuffer = CurrState == STATE_MISS_WRITE_CACHE_LINE;
|
||||||
assign SRAMEnable = (CurrState == STATE_READY & ~CPUBusy | CacheStall) | (CurrState != STATE_READY) | reset;
|
assign SRAMEnable = (CurrState == STATE_READY & ~CPUBusy | CacheStall) | (CurrState != STATE_READY) | reset;
|
||||||
//assign SRAMEnable = 1;
|
|
||||||
|
|
||||||
endmodule // cachefsm
|
endmodule // cachefsm
|
||||||
|
Loading…
Reference in New Issue
Block a user