mirror of
https://github.com/openhwgroup/cvw
synced 2025-02-11 06:05:49 +00:00
Merge branch 'main' of https://github.com/davidharrishmc/riscv-wally into main
This commit is contained in:
commit
077662bfa1
@ -81,7 +81,7 @@
|
|||||||
`define BOOTTIM_RANGE 56'h00000FFF
|
`define BOOTTIM_RANGE 56'h00000FFF
|
||||||
`define TIM_SUPPORTED 1'b1
|
`define TIM_SUPPORTED 1'b1
|
||||||
`define TIM_BASE 56'h80000000
|
`define TIM_BASE 56'h80000000
|
||||||
`define TIM_RANGE 56'h007FFFFF
|
`define TIM_RANGE 56'h7FFFFFFF
|
||||||
`define CLINT_SUPPORTED 1'b1
|
`define CLINT_SUPPORTED 1'b1
|
||||||
`define CLINT_BASE 56'h02000000
|
`define CLINT_BASE 56'h02000000
|
||||||
`define CLINT_RANGE 56'h0000FFFF
|
`define CLINT_RANGE 56'h0000FFFF
|
||||||
|
8
wally-pipelined/src/cache/dcache.sv
vendored
8
wally-pipelined/src/cache/dcache.sv
vendored
@ -46,6 +46,8 @@ module dcache
|
|||||||
output logic [`XLEN-1:0] ReadDataM,
|
output logic [`XLEN-1:0] ReadDataM,
|
||||||
output logic DCacheStall,
|
output logic DCacheStall,
|
||||||
output logic CommittedM,
|
output logic CommittedM,
|
||||||
|
output logic DCacheMiss,
|
||||||
|
output logic DCacheAccess,
|
||||||
|
|
||||||
// inputs from TLB and PMA/P
|
// inputs from TLB and PMA/P
|
||||||
input logic ExceptionM,
|
input logic ExceptionM,
|
||||||
@ -437,6 +439,8 @@ module dcache
|
|||||||
CommittedM = 1'b0;
|
CommittedM = 1'b0;
|
||||||
SelUncached = 1'b0;
|
SelUncached = 1'b0;
|
||||||
SelEvict = 1'b0;
|
SelEvict = 1'b0;
|
||||||
|
DCacheAccess = 1'b0;
|
||||||
|
DCacheMiss = 1'b0;
|
||||||
|
|
||||||
case (CurrState)
|
case (CurrState)
|
||||||
STATE_READY: begin
|
STATE_READY: begin
|
||||||
@ -472,6 +476,7 @@ module dcache
|
|||||||
// read hit valid cached
|
// read hit valid cached
|
||||||
else if(MemRWM[1] & CacheableM & ~(ExceptionM | PendingInterruptM) & CacheHit & ~DTLBMissM) begin
|
else if(MemRWM[1] & CacheableM & ~(ExceptionM | PendingInterruptM) & CacheHit & ~DTLBMissM) begin
|
||||||
DCacheStall = 1'b0;
|
DCacheStall = 1'b0;
|
||||||
|
DCacheAccess = 1'b1;
|
||||||
|
|
||||||
if(StallW) begin
|
if(StallW) begin
|
||||||
NextState = STATE_CPU_BUSY;
|
NextState = STATE_CPU_BUSY;
|
||||||
@ -485,6 +490,7 @@ module dcache
|
|||||||
DCacheStall = 1'b0;
|
DCacheStall = 1'b0;
|
||||||
SRAMWordWriteEnableM = 1'b1;
|
SRAMWordWriteEnableM = 1'b1;
|
||||||
SetDirtyM = 1'b1;
|
SetDirtyM = 1'b1;
|
||||||
|
DCacheStall = 1'b1;
|
||||||
|
|
||||||
if(StallW) begin
|
if(StallW) begin
|
||||||
NextState = STATE_CPU_BUSY;
|
NextState = STATE_CPU_BUSY;
|
||||||
@ -497,6 +503,8 @@ module dcache
|
|||||||
NextState = STATE_MISS_FETCH_WDV;
|
NextState = STATE_MISS_FETCH_WDV;
|
||||||
CntReset = 1'b1;
|
CntReset = 1'b1;
|
||||||
DCacheStall = 1'b1;
|
DCacheStall = 1'b1;
|
||||||
|
DCacheAccess = 1'b1;
|
||||||
|
DCacheMiss = 1'b1;
|
||||||
end
|
end
|
||||||
// uncached write
|
// uncached write
|
||||||
else if(MemRWM[0] & ~CacheableM & ~(ExceptionM | PendingInterruptM) & ~DTLBMissM) begin
|
else if(MemRWM[0] & ~CacheableM & ~(ExceptionM | PendingInterruptM) & ~DTLBMissM) begin
|
||||||
|
@ -103,7 +103,6 @@ module fpu (
|
|||||||
logic [63:0] FMAResM, FMAResW;
|
logic [63:0] FMAResM, FMAResW;
|
||||||
logic [4:0] FMAFlgM, FMAFlgW;
|
logic [4:0] FMAFlgM, FMAFlgW;
|
||||||
|
|
||||||
|
|
||||||
logic [63:0] ReadResW;
|
logic [63:0] ReadResW;
|
||||||
|
|
||||||
// add/cvt signals
|
// add/cvt signals
|
||||||
@ -132,7 +131,6 @@ module fpu (
|
|||||||
logic [63:0] FPUResultW;
|
logic [63:0] FPUResultW;
|
||||||
logic [4:0] FPUFlagsW;
|
logic [4:0] FPUFlagsW;
|
||||||
|
|
||||||
|
|
||||||
//DECODE STAGE
|
//DECODE STAGE
|
||||||
|
|
||||||
// top-level controller for FPU
|
// top-level controller for FPU
|
||||||
@ -159,7 +157,6 @@ module fpu (
|
|||||||
{FRegWriteD, FResultSelD, FResSelD, FIntResSelD, FrmD, FmtD, FOpCtrlD, FWriteIntD},
|
{FRegWriteD, FResultSelD, FResSelD, FIntResSelD, FrmD, FmtD, FOpCtrlD, FWriteIntD},
|
||||||
{FRegWriteE, FResultSelE, FResSelE, FIntResSelE, FrmE, FmtE, FOpCtrlE, FWriteIntE});
|
{FRegWriteE, FResultSelE, FResSelE, FIntResSelE, FrmE, FmtE, FOpCtrlE, FWriteIntE});
|
||||||
|
|
||||||
|
|
||||||
//EXECUTION STAGE
|
//EXECUTION STAGE
|
||||||
|
|
||||||
// Hazard unit for FPU
|
// Hazard unit for FPU
|
||||||
@ -171,11 +168,19 @@ module fpu (
|
|||||||
mux3 #(64) fyemux(FRD2E, FPUResultW, FResM, FForwardYE, FSrcYE);
|
mux3 #(64) fyemux(FRD2E, FPUResultW, FResM, FForwardYE, FSrcYE);
|
||||||
mux3 #(64) fzemux(FRD3E, FPUResultW, FResM, FForwardZE, FSrcZE);
|
mux3 #(64) fzemux(FRD3E, FPUResultW, FResM, FForwardZE, FSrcZE);
|
||||||
|
|
||||||
unpacking unpacking(.X(FSrcXE), .Y(FSrcYE), .Z(FSrcZE), .FOpCtrlE(FOpCtrlE[2:0]), .FmtE, .XSgnE, .YSgnE, .ZSgnE, .XExpE, .YExpE, .ZExpE, .XFracE, .YFracE, .ZFracE, .XAssumed1E, .YAssumed1E, .ZAssumed1E, .XNaNE, .YNaNE, .ZNaNE, .XSNaNE, .YSNaNE, .ZSNaNE, .XDenormE, .YDenormE, .ZDenormE, .XZeroE, .YZeroE, .ZZeroE, .BiasE, .XInfE, .YInfE, .ZInfE, .XExpMaxE, .XNormE);
|
unpacking unpacking(.X(FSrcXE), .Y(FSrcYE), .Z(FSrcZE),
|
||||||
|
.FOpCtrlE(FOpCtrlE[2:0]), .FmtE, .XSgnE, .YSgnE,
|
||||||
|
.ZSgnE, .XExpE, .YExpE, .ZExpE, .XFracE, .YFracE, .ZFracE,
|
||||||
|
.XAssumed1E, .YAssumed1E, .ZAssumed1E, .XNaNE, .YNaNE, .ZNaNE,
|
||||||
|
.XSNaNE, .YSNaNE, .ZSNaNE, .XDenormE, .YDenormE, .ZDenormE,
|
||||||
|
.XZeroE, .YZeroE, .ZZeroE, .BiasE, .XInfE, .YInfE, .ZInfE, .XExpMaxE, .XNormE);
|
||||||
// first of two-stage instance of floating-point fused multiply-add unit
|
// first of two-stage instance of floating-point fused multiply-add unit
|
||||||
fma fma (.clk, .reset, .FlushM, .StallM,
|
fma fma (.clk, .reset, .FlushM, .StallM,
|
||||||
.XSgnE, .YSgnE, .ZSgnE, .XExpE, .YExpE, .ZExpE, .XFracE, .YFracE, .ZFracE, .XAssumed1E, .YAssumed1E, .ZAssumed1E, .XDenormE, .YDenormE, .ZDenormE, .XZeroE, .YZeroE, .ZZeroE, .BiasE,
|
.XSgnE, .YSgnE, .ZSgnE, .XExpE, .YExpE, .ZExpE, .XFracE, .YFracE, .
|
||||||
.XSgnM, .YSgnM, .ZSgnM, .XExpM, .YExpM, .ZExpM, .XFracM, .YFracM, .ZFracM, .XNaNM, .YNaNM, .ZNaNM, .XZeroM, .YZeroM, .ZZeroM, .XInfM, .YInfM, .ZInfM, .XSNaNM, .YSNaNM, .ZSNaNM,
|
ZFracE, .XAssumed1E, .YAssumed1E, .ZAssumed1E, .XDenormE, .YDenormE,
|
||||||
|
.ZDenormE, .XZeroE, .YZeroE, .ZZeroE, .BiasE,
|
||||||
|
.XSgnM, .YSgnM, .ZSgnM, .XExpM, .YExpM, .ZExpM, .XFracM,
|
||||||
|
.YFracM, .ZFracM, .XNaNM, .YNaNM, .ZNaNM, .XZeroM, .YZeroM, .ZZeroM, .XInfM, .YInfM, .ZInfM, .XSNaNM, .YSNaNM, .ZSNaNM,
|
||||||
// .FSrcXE, .FSrcYE, .FSrcZE, .FSrcXM, .FSrcYM, .FSrcZM,
|
// .FSrcXE, .FSrcYE, .FSrcZE, .FSrcXM, .FSrcYM, .FSrcZM,
|
||||||
.FOpCtrlE(FOpCtrlE[2:0]), .FOpCtrlM(FOpCtrlM[2:0]),
|
.FOpCtrlE(FOpCtrlE[2:0]), .FOpCtrlM(FOpCtrlM[2:0]),
|
||||||
.FmtE, .FmtM, .FrmM, .FMAFlgM, .FMAResM);
|
.FmtE, .FmtM, .FrmM, .FMAFlgM, .FMAResM);
|
||||||
@ -196,18 +201,24 @@ module fpu (
|
|||||||
.en(1'b1), .clear(FDivSqrtDoneE),
|
.en(1'b1), .clear(FDivSqrtDoneE),
|
||||||
.reset(reset), .clk(HoldInputs));
|
.reset(reset), .clk(HoldInputs));
|
||||||
//*** add round to nearest ties to max magnitude
|
//*** add round to nearest ties to max magnitude
|
||||||
fpdiv fdivsqrt (.op1(DivInput1E), .op2(DivInput2E), .done(FDivSqrtDoneE), .rm(FrmE[1:0]), .op_type(FOpCtrlE[0]), .P(~FmtE), .FDivBusyE, .HoldInputs,
|
fpdiv fdivsqrt (.op1(DivInput1E), .op2(DivInput2E), .done(FDivSqrtDoneE), .rm(FrmE[1:0]), .op_type(FOpCtrlE[0]),
|
||||||
.OvEn(1'b1), .UnEn(1'b1), .start(FDivStartE), .reset, .clk(~clk), .AS_Result(FDivResultM), .Flags(FDivSqrtFlgM));
|
.P(~FmtE), .FDivBusyE, .HoldInputs,
|
||||||
|
.OvEn(1'b1), .UnEn(1'b1),
|
||||||
|
.start(FDivStartE), .reset, .clk(~clk), .AS_Result(FDivResultM), .Flags(FDivSqrtFlgM));
|
||||||
|
|
||||||
// .DivOpType(FOpCtrlE[0]), .clk(fpdivClk), .FmtE(~FmtE), .DivInput1E, .DivInput2E,
|
// .DivOpType(FOpCtrlE[0]), .clk(fpdivClk), .FmtE(~FmtE), .DivInput1E, .DivInput2E,
|
||||||
// .FrmE, .DivOvEn(1'b1), .DivUnEn(1'b1), .FDivStartE, .FDivResultM, .FDivSqrtFlgM,
|
// .FrmE, .DivOvEn(1'b1), .DivUnEn(1'b1), .FDivStartE, .FDivResultM, .FDivSqrtFlgM,
|
||||||
// .FDivSqrtDoneE, .FDivBusyE, .HoldInputs, .reset);
|
// .FDivSqrtDoneE, .FDivBusyE, .HoldInputs, .reset);
|
||||||
// assign FDivBusyE = 0;
|
// assign FDivBusyE = 0;
|
||||||
|
|
||||||
// first of two-stage instance of floating-point add/cvt unit
|
// first of two-stage instance of floating-point add/cvt unit
|
||||||
faddcvt faddcvt (.clk, .reset, .FlushM, .StallM, .FrmM, .FOpCtrlM, .FmtE, .FmtM,
|
faddcvt faddcvt (.clk, .reset, .FlushM, .StallM, .FrmM, .FOpCtrlM, .FmtE, .FmtM,
|
||||||
.FSrcXE, .FSrcYE, .FOpCtrlE, .FAddResM, .FAddFlgM);
|
.FSrcXE, .FSrcYE, .FOpCtrlE, .FAddResM, .FAddFlgM);
|
||||||
|
|
||||||
// first and only instance of floating-point comparator
|
// first and only instance of floating-point comparator
|
||||||
fcmp fcmp (.op1({XSgnE,XExpE,XFracE}), .op2({YSgnE,YExpE,YFracE}), .FSrcXE, .FSrcYE, .FOpCtrlE(FOpCtrlE[2:0]), .FmtE, .Invalid(CmpNVE), .CmpResE, .XNaNE, .YNaNE, .XZeroE, .YZeroE);
|
fcmp fcmp (.op1({XSgnE,XExpE,XFracE}), .op2({YSgnE,YExpE,YFracE}), .FSrcXE,
|
||||||
|
.FSrcYE, .FOpCtrlE(FOpCtrlE[2:0]), .FmtE,
|
||||||
|
.Invalid(CmpNVE), .CmpResE, .XNaNE, .YNaNE, .XZeroE, .YZeroE);
|
||||||
|
|
||||||
// first and only instance of floating-point sign converter
|
// first and only instance of floating-point sign converter
|
||||||
fsgn fsgn (.SgnOpCodeE(FOpCtrlE[1:0]), .XSgnE, .YSgnE, .XExpE, .XFracE, .FmtE, .SgnResE, .SgnNVE, .XExpMaxE);
|
fsgn fsgn (.SgnOpCodeE(FOpCtrlE[1:0]), .XSgnE, .YSgnE, .XExpE, .XFracE, .FmtE, .SgnResE, .SgnNVE, .XExpMaxE);
|
||||||
@ -215,7 +226,6 @@ module fpu (
|
|||||||
// first and only instance of floating-point classify unit
|
// first and only instance of floating-point classify unit
|
||||||
fclassify fclassify (.XSgnE, .XFracE, .XDenormE, .XZeroE, .XNaNE, .XInfE, .XNormE, .XSNaNE, .ClassResE);
|
fclassify fclassify (.XSgnE, .XFracE, .XDenormE, .XZeroE, .XNaNE, .XInfE, .XNormE, .XSNaNE, .ClassResE);
|
||||||
|
|
||||||
|
|
||||||
fcvt fcvt (.XSgnE, .XExpE, .XFracE, .XAssumed1E, .XZeroE, .XNaNE, .XInfE, .XDenormE, .BiasE, .SrcAE, .FOpCtrlE, .FmtE, .FrmE, .CvtResE, .CvtFlgE);
|
fcvt fcvt (.XSgnE, .XExpE, .XFracE, .XAssumed1E, .XZeroE, .XNaNE, .XInfE, .XDenormE, .BiasE, .SrcAE, .FOpCtrlE, .FmtE, .FrmE, .CvtResE, .CvtFlgE);
|
||||||
|
|
||||||
// output for store instructions
|
// output for store instructions
|
||||||
@ -234,8 +244,6 @@ module fpu (
|
|||||||
{XZeroE, YZeroE, ZZeroE, XInfE, YInfE, ZInfE, XNaNE, YNaNE, ZNaNE, XSNaNE, YSNaNE, ZSNaNE},
|
{XZeroE, YZeroE, ZZeroE, XInfE, YInfE, ZInfE, XNaNE, YNaNE, ZNaNE, XSNaNE, YSNaNE, ZSNaNE},
|
||||||
{XZeroM, YZeroM, ZZeroM, XInfM, YInfM, ZInfM, XNaNM, YNaNM, ZNaNM, XSNaNM, YSNaNM, ZSNaNM});
|
{XZeroM, YZeroM, ZZeroM, XInfM, YInfM, ZInfM, XNaNM, YNaNM, ZNaNM, XSNaNM, YSNaNM, ZSNaNM});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
flopenrc #(1) EMRegCmp1(clk, reset, FlushM, ~StallM, CmpNVE, CmpNVM);
|
flopenrc #(1) EMRegCmp1(clk, reset, FlushM, ~StallM, CmpNVE, CmpNVM);
|
||||||
flopenrc #(64) EMRegCmp2(clk, reset, FlushM, ~StallM, CmpResE, CmpResM);
|
flopenrc #(64) EMRegCmp2(clk, reset, FlushM, ~StallM, CmpResE, CmpResM);
|
||||||
|
|
||||||
@ -266,15 +274,10 @@ module fpu (
|
|||||||
// M/W pipe registers
|
// M/W pipe registers
|
||||||
//*****************
|
//*****************
|
||||||
flopenrc #(64) MWRegFma1(clk, reset, FlushW, ~StallW, FMAResM, FMAResW);
|
flopenrc #(64) MWRegFma1(clk, reset, FlushW, ~StallW, FMAResM, FMAResW);
|
||||||
|
|
||||||
flopenrc #(64) MWRegDiv1(clk, reset, FlushW, ~StallW, FDivResultM, FDivResultW);
|
flopenrc #(64) MWRegDiv1(clk, reset, FlushW, ~StallW, FDivResultM, FDivResultW);
|
||||||
|
|
||||||
flopenrc #(64) MWRegAdd1(clk, reset, FlushW, ~StallW, FAddResM, FAddResW);
|
flopenrc #(64) MWRegAdd1(clk, reset, FlushW, ~StallW, FAddResM, FAddResW);
|
||||||
|
|
||||||
flopenrc #(64) MWRegCmp3(clk, reset, FlushW, ~StallW, CmpResM, CmpResW);
|
flopenrc #(64) MWRegCmp3(clk, reset, FlushW, ~StallW, CmpResM, CmpResW);
|
||||||
|
|
||||||
flopenrc #(64) MWRegClass2(clk, reset, FlushW, ~StallW, FResM, FResW);
|
flopenrc #(64) MWRegClass2(clk, reset, FlushW, ~StallW, FResM, FResW);
|
||||||
|
|
||||||
flopenrc #(6) MWCtrlReg(clk, reset, FlushW, ~StallW,
|
flopenrc #(6) MWCtrlReg(clk, reset, FlushW, ~StallW,
|
||||||
{FRegWriteM, FResultSelM, FmtM, FWriteIntM},
|
{FRegWriteM, FResultSelM, FmtM, FWriteIntM},
|
||||||
{FRegWriteW, FResultSelW, FmtW, FWriteIntW});
|
{FRegWriteW, FResultSelW, FmtW, FWriteIntW});
|
||||||
@ -282,7 +285,6 @@ module fpu (
|
|||||||
//#########################################
|
//#########################################
|
||||||
// BEGIN WRITEBACK STAGE
|
// BEGIN WRITEBACK STAGE
|
||||||
//#########################################
|
//#########################################
|
||||||
|
|
||||||
mux2 #(64) ReadResMux({{32{1'b1}}, ReadDataW[31:0]}, {{64-`XLEN{1'b1}}, ReadDataW}, FmtW, ReadResW);
|
mux2 #(64) ReadResMux({{32{1'b1}}, ReadDataW[31:0]}, {{64-`XLEN{1'b1}}, ReadDataW}, FmtW, ReadResW);
|
||||||
mux5 #(64) FPUResultMux(ReadResW, FMAResW, FAddResW, FDivResultW, FResW, FResultSelW, FPUResultW);
|
mux5 #(64) FPUResultMux(ReadResW, FMAResW, FAddResW, FDivResultW, FResW, FResultSelW, FPUResultW);
|
||||||
|
|
||||||
|
@ -476,7 +476,7 @@ module fsm (done, load_rega, load_regb, load_regc,
|
|||||||
sel_muxa = 3'b011;
|
sel_muxa = 3'b011;
|
||||||
sel_muxb = 3'b110;
|
sel_muxb = 3'b110;
|
||||||
sel_muxr = 1'b1;
|
sel_muxr = 1'b1;
|
||||||
NEXT_STATE = S26;
|
NEXT_STATE = S27;
|
||||||
end
|
end
|
||||||
S26: // done
|
S26: // done
|
||||||
begin
|
begin
|
||||||
|
@ -45,6 +45,8 @@ module lsu
|
|||||||
output logic CommittedM,
|
output logic CommittedM,
|
||||||
output logic SquashSCW,
|
output logic SquashSCW,
|
||||||
output logic DataMisalignedM,
|
output logic DataMisalignedM,
|
||||||
|
output logic DCacheMiss,
|
||||||
|
output logic DCacheAccess,
|
||||||
|
|
||||||
// address and write data
|
// address and write data
|
||||||
input logic [`XLEN-1:0] MemAdrM,
|
input logic [`XLEN-1:0] MemAdrM,
|
||||||
@ -315,6 +317,8 @@ module lsu
|
|||||||
.ReadDataM(HPTWReadPTE),
|
.ReadDataM(HPTWReadPTE),
|
||||||
.DCacheStall(DCacheStall),
|
.DCacheStall(DCacheStall),
|
||||||
.CommittedM(CommittedMfromDCache),
|
.CommittedM(CommittedMfromDCache),
|
||||||
|
.DCacheMiss,
|
||||||
|
.DCacheAccess,
|
||||||
.ExceptionM(ExceptionM),
|
.ExceptionM(ExceptionM),
|
||||||
.PendingInterruptM(PendingInterruptMtoDCache),
|
.PendingInterruptM(PendingInterruptMtoDCache),
|
||||||
.DTLBMissM(DTLBMissM),
|
.DTLBMissM(DTLBMissM),
|
||||||
|
@ -46,6 +46,8 @@ module csr #(parameter
|
|||||||
input logic RASPredPCWrongM,
|
input logic RASPredPCWrongM,
|
||||||
input logic BPPredClassNonCFIWrongM,
|
input logic BPPredClassNonCFIWrongM,
|
||||||
input logic [4:0] InstrClassM,
|
input logic [4:0] InstrClassM,
|
||||||
|
input logic DCacheMiss,
|
||||||
|
input logic DCacheAccess,
|
||||||
input logic [1:0] NextPrivilegeModeM, PrivilegeModeW,
|
input logic [1:0] NextPrivilegeModeM, PrivilegeModeW,
|
||||||
input logic [`XLEN-1:0] CauseM, NextFaultMtvalM,
|
input logic [`XLEN-1:0] CauseM, NextFaultMtvalM,
|
||||||
input logic BreakpointFaultM, EcallFaultM,
|
input logic BreakpointFaultM, EcallFaultM,
|
||||||
|
@ -78,6 +78,8 @@ module csrc #(parameter
|
|||||||
input logic RASPredPCWrongM,
|
input logic RASPredPCWrongM,
|
||||||
input logic BPPredClassNonCFIWrongM,
|
input logic BPPredClassNonCFIWrongM,
|
||||||
input logic [4:0] InstrClassM,
|
input logic [4:0] InstrClassM,
|
||||||
|
input logic DCacheMiss,
|
||||||
|
input logic DCacheAccess,
|
||||||
input logic [11:0] CSRAdrM,
|
input logic [11:0] CSRAdrM,
|
||||||
input logic [1:0] PrivilegeModeW,
|
input logic [1:0] PrivilegeModeW,
|
||||||
input logic [`XLEN-1:0] CSRWriteValM,
|
input logic [`XLEN-1:0] CSRWriteValM,
|
||||||
@ -143,7 +145,9 @@ module csrc #(parameter
|
|||||||
assign CounterEvent[8] = RASPredPCWrongM & ~StallM;
|
assign CounterEvent[8] = RASPredPCWrongM & ~StallM;
|
||||||
assign CounterEvent[9] = InstrClassM[3] & ~StallM;
|
assign CounterEvent[9] = InstrClassM[3] & ~StallM;
|
||||||
assign CounterEvent[10] = BPPredClassNonCFIWrongM & ~StallM;
|
assign CounterEvent[10] = BPPredClassNonCFIWrongM & ~StallM;
|
||||||
assign CounterEvent[`COUNTERS-1:11] = 0; // eventually give these sources, including FP instructions, I$/D$ misses, branches and mispredictions
|
assign CounterEvent[11] = DCacheAccess & ~StallM;
|
||||||
|
assign CounterEvent[12] = DCacheMiss & ~StallM;
|
||||||
|
assign CounterEvent[`COUNTERS-1:13] = 0; // eventually give these sources, including FP instructions, I$/D$ misses, branches and mispredictions
|
||||||
|
|
||||||
for (i = 3; i < `COUNTERS; i = i+1) begin
|
for (i = 3; i < `COUNTERS; i = i+1) begin
|
||||||
assign WriteHPMCOUNTERM[i] = CSRMWriteM && (CSRAdrM == MHPMCOUNTERBASE + i);
|
assign WriteHPMCOUNTERM[i] = CSRMWriteM && (CSRAdrM == MHPMCOUNTERBASE + i);
|
||||||
|
@ -45,6 +45,8 @@ module privileged (
|
|||||||
input logic RASPredPCWrongM,
|
input logic RASPredPCWrongM,
|
||||||
input logic BPPredClassNonCFIWrongM,
|
input logic BPPredClassNonCFIWrongM,
|
||||||
input logic [4:0] InstrClassM,
|
input logic [4:0] InstrClassM,
|
||||||
|
input logic DCacheMiss,
|
||||||
|
input logic DCacheAccess,
|
||||||
input logic PrivilegedM,
|
input logic PrivilegedM,
|
||||||
input logic ITLBInstrPageFaultF, DTLBLoadPageFaultM, DTLBStorePageFaultM,
|
input logic ITLBInstrPageFaultF, DTLBLoadPageFaultM, DTLBStorePageFaultM,
|
||||||
input logic WalkerInstrPageFaultF, WalkerLoadPageFaultM, WalkerStorePageFaultM,
|
input logic WalkerInstrPageFaultF, WalkerLoadPageFaultM, WalkerStorePageFaultM,
|
||||||
|
@ -164,6 +164,8 @@ module wallypipelinedhart
|
|||||||
|
|
||||||
logic ExceptionM;
|
logic ExceptionM;
|
||||||
logic PendingInterruptM;
|
logic PendingInterruptM;
|
||||||
|
logic DCacheMiss;
|
||||||
|
logic DCacheAccess;
|
||||||
|
|
||||||
|
|
||||||
ifu ifu(.InstrInF(InstrRData),
|
ifu ifu(.InstrInF(InstrRData),
|
||||||
@ -186,6 +188,8 @@ module wallypipelinedhart
|
|||||||
.ExceptionM(ExceptionM),
|
.ExceptionM(ExceptionM),
|
||||||
.PendingInterruptM(PendingInterruptM),
|
.PendingInterruptM(PendingInterruptM),
|
||||||
.CommittedM(CommittedM),
|
.CommittedM(CommittedM),
|
||||||
|
.DCacheMiss,
|
||||||
|
.DCacheAccess,
|
||||||
.SquashSCW(SquashSCW),
|
.SquashSCW(SquashSCW),
|
||||||
.DataMisalignedM(DataMisalignedM),
|
.DataMisalignedM(DataMisalignedM),
|
||||||
.MemAdrE(MemAdrE),
|
.MemAdrE(MemAdrE),
|
||||||
|
Loading…
Reference in New Issue
Block a user