Merge remote-tracking branch 'karlis/CHERI' into ks980-prefetch

This commit is contained in:
Jonathan Woodruff
2023-04-25 12:10:58 +00:00
2 changed files with 11 additions and 11 deletions

View File

@@ -46,7 +46,7 @@ SIM_LLC_ARBITER_LAT ?=
CHECK_DEADLOCK ?= true
RENAME_DEBUG ?= false
INSTR_PREFETCHER_LOCATION ?= L1
INSTR_PREFETCHER_TYPE ?= MULTI_WINDOW_TARGET
INSTR_PREFETCHER_TYPE ?= SINGLE_WINDOW_TARGET
DATA_PREFETCHER_LOCATION ?= NONE
DATA_PREFETCHER_TYPE ?= MARKOV_ON_HIT_2

View File

@@ -739,17 +739,12 @@ module mkBRAMSingleWindowTargetPrefetcher(Prefetcher) provisos
Reg#(LineAddr) nextToAsk <- mkReg(0);
Reg#(LineAddr) lastChildRequest <- mkReg(0);
TargetTableBRAM#(1024, 128) targetTable <- mkTargetTableBRAM;
FIFOF#(LineAddr) targetTableReadResp <- mkBypassFIFOF;
TargetTableBRAM#(8192, 2048) targetTable <- mkTargetTableBRAM;
Fifo#(1, LineAddr) targetTableReadResp <- mkOverflowBypassFifo;
Reg#(Vector#(numLastRequests, Bit#(32))) lastTargetRequests <- mkReg(replicate(0));
Reg#(Vector#(numLastRequests, Bit#(16))) lastTargetRequests <- mkReg(replicate(0));
rule sendReadReq;
if (!elem(hash(lastChildRequest), lastTargetRequests)) begin
targetTable.readReq(lastChildRequest);
$display("%t Prefetcher sending target read request for %h", $time, lastChildRequest);
lastTargetRequests <= shiftInAt0(lastTargetRequests, hash(lastChildRequest));
end
endrule
rule getReadResp;
@@ -782,6 +777,13 @@ module mkBRAMSingleWindowTargetPrefetcher(Prefetcher) provisos
$display("%t Prefetcher add target entry from addr %h to addr %h", $time, Addr'{lastChildRequest, '0}, addr);
targetTable.writeReq(lastChildRequest, cl);
end
// Send target request if not in last 16 hits.
if (!elem(hash(cl), lastTargetRequests)) begin
targetTable.readReq(cl);
$display("%t Prefetcher sending target read request for %h", $time, cl);
lastTargetRequests <= shiftInAt0(lastTargetRequests, hash(cl));
end
lastChildRequest <= cl;
endmethod
@@ -1473,8 +1475,6 @@ provisos(
Int#(16) strideToUse = signExtend(se.stride);
if (abs(strideToUse) < cLineSize) begin
strideToUse = (strideToUse < 0) ? -cLineSize : cLineSize;
strideToUse = (strideToUse < 0) ? -cLineSize : cLineSize;
strideToUse = (strideToUse < 0) ? -cLineSize : cLineSize;
end
Bit#(16) jumpDist = pack(strideToUse) * zeroExtend(cLinesPrefetched+1);
let reqAddr = addr + signExtend(jumpDist);