Push config for L1LL I Single window-2 prefetcher

This commit is contained in:
Karlis Susters
2023-03-02 15:42:37 +00:00
parent 1d2affc707
commit a52a36e199
2 changed files with 30 additions and 2 deletions

View File

@@ -45,7 +45,7 @@ SIM_LLC_ARBITER_LAT ?=
# default check cache deadlock and rename error
CHECK_DEADLOCK ?= true
RENAME_DEBUG ?= false
INSTR_PREFETCHER_LOCATION ?= L1
INSTR_PREFETCHER_LOCATION ?= L1LL
INSTR_PREFETCHER_TYPE ?= SINGLE_WINDOW
DATA_PREFETCHER_LOCATION ?= NONE
DATA_PREFETCHER_TYPE ?= BLOCK

View File

@@ -139,6 +139,34 @@ module mkSingleWindowPrefetcher(Prefetcher);
endmethod
endmodule
module mkSingleWindowL1LLPrefetcher(Prefetcher);
Integer cacheLinesInRange = 2;
Reg#(LineAddr) rangeEnd <- mkReg(0); //Points to one CLine after end of range
Reg#(LineAddr) nextToAsk <- mkReg(0);
method Action reportAccess(Addr addr, HitOrMiss hitMiss);
let cl = getLineAddr(addr);
if (rangeEnd - fromInteger(cacheLinesInRange) - 1 <= cl &&
cl < rangeEnd) begin
let nextEnd = cl + fromInteger(cacheLinesInRange) + 1;
$display("%t Prefetcher report HIT %h, moving window end to %h", $time, addr, Addr'{nextEnd, '0});
rangeEnd <= nextEnd;
end
else if (hitMiss == MISS) begin
$display("%t Prefetcher report MISS %h", $time, addr);
//Reset window
nextToAsk <= getLineAddr(addr) + 1;
rangeEnd <= getLineAddr(addr) + fromInteger(cacheLinesInRange) + 1;
end
endmethod
method ActionValue#(Addr) getNextPrefetchAddr if (nextToAsk != rangeEnd);
nextToAsk <= nextToAsk + 1;
let retAddr = Addr'{nextToAsk, '0}; //extend cache line address to regular address
$display("%t Prefetcher getNextPrefetchAddr requesting %h", $time, retAddr);
return retAddr;
endmethod
endmodule
typedef struct {
LineAddr rangeEnd;
@@ -1326,7 +1354,7 @@ module mkLLIPrefetcherInL1I(Prefetcher);
`elsif INSTR_PREFETCHER_NEXT_LINE_ON_MISS
let m <- mkNextLineOnMissPrefetcher;
`elsif INSTR_PREFETCHER_SINGLE_WINDOW
let m <- mkSingleWindowPrefetcher;
let m <- mkSingleWindowL1LLPrefetcher;
`elsif INSTR_PREFETCHER_SINGLE_WINDOW_TARGET
let m <- mkBRAMSingleWindowTargetPrefetcher;
`elsif INSTR_PREFETCHER_MULTI_WINDOW