added handler for delta to handle delta being all 1's

This commit is contained in:
2026-03-19 13:22:01 +00:00
parent 34e84f2926
commit 3fd9a03aa6
5 changed files with 2147 additions and 2591 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -918,7 +918,7 @@ module mkCore#(CoreId coreId)(Core);
// incr cycle count // incr cycle count
(* fire_when_enabled, no_implicit_conditions *) (* fire_when_enabled, no_implicit_conditions *)
rule incCycleCnt(doStats); rule incCycleCnt(doStats);
$display("calling cycle"); // $display("calling cycle");
cycleCnt.incr(1); cycleCnt.incr(1);
endrule endrule
@@ -963,7 +963,6 @@ module mkCore#(CoreId coreId)(Core);
// broadcast whether we should collect data // broadcast whether we should collect data
rule broadcastDoStats; rule broadcastDoStats;
let stats = csrf.doPerfStats; let stats = csrf.doPerfStats;
$display("[stats] enabled %0d", csrf.doPerfStats);
doStats <= stats; doStats <= stats;
iMem.perf.setStatus(stats); iMem.perf.setStatus(stats);
dMem.perf.setStatus(stats); dMem.perf.setStatus(stats);

View File

@@ -653,8 +653,15 @@ module mkMemExePipeline#(MemExeInput inIfc)(MemExePipeline);
`endif `endif
// Test delta value read from the pointer // Test delta value read from the pointer
Bit#(25) delta = decodeDelta(x.vaddr); Bit#(25) delta = decodeDelta(x.vaddr);
$display("Decoded delta = %0d", delta); $display("Decoded delta from register = %0d", delta);
x.vaddr = encodeDelta(x.vaddr, 0);
// 33554431 is 2^25 - 1 (all ones)
if (delta == 33554431) begin
delta = 0;
end else begin
x.vaddr = encodeDelta(x.vaddr, 0);
end
// x.vaddr = encodeDelta(x.vaddr, 0);
// x.vaddr = (x.vaddr >> 25) << 25; // x.vaddr = (x.vaddr >> 25) << 25;
// x.vaddr = (x.vaddr >> 25) << 25; // x.vaddr = (x.vaddr >> 25) << 25;

View File

@@ -244,7 +244,7 @@ function CapPipe capModify(CapPipe a, CapPipe b, CapModifyFunc func);
// TODO: Delta handler function // TODO: Delta handler function
CapPipe res = (case(func) matches CapPipe res = (case(func) matches
tagged ModifyOffset .offsetOp : tagged ModifyOffset .offsetOp :
//modifyOffset(a_mut, getAddr(b), offsetOp == IncOffset).value; // modifyOffset(a_mut, getAddr(b), offsetOp == IncOffset).value;
// To test this // To test this
encodeDelta(a_mut, getAddr(b)); encodeDelta(a_mut, getAddr(b));
tagged SetBounds .boundsOp : tagged SetBounds .boundsOp :