mirror of
https://github.com/openhwgroup/cvw
synced 2025-02-11 06:05:49 +00:00
Reduced seladr to 1 bit as second bit is same as selflush.
This commit is contained in:
parent
cb3d71a63d
commit
ae2011eb07
4
pipelined/src/cache/cache.sv
vendored
4
pipelined/src/cache/cache.sv
vendored
@ -68,7 +68,7 @@ module cache #(parameter LINELEN, NUMLINES, NUMWAYS, DCACHE = 1) (
|
|||||||
localparam WORDSPERLINE = LINELEN/`XLEN;
|
localparam WORDSPERLINE = LINELEN/`XLEN;
|
||||||
localparam FlushAdrThreshold = NUMLINES - 1;
|
localparam FlushAdrThreshold = NUMLINES - 1;
|
||||||
|
|
||||||
logic [1:0] SelAdr;
|
logic SelAdr;
|
||||||
logic [SETLEN-1:0] RAdr;
|
logic [SETLEN-1:0] RAdr;
|
||||||
logic [LINELEN-1:0] CacheWriteData;
|
logic [LINELEN-1:0] CacheWriteData;
|
||||||
logic ClearValid;
|
logic ClearValid;
|
||||||
@ -110,7 +110,7 @@ module cache #(parameter LINELEN, NUMLINES, NUMWAYS, DCACHE = 1) (
|
|||||||
// and FlushAdr when handling D$ flushes
|
// and FlushAdr when handling D$ flushes
|
||||||
mux3 #(SETLEN) AdrSelMux(
|
mux3 #(SETLEN) AdrSelMux(
|
||||||
.d0(NextAdr[SETTOP-1:OFFSETLEN]), .d1(PAdr[SETTOP-1:OFFSETLEN]), .d2(FlushAdr),
|
.d0(NextAdr[SETTOP-1:OFFSETLEN]), .d1(PAdr[SETTOP-1:OFFSETLEN]), .d2(FlushAdr),
|
||||||
.s(SelAdr), .y(RAdr));
|
.s({SelFlush, SelAdr}), .y(RAdr));
|
||||||
|
|
||||||
// Array of cache ways, along with victim, hit, dirty, and read merging logic
|
// Array of cache ways, along with victim, hit, dirty, and read merging logic
|
||||||
cacheway #(NUMLINES, LINELEN, TAGLEN, OFFSETLEN, SETLEN) CacheWays[NUMWAYS-1:0](
|
cacheway #(NUMLINES, LINELEN, TAGLEN, OFFSETLEN, SETLEN) CacheWays[NUMWAYS-1:0](
|
||||||
|
105
pipelined/src/cache/cachefsm.sv
vendored
105
pipelined/src/cache/cachefsm.sv
vendored
@ -32,49 +32,49 @@
|
|||||||
|
|
||||||
module cachefsm
|
module cachefsm
|
||||||
(input logic clk,
|
(input logic clk,
|
||||||
input logic reset,
|
input logic reset,
|
||||||
// inputs from IEU
|
// inputs from IEU
|
||||||
input logic [1:0] RW,
|
input logic [1:0] RW,
|
||||||
input logic [1:0] Atomic,
|
input logic [1:0] Atomic,
|
||||||
input logic FlushCache,
|
input logic FlushCache,
|
||||||
// hazard inputs
|
// hazard inputs
|
||||||
input logic CPUBusy,
|
input logic CPUBusy,
|
||||||
// interlock fsm
|
// interlock fsm
|
||||||
input logic IgnoreRequestTLB,
|
input logic IgnoreRequestTLB,
|
||||||
input logic IgnoreRequestTrapM,
|
input logic IgnoreRequestTrapM,
|
||||||
// Bus inputs
|
// Bus inputs
|
||||||
input logic CacheBusAck,
|
input logic CacheBusAck,
|
||||||
// dcache internals
|
// dcache internals
|
||||||
input logic CacheHit,
|
input logic CacheHit,
|
||||||
input logic VictimDirty,
|
input logic VictimDirty,
|
||||||
input logic FlushAdrFlag,
|
input logic FlushAdrFlag,
|
||||||
input logic FlushWayFlag,
|
input logic FlushWayFlag,
|
||||||
|
|
||||||
// hazard outputs
|
// hazard outputs
|
||||||
output logic CacheStall,
|
output logic CacheStall,
|
||||||
// counter outputs
|
// counter outputs
|
||||||
output logic CacheMiss,
|
output logic CacheMiss,
|
||||||
output logic CacheAccess,
|
output logic CacheAccess,
|
||||||
// Bus outputs
|
// Bus outputs
|
||||||
output logic CacheCommitted,
|
output logic CacheCommitted,
|
||||||
output logic CacheWriteLine,
|
output logic CacheWriteLine,
|
||||||
output logic CacheFetchLine,
|
output logic CacheFetchLine,
|
||||||
|
|
||||||
// dcache internals
|
// dcache internals
|
||||||
output logic [1:0] SelAdr,
|
output logic SelAdr,
|
||||||
output logic ClearValid,
|
output logic ClearValid,
|
||||||
output logic ClearDirty,
|
output logic ClearDirty,
|
||||||
output logic FSMWordWriteEn,
|
output logic FSMWordWriteEn,
|
||||||
output logic FSMLineWriteEn,
|
output logic FSMLineWriteEn,
|
||||||
output logic SelEvict,
|
output logic SelEvict,
|
||||||
output logic LRUWriteEn,
|
output logic LRUWriteEn,
|
||||||
output logic SelFlush,
|
output logic SelFlush,
|
||||||
output logic FlushAdrCntEn,
|
output logic FlushAdrCntEn,
|
||||||
output logic FlushWayCntEn,
|
output logic FlushWayCntEn,
|
||||||
output logic FlushAdrCntRst,
|
output logic FlushAdrCntRst,
|
||||||
output logic FlushWayCntRst,
|
output logic FlushWayCntRst,
|
||||||
output logic save,
|
output logic save,
|
||||||
output logic restore);
|
output logic restore);
|
||||||
|
|
||||||
logic resetDelay;
|
logic resetDelay;
|
||||||
logic AMO;
|
logic AMO;
|
||||||
@ -186,18 +186,15 @@ module cachefsm
|
|||||||
(CurrState == STATE_FLUSH_CLEAR_DIRTY & ~(FlushFlag));
|
(CurrState == STATE_FLUSH_CLEAR_DIRTY & ~(FlushFlag));
|
||||||
// write enables internal to cache
|
// write enables internal to cache
|
||||||
assign FSMLineWriteEn = CurrState == STATE_MISS_WRITE_CACHE_LINE;
|
assign FSMLineWriteEn = CurrState == STATE_MISS_WRITE_CACHE_LINE;
|
||||||
assign ClearValid = '0;
|
|
||||||
assign FSMWordWriteEn = (CurrState == STATE_READY & DoAnyUpdateHit) |
|
assign FSMWordWriteEn = (CurrState == STATE_READY & DoAnyUpdateHit) |
|
||||||
(CurrState == STATE_MISS_READ_WORD_DELAY & AMO) |
|
(CurrState == STATE_MISS_READ_WORD_DELAY & AMO) |
|
||||||
(CurrState == STATE_MISS_WRITE_WORD);
|
(CurrState == STATE_MISS_WRITE_WORD);
|
||||||
|
assign ClearValid = '0;
|
||||||
assign ClearDirty = (CurrState == STATE_MISS_WRITE_CACHE_LINE) |
|
assign ClearDirty = (CurrState == STATE_MISS_WRITE_CACHE_LINE) |
|
||||||
(CurrState == STATE_FLUSH_CLEAR_DIRTY);
|
(CurrState == STATE_FLUSH_CLEAR_DIRTY);
|
||||||
|
|
||||||
assign LRUWriteEn = (CurrState == STATE_READY & DoAnyHit) |
|
assign LRUWriteEn = (CurrState == STATE_READY & DoAnyHit) |
|
||||||
(CurrState == STATE_MISS_READ_WORD_DELAY) |
|
(CurrState == STATE_MISS_READ_WORD_DELAY) |
|
||||||
(CurrState == STATE_MISS_WRITE_WORD);
|
(CurrState == STATE_MISS_WRITE_WORD);
|
||||||
|
|
||||||
// Flush and eviction controls
|
// Flush and eviction controls
|
||||||
assign SelEvict = (CurrState == STATE_MISS_EVICT_DIRTY);
|
assign SelEvict = (CurrState == STATE_MISS_EVICT_DIRTY);
|
||||||
assign SelFlush = (CurrState == STATE_FLUSH) | (CurrState == STATE_FLUSH_CHECK) |
|
assign SelFlush = (CurrState == STATE_FLUSH) | (CurrState == STATE_FLUSH_CHECK) |
|
||||||
@ -221,26 +218,20 @@ module cachefsm
|
|||||||
(CurrState == STATE_MISS_WRITE_WORD & DoWrite & CPUBusy)) & ~`REPLAY;
|
(CurrState == STATE_MISS_WRITE_WORD & DoWrite & CPUBusy)) & ~`REPLAY;
|
||||||
|
|
||||||
// **** can this be simplified?
|
// **** can this be simplified?
|
||||||
assign SelAdr = ((CurrState == STATE_READY & IgnoreRequestTLB) | // Ignore Request is needed on TLB miss.
|
assign SelAdr = (CurrState == STATE_READY & IgnoreRequestTLB) | // Ignore Request is needed on TLB miss.
|
||||||
// use the raw requests as we don't want IgnoreRequestTrapM in the critical path
|
// use the raw requests as we don't want IgnoreRequestTrapM in the critical path
|
||||||
(CurrState == STATE_READY & (AMO & CacheHit)) |
|
(CurrState == STATE_READY & ((AMO | RW[0]) & CacheHit)) | // changes if store delay hazard removed
|
||||||
(CurrState == STATE_READY & (RW[1] & CacheHit) & (CPUBusy & `REPLAY)) |
|
(CurrState == STATE_READY & (RW[1] & CacheHit) & (CPUBusy & `REPLAY)) |
|
||||||
(CurrState == STATE_READY & (RW[0] & CacheHit)) |
|
|
||||||
(CurrState == STATE_MISS_FETCH_WDV) |
|
(CurrState == STATE_MISS_FETCH_WDV) |
|
||||||
(CurrState == STATE_MISS_FETCH_DONE) |
|
(CurrState == STATE_MISS_FETCH_DONE) |
|
||||||
(CurrState == STATE_MISS_WRITE_CACHE_LINE) |
|
(CurrState == STATE_MISS_EVICT_DIRTY) |
|
||||||
(CurrState == STATE_MISS_READ_WORD) |
|
(CurrState == STATE_MISS_WRITE_CACHE_LINE) |
|
||||||
(CurrState == STATE_MISS_READ_WORD_DELAY & (AMO | (CPUBusy & `REPLAY))) |
|
(CurrState == STATE_MISS_READ_WORD) |
|
||||||
(CurrState == STATE_MISS_WRITE_WORD) |
|
(CurrState == STATE_MISS_READ_WORD_DELAY & (AMO | (CPUBusy & `REPLAY))) |
|
||||||
(CurrState == STATE_MISS_EVICT_DIRTY) |
|
(CurrState == STATE_MISS_WRITE_WORD) |
|
||||||
(CurrState == STATE_CPU_BUSY & (CPUBusy & `REPLAY)) |
|
|
||||||
resetDelay) ? 2'b01 :
|
(CurrState == STATE_CPU_BUSY & (CPUBusy & `REPLAY)) |
|
||||||
((CurrState == STATE_FLUSH) |
|
resetDelay;
|
||||||
(CurrState == STATE_FLUSH_CHECK) |
|
|
||||||
(CurrState == STATE_FLUSH_INCR) |
|
|
||||||
(CurrState == STATE_FLUSH_WRITE_BACK) |
|
|
||||||
(CurrState == STATE_FLUSH_CLEAR_DIRTY)) ? 2'b10 :
|
|
||||||
2'b00;
|
|
||||||
|
|
||||||
|
|
||||||
endmodule // cachefsm
|
endmodule // cachefsm
|
||||||
|
Loading…
Reference in New Issue
Block a user