diff --git a/src/cache/cache.sv b/src/cache/cache.sv index b6340a541..f0e396c45 100644 --- a/src/cache/cache.sv +++ b/src/cache/cache.sv @@ -34,7 +34,6 @@ module cache import cvw::*; #(parameter cvw_t P, input logic Stall, // Stall the cache, preventing new accesses. In-flight access finished but does not return to READY input logic FlushStage, // Pipeline flush of second stage (prevent writes and bus operations) // cpu side - input logic [1:0] CacheRWNext, // [1] Read, [0] Write input logic [1:0] CacheRW, // [1] Read, [0] Write input logic FlushCache, // Flush all dirty lines back to memory input logic InvalidateCache, // Clear all valid bits @@ -225,7 +224,7 @@ module cache import cvw::*; #(parameter cvw_t P, ///////////////////////////////////////////////////////////////////////////////////////////// cachefsm #(P, READ_ONLY_CACHE) cachefsm(.clk, .reset, .CacheBusRW, .CacheBusAck, - .FlushStage, .CacheRW, .CacheRWNext, .Stall, + .FlushStage, .CacheRW, .Stall, .CacheHit, .LineDirty, .HitLineDirty, .CacheStall, .CacheCommitted, .CacheMiss, .CacheAccess, .SelAdrData, .SelAdrTag, .SelWay, .ClearDirty, .SetDirty, .SetValid, .ClearValid, .SelWriteback, .SelFlush, diff --git a/src/cache/cachefsm.sv b/src/cache/cachefsm.sv index f960cfdcd..719cfab32 100644 --- a/src/cache/cachefsm.sv +++ b/src/cache/cachefsm.sv @@ -38,7 +38,6 @@ module cachefsm import cvw::*; #(parameter cvw_t P, output logic CacheStall, // Cache stalls pipeline during multicycle operation // inputs from IEU input logic [1:0] CacheRW, // [1] Read, [0] Write - input logic [1:0] CacheRWNext, // [1] Read, [0] Write input logic FlushCache, // Flush all dirty lines back to memory input logic InvalidateCache, // Clear all valid bits input logic [3:0] CMOpM, // 0001: cbo.inval; 0010: cbo.flush; 0100: cbo.clean; 1000: cbo.zero @@ -79,7 +78,6 @@ module cachefsm import cvw::*; #(parameter cvw_t P, logic CMOWriteback; logic CMOZeroNoEviction; logic StallConditions; - logic StoreHazard; typedef enum logic [3:0]{STATE_READY, // hit states // miss states @@ -106,8 +104,6 @@ module cachefsm import cvw::*; #(parameter cvw_t P, assign CacheAccess = (|CacheRW) & ((CurrState == STATE_READY & ~Stall & ~FlushStage) | (CurrState == STATE_READ_HOLD & ~Stall & ~FlushStage)); // exclusion-tag: icache CacheW assign CacheMiss = CacheAccess & ~CacheHit; - assign StoreHazard = CacheRWNext[1] & CacheRW[0] & ~CacheRW[1]; - // special case on reset. When the fsm first exists reset the // PCNextF will no longer be pointing to the correct address. // But PCF will be the reset vector. @@ -124,7 +120,6 @@ module cachefsm import cvw::*; #(parameter cvw_t P, else if(FlushCache & ~READ_ONLY_CACHE) NextState = STATE_FLUSH; else if(AnyMiss & (READ_ONLY_CACHE | ~LineDirty)) NextState = STATE_FETCH; // exclusion-tag: icache FETCHStatement else if(AnyMiss | CMOWriteback) NextState = STATE_WRITEBACK; // exclusion-tag: icache WRITEBACKStatement - else if(StoreHazard) NextState = STATE_READ_HOLD; else NextState = STATE_READY; STATE_FETCH: if(CacheBusAck) NextState = STATE_WRITE_LINE; else if(CacheBusAck) NextState = STATE_READY; @@ -150,7 +145,7 @@ module cachefsm import cvw::*; #(parameter cvw_t P, // com back to CPU assign CacheCommitted = (CurrState != STATE_READY) & ~(READ_ONLY_CACHE & (CurrState == STATE_READ_HOLD)); - assign StallConditions = FlushCache | AnyMiss | CMOWriteback | (StoreHazard); + assign StallConditions = FlushCache | AnyMiss | CMOWriteback; assign CacheStall = (CurrState == STATE_READY & StallConditions) | // exclusion-tag: icache StallStates (CurrState == STATE_FETCH) | (CurrState == STATE_WRITEBACK) | diff --git a/src/ifu/ifu.sv b/src/ifu/ifu.sv index 376284372..b2a4abfcd 100644 --- a/src/ifu/ifu.sv +++ b/src/ifu/ifu.sv @@ -247,7 +247,7 @@ module ifu import cvw::*; #(parameter cvw_t P) ( .CacheMiss(ICacheMiss), .CacheAccess(ICacheAccess), .ByteMask('0), .BeatCount('0), .SelBusBeat('0), .CacheWriteData('0), - .CacheRW(CacheRWF), .CacheRWNext('0), // CacheRWNext is only used to detect hazards. Not possible with icache + .CacheRW(CacheRWF), .FlushCache('0), .NextSet(PCSpillNextF[11:0]), .PAdr(PCPF), diff --git a/src/lsu/lsu.sv b/src/lsu/lsu.sv index de10f68cd..6417bc573 100644 --- a/src/lsu/lsu.sv +++ b/src/lsu/lsu.sv @@ -322,7 +322,7 @@ module lsu import cvw::*; #(parameter cvw_t P) ( cache #(.P(P), .PA_BITS(P.PA_BITS), .XLEN(P.XLEN), .LINELEN(P.DCACHE_LINELENINBITS), .NUMLINES(P.DCACHE_WAYSIZEINBYTES*8/LINELEN), .NUMWAYS(P.DCACHE_NUMWAYS), .LOGBWPL(LLENLOGBWPL), .WORDLEN(CACHEWORDLEN), .MUXINTERVAL(P.LLEN), .READ_ONLY_CACHE(0)) dcache( - .clk, .reset, .Stall(GatedStallW & ~SelSpillE), .SelBusBeat, .FlushStage(FlushW | IgnoreRequestTLB), .CacheRWNext(MemRWE), // *** change to LSURWE after updating hptw and atomic + .clk, .reset, .Stall(GatedStallW & ~SelSpillE), .SelBusBeat, .FlushStage(FlushW | IgnoreRequestTLB), .CacheRW(SelStoreDelay ? 2'b00 : CacheRWM), .FlushCache(FlushDCache), .NextSet(IEUAdrExtE[11:0]), .PAdr(PAdrM), .ByteMask(ByteMaskSpillM), .BeatCount(BeatCount[AHBWLOGBWPL-1:AHBWLOGBWPL-LLENLOGBWPL]),