mirror of
https://github.com/openhwgroup/cvw
synced 2025-02-11 06:05:49 +00:00
added delayed MIP signal
This commit is contained in:
parent
cc41d40d61
commit
a924e79e26
@ -38,7 +38,7 @@
|
|||||||
|
|
||||||
module testbench();
|
module testbench();
|
||||||
|
|
||||||
parameter waveOnICount = `BUSYBEAR*140000 + `BUILDROOT*8700000; // # of instructions at which to turn on waves in graphical sim
|
parameter waveOnICount = `BUSYBEAR*140000 + `BUILDROOT*3100000; // # of instructions at which to turn on waves in graphical sim
|
||||||
string ProgramAddrMapFile, ProgramLabelMapFile;
|
string ProgramAddrMapFile, ProgramLabelMapFile;
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
@ -137,6 +137,7 @@ module testbench();
|
|||||||
integer NumCSRWIndex;
|
integer NumCSRWIndex;
|
||||||
integer NumCSRPostWIndex;
|
integer NumCSRPostWIndex;
|
||||||
logic [`XLEN-1:0] InstrCountW;
|
logic [`XLEN-1:0] InstrCountW;
|
||||||
|
integer RequestDelayedMIP;
|
||||||
|
|
||||||
// ------
|
// ------
|
||||||
// Macros
|
// Macros
|
||||||
@ -246,9 +247,16 @@ module testbench();
|
|||||||
MarkerIndex += 2;
|
MarkerIndex += 2;
|
||||||
// match MIP to QEMU's because interrupts are imprecise
|
// match MIP to QEMU's because interrupts are imprecise
|
||||||
if(ExpectedCSRArrayM[NumCSRM].substr(0, 2) == "mip") begin
|
if(ExpectedCSRArrayM[NumCSRM].substr(0, 2) == "mip") begin
|
||||||
$display("%tns: Updating MIP to %x",$time,ExpectedCSRArrayValueM[NumCSRM]);
|
$display("%tn: ExpectedCSRArrayM[7] (MEPC) = %x",$time,ExpectedCSRArrayM[7]);
|
||||||
MIPexpected = ExpectedCSRArrayValueM[NumCSRM];
|
$display("%tn: ExpectedPCM = %x",$time,ExpectedPCM);
|
||||||
force dut.hart.priv.csr.genblk1.csri.MIP_REGW = MIPexpected;
|
// if PC does not equal MEPC, request delayed MIP is True
|
||||||
|
if(ExpectedPCM != ExpectedCSRArrayM[7]) begin
|
||||||
|
RequestDelayedMIP = 1;
|
||||||
|
end else begin
|
||||||
|
$display("%tns: Updating MIP to %x",$time,ExpectedCSRArrayValueM[NumCSRM]);
|
||||||
|
MIPexpected = ExpectedCSRArrayValueM[NumCSRM];
|
||||||
|
force dut.hart.priv.csr.genblk1.csri.MIP_REGW = MIPexpected;
|
||||||
|
end
|
||||||
end
|
end
|
||||||
NumCSRM++;
|
NumCSRM++;
|
||||||
end
|
end
|
||||||
@ -326,6 +334,12 @@ module testbench();
|
|||||||
|
|
||||||
// step2: make all checks in the write back stage.
|
// step2: make all checks in the write back stage.
|
||||||
always @(negedge clk) begin
|
always @(negedge clk) begin
|
||||||
|
if(RequestDelayedMIP) begin
|
||||||
|
$display("%tns: Updating MIP to %x",$time,ExpectedCSRArrayValueW[NumCSRM]);
|
||||||
|
MIPexpected = ExpectedCSRArrayValueW[NumCSRM];
|
||||||
|
force dut.hart.priv.csr.genblk1.csri.MIP_REGW = MIPexpected;
|
||||||
|
RequestDelayedMIP = 0;
|
||||||
|
end
|
||||||
// always check PC, instruction bits
|
// always check PC, instruction bits
|
||||||
if (checkInstrW) begin
|
if (checkInstrW) begin
|
||||||
InstrCountW += 1;
|
InstrCountW += 1;
|
||||||
|
Loading…
Reference in New Issue
Block a user