diff --git a/wally-pipelined/src/cache/dcache.sv b/wally-pipelined/src/cache/dcache.sv index f33385df3..9f2c06521 100644 --- a/wally-pipelined/src/cache/dcache.sv +++ b/wally-pipelined/src/cache/dcache.sv @@ -44,6 +44,7 @@ module dcache input logic [`XLEN-1:0] WriteDataM, output logic [`XLEN-1:0] ReadDataW, output logic DCacheStall, + output logic CommittedM, // inputs from TLB and PMA/P input logic FaultM, @@ -311,12 +312,6 @@ module dcache typedef enum {STATE_READY, - STATE_READ_MISS_FETCH_WDV, - STATE_READ_MISS_FETCH_DONE, - STATE_READ_MISS_CHECK_EVICTED_DIRTY, - STATE_READ_MISS_WRITE_BACK_EVICTED_BLOCK, - STATE_READ_MISS_WRITE_CACHE_BLOCK, - STATE_READ_MISS_READ_WORD, STATE_MISS_FETCH_WDV, STATE_MISS_FETCH_DONE, STATE_MISS_EVICT_DIRTY, @@ -397,7 +392,8 @@ module dcache AHBRead = 1'b0; AHBWrite = 1'b0; SelAMOWrite = 1'b0; - + CommittedM = 1'b0; + case (CurrState) STATE_READY: begin // TLB Miss @@ -466,6 +462,8 @@ module dcache PreCntEn = 1'b1; AHBRead = 1'b1; SelAdrM = 1'b1; + CommittedM = 1'b1; + if (FetchCountFlag & AHBAck) begin NextState = STATE_MISS_FETCH_DONE; end else begin @@ -477,6 +475,7 @@ module dcache DCacheStall = 1'b1; SelAdrM = 1'b1; CntReset = 1'b1; + CommittedM = 1'b1; if(VictimDirty) begin NextState = STATE_MISS_EVICT_DIRTY; end else begin @@ -491,11 +490,13 @@ module dcache SelAdrM = 1'b1; SetValidM = 1'b1; ClearDirtyM = 1'b1; + CommittedM = 1'b1; end STATE_MISS_READ_WORD: begin SelAdrM = 1'b1; DCacheStall = 1'b1; + CommittedM = 1'b1; if (MemRWM[1]) begin NextState = STATE_MISS_READ_WORD_DELAY; // delay state is required as the read signal MemRWM[1] is still high when we @@ -508,6 +509,7 @@ module dcache STATE_MISS_READ_WORD_DELAY: begin SelAdrM = 1'b1; NextState = STATE_READY; + CommittedM = 1'b1; end STATE_MISS_WRITE_WORD: begin @@ -516,6 +518,7 @@ module dcache SelAdrM = 1'b1; NextState = STATE_READY; DCacheStall = 1'b0; + CommittedM = 1'b1; end STATE_MISS_EVICT_DIRTY: begin @@ -523,6 +526,7 @@ module dcache PreCntEn = 1'b1; AHBWrite = 1'b1; SelAdrM = 1'b1; + CommittedM = 1'b1; if( FetchCountFlag & AHBAck) begin NextState = STATE_MISS_WRITE_CACHE_BLOCK; end else begin @@ -548,6 +552,7 @@ module dcache STATE_UNCACHED_WRITE : begin DCacheStall = 1'b1; AHBWrite = 1'b1; + CommittedM = 1'b1; if(AHBAck) begin NextState = STATE_UNCACHED_WRITE_DONE; end else begin @@ -556,6 +561,7 @@ module dcache end STATE_UNCACHED_WRITE_DONE: begin + CommittedM = 1'b1; NextState = STATE_READY; end default: begin diff --git a/wally-pipelined/src/lsu/lsu.sv b/wally-pipelined/src/lsu/lsu.sv index 9ed573a9d..7a02ff2fa 100644 --- a/wally-pipelined/src/lsu/lsu.sv +++ b/wally-pipelined/src/lsu/lsu.sv @@ -99,7 +99,9 @@ module lsu logic DTLBPageFaultM; logic MemAccessM; +/* -----\/----- EXCLUDED -----\/----- logic preCommittedM; + -----/\----- EXCLUDED -----/\----- */ typedef enum {STATE_READY, STATE_FETCH, @@ -135,7 +137,6 @@ module lsu logic [`XLEN-1:0] MemAdrEtoDCache; logic [`XLEN-1:0] ReadDataWfromDCache; logic StallWtoDCache; - logic CommittedMfromDCache; logic SquashSCWfromDCache; logic DataMisalignedMfromDCache; logic HPTWReady; @@ -187,7 +188,6 @@ module lsu .MemAdrM(MemAdrM), .StallW(StallW), .ReadDataW(ReadDataW), - .CommittedM(CommittedM), .SquashSCW(SquashSCW), .DataMisalignedM(DataMisalignedM), .LSUStall(LSUStall), @@ -198,7 +198,6 @@ module lsu .AtomicMtoDCache(AtomicMtoDCache), .MemAdrMtoDCache(MemAdrMtoDCache), .StallWtoDCache(StallWtoDCache), - .CommittedMfromDCache(CommittedMfromDCache), .SquashSCWfromDCache(SquashSCWfromDCache), .DataMisalignedMfromDCache(DataMisalignedMfromDCache), .ReadDataWfromDCache(ReadDataWfromDCache), @@ -319,6 +318,7 @@ module lsu .WriteDataM(WriteDataM), .ReadDataW(ReadDataWfromDCache), .DCacheStall(DCacheStall), + .CommittedM(CommittedM), .FaultM(LoadMisalignedFaultM | StoreMisalignedFaultM), // this is wrong needs to be all faults. .DTLBMissM(DTLBMissM), .CacheableM(CacheableM), diff --git a/wally-pipelined/src/lsu/lsuArb.sv b/wally-pipelined/src/lsu/lsuArb.sv index 83ab93be0..62d8b35af 100644 --- a/wally-pipelined/src/lsu/lsuArb.sv +++ b/wally-pipelined/src/lsu/lsuArb.sv @@ -45,7 +45,6 @@ module lsuArb input logic StallW, // to CPU output logic [`XLEN-1:0] ReadDataW, - output logic CommittedM, output logic SquashSCW, output logic DataMisalignedM, output logic LSUStall, @@ -58,7 +57,6 @@ module lsuArb output logic [`XLEN-1:0] MemAdrMtoDCache, output logic StallWtoDCache, // from LSU - input logic CommittedMfromDCache, input logic SquashSCWfromDCache, input logic DataMisalignedMfromDCache, input logic [`XLEN-1:0] ReadDataWfromDCache, @@ -149,7 +147,6 @@ module lsuArb assign ReadDataW = SelPTW ? `XLEN'b0 : ReadDataWfromDCache; // probably can avoid this demux assign HPTWReadPTE = SelPTW ? ReadDataWfromDCache : `XLEN'b0 ; // probably can avoid this demux - assign CommittedM = SelPTW ? 1'b0 : CommittedMfromDCache; assign SquashSCW = SelPTW ? 1'b0 : SquashSCWfromDCache; assign DataMisalignedM = SelPTW ? 1'b0 : DataMisalignedMfromDCache; // *** need to rename DcacheStall and Datastall.