mirror of
https://github.com/openhwgroup/cvw
synced 2025-02-11 06:05:49 +00:00
Made furture progress in the mmu tests.
This commit is contained in:
parent
7e2d150a57
commit
e9649eb1f5
40
wally-pipelined/src/cache/dcache.sv
vendored
40
wally-pipelined/src/cache/dcache.sv
vendored
@ -53,6 +53,7 @@ module dcache
|
|||||||
input logic DTLBMissM,
|
input logic DTLBMissM,
|
||||||
input logic CacheableM,
|
input logic CacheableM,
|
||||||
input logic DTLBWriteM,
|
input logic DTLBWriteM,
|
||||||
|
input logic ITLBWriteF,
|
||||||
// from ptw
|
// from ptw
|
||||||
input logic SelPTW,
|
input logic SelPTW,
|
||||||
input logic WalkerPageFaultM,
|
input logic WalkerPageFaultM,
|
||||||
@ -164,6 +165,7 @@ module dcache
|
|||||||
STATE_PTW_READ_MISS_FETCH_WDV,
|
STATE_PTW_READ_MISS_FETCH_WDV,
|
||||||
STATE_PTW_READ_MISS_FETCH_DONE,
|
STATE_PTW_READ_MISS_FETCH_DONE,
|
||||||
STATE_PTW_READ_MISS_WRITE_CACHE_BLOCK,
|
STATE_PTW_READ_MISS_WRITE_CACHE_BLOCK,
|
||||||
|
STATE_PTW_READ_MISS_EVICT_DIRTY,
|
||||||
STATE_PTW_READ_MISS_READ_WORD,
|
STATE_PTW_READ_MISS_READ_WORD,
|
||||||
STATE_PTW_READ_MISS_READ_WORD_DELAY,
|
STATE_PTW_READ_MISS_READ_WORD_DELAY,
|
||||||
STATE_PTW_ACCESS_AFTER_WALK,
|
STATE_PTW_ACCESS_AFTER_WALK,
|
||||||
@ -604,9 +606,21 @@ module dcache
|
|||||||
STATE_PTW_READY: begin
|
STATE_PTW_READY: begin
|
||||||
// now all output connect to PTW instead of CPU.
|
// now all output connect to PTW instead of CPU.
|
||||||
CommittedM = 1'b1;
|
CommittedM = 1'b1;
|
||||||
|
|
||||||
|
if (ITLBWriteF) begin
|
||||||
|
NextState = STATE_READY;
|
||||||
|
end
|
||||||
|
|
||||||
// return to ready if page table walk completed.
|
// return to ready if page table walk completed.
|
||||||
if (~SelPTW & ~WalkerPageFaultM) begin
|
else if (~SelPTW & ~WalkerPageFaultM & CacheHit & CacheableM & ~ExceptionM) begin
|
||||||
NextState = STATE_PTW_ACCESS_AFTER_WALK;
|
NextState = STATE_PTW_ACCESS_AFTER_WALK;
|
||||||
|
end
|
||||||
|
|
||||||
|
// read or write miss valid cached
|
||||||
|
else if (~SelPTW & ~WalkerPageFaultM & ~CacheHit & CacheableM & ~ExceptionM) begin
|
||||||
|
NextState = STATE_MISS_FETCH_WDV;
|
||||||
|
CntReset = 1'b1;
|
||||||
|
DCacheStall = 1'b1;
|
||||||
|
|
||||||
// read hit valid cached
|
// read hit valid cached
|
||||||
end else if(MemRWM[1] & CacheableM & ~ExceptionM & CacheHit) begin
|
end else if(MemRWM[1] & CacheableM & ~ExceptionM & CacheHit) begin
|
||||||
@ -615,7 +629,7 @@ module dcache
|
|||||||
end
|
end
|
||||||
|
|
||||||
// read miss valid cached
|
// read miss valid cached
|
||||||
else if((MemRWM[1]) & CacheableM & ~ExceptionM & ~CacheHit) begin
|
else if(SelPTW & MemRWM[1] & CacheableM & ~ExceptionM & ~CacheHit) begin
|
||||||
NextState = STATE_PTW_READ_MISS_FETCH_WDV;
|
NextState = STATE_PTW_READ_MISS_FETCH_WDV;
|
||||||
CntReset = 1'b1;
|
CntReset = 1'b1;
|
||||||
DCacheStall = 1'b1;
|
DCacheStall = 1'b1;
|
||||||
@ -647,9 +661,29 @@ module dcache
|
|||||||
SelAdrM = 1'b1;
|
SelAdrM = 1'b1;
|
||||||
CntReset = 1'b1;
|
CntReset = 1'b1;
|
||||||
CommittedM = 1'b1;
|
CommittedM = 1'b1;
|
||||||
NextState = STATE_PTW_READ_MISS_WRITE_CACHE_BLOCK;
|
CntReset = 1'b1;
|
||||||
|
if(VictimDirty) begin
|
||||||
|
NextState = STATE_PTW_READ_MISS_EVICT_DIRTY;
|
||||||
|
end else begin
|
||||||
|
NextState = STATE_PTW_READ_MISS_WRITE_CACHE_BLOCK;
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
STATE_PTW_READ_MISS_EVICT_DIRTY: begin
|
||||||
|
DCacheStall = 1'b1;
|
||||||
|
PreCntEn = 1'b1;
|
||||||
|
AHBWrite = 1'b1;
|
||||||
|
SelAdrM = 1'b1;
|
||||||
|
CommittedM = 1'b1;
|
||||||
|
SelEvict = 1'b1;
|
||||||
|
if( FetchCountFlag & AHBAck) begin
|
||||||
|
NextState = STATE_PTW_READ_MISS_WRITE_CACHE_BLOCK;
|
||||||
|
end else begin
|
||||||
|
NextState = STATE_PTW_READ_MISS_EVICT_DIRTY;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
STATE_PTW_READ_MISS_WRITE_CACHE_BLOCK: begin
|
STATE_PTW_READ_MISS_WRITE_CACHE_BLOCK: begin
|
||||||
SRAMBlockWriteEnableM = 1'b1;
|
SRAMBlockWriteEnableM = 1'b1;
|
||||||
DCacheStall = 1'b1;
|
DCacheStall = 1'b1;
|
||||||
|
@ -338,6 +338,7 @@ module lsu
|
|||||||
.DTLBMissM(DTLBMissM),
|
.DTLBMissM(DTLBMissM),
|
||||||
.CacheableM(CacheableMtoDCache),
|
.CacheableM(CacheableMtoDCache),
|
||||||
.DTLBWriteM(DTLBWriteM),
|
.DTLBWriteM(DTLBWriteM),
|
||||||
|
.ITLBWriteF(ITLBWriteF),
|
||||||
.SelPTW(SelPTW),
|
.SelPTW(SelPTW),
|
||||||
.WalkerPageFaultM(WalkerPageFaultM),
|
.WalkerPageFaultM(WalkerPageFaultM),
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user