mirror of
https://github.com/openhwgroup/cvw
synced 2025-02-11 06:05:49 +00:00
Fixed InstrValid from W to M stage for CSR performance counters
This commit is contained in:
parent
861ef5e1cb
commit
b5dddec858
@ -60,7 +60,6 @@ module controller(
|
|||||||
input logic StallW, FlushW,
|
input logic StallW, FlushW,
|
||||||
output logic RegWriteW, // for datapath and Hazard Unit
|
output logic RegWriteW, // for datapath and Hazard Unit
|
||||||
output logic [2:0] ResultSrcW,
|
output logic [2:0] ResultSrcW,
|
||||||
output logic InstrValidW,
|
|
||||||
// Stall during CSRs
|
// Stall during CSRs
|
||||||
output logic CSRWritePendingDEM
|
output logic CSRWritePendingDEM
|
||||||
);
|
);
|
||||||
@ -214,9 +213,9 @@ module controller(
|
|||||||
{RegWriteM, ResultSrcM, MemRWM, CSRReadM, CSRWriteM, PrivilegedM, Funct3M, AtomicM, InstrValidM});
|
{RegWriteM, ResultSrcM, MemRWM, CSRReadM, CSRWriteM, PrivilegedM, Funct3M, AtomicM, InstrValidM});
|
||||||
|
|
||||||
// Writeback stage pipeline control register
|
// Writeback stage pipeline control register
|
||||||
flopenrc #(5) controlregW(clk, reset, FlushW, ~StallW,
|
flopenrc #(4) controlregW(clk, reset, FlushW, ~StallW,
|
||||||
{RegWriteM, ResultSrcM, InstrValidM},
|
{RegWriteM, ResultSrcM},
|
||||||
{RegWriteW, ResultSrcW, InstrValidW});
|
{RegWriteW, ResultSrcW});
|
||||||
|
|
||||||
assign CSRWritePendingDEM = CSRWriteD | CSRWriteE | CSRWriteM;
|
assign CSRWritePendingDEM = CSRWriteD | CSRWriteE | CSRWriteM;
|
||||||
endmodule
|
endmodule
|
||||||
|
@ -60,7 +60,7 @@ module ieu (
|
|||||||
input logic [`XLEN-1:0] CSRReadValW, ReadDataW, MulDivResultW,
|
input logic [`XLEN-1:0] CSRReadValW, ReadDataW, MulDivResultW,
|
||||||
input logic FWriteIntW,
|
input logic FWriteIntW,
|
||||||
// input logic [`XLEN-1:0] PCLinkW,
|
// input logic [`XLEN-1:0] PCLinkW,
|
||||||
output logic InstrValidM, InstrValidW,
|
output logic InstrValidM,
|
||||||
// hazards
|
// hazards
|
||||||
input logic StallD, StallE, StallM, StallW,
|
input logic StallD, StallE, StallM, StallW,
|
||||||
input logic FlushD, FlushE, FlushM, FlushW,
|
input logic FlushD, FlushE, FlushM, FlushW,
|
||||||
|
@ -40,7 +40,7 @@ module csr #(parameter
|
|||||||
input logic CSRReadM, CSRWriteM, TrapM, MTrapM, STrapM, UTrapM, mretM, sretM, uretM,
|
input logic CSRReadM, CSRWriteM, TrapM, MTrapM, STrapM, UTrapM, mretM, sretM, uretM,
|
||||||
input logic TimerIntM, ExtIntM, SwIntM,
|
input logic TimerIntM, ExtIntM, SwIntM,
|
||||||
input logic [63:0] MTIME_CLINT, MTIMECMP_CLINT,
|
input logic [63:0] MTIME_CLINT, MTIMECMP_CLINT,
|
||||||
input logic InstrValidW, FloatRegWriteW, LoadStallD,
|
input logic InstrValidM, FloatRegWriteW, LoadStallD,
|
||||||
input logic BPPredDirWrongM,
|
input logic BPPredDirWrongM,
|
||||||
input logic BTBPredPCWrongM,
|
input logic BTBPredPCWrongM,
|
||||||
input logic RASPredPCWrongM,
|
input logic RASPredPCWrongM,
|
||||||
|
@ -72,7 +72,7 @@ module csrc #(parameter
|
|||||||
) (
|
) (
|
||||||
input logic clk, reset,
|
input logic clk, reset,
|
||||||
input logic StallD, StallE, StallM, StallW,
|
input logic StallD, StallE, StallM, StallW,
|
||||||
input logic InstrValidW, LoadStallD, CSRMWriteM,
|
input logic InstrValidM, LoadStallD, CSRMWriteM,
|
||||||
input logic BPPredDirWrongM,
|
input logic BPPredDirWrongM,
|
||||||
input logic BTBPredPCWrongM,
|
input logic BTBPredPCWrongM,
|
||||||
input logic RASPredPCWrongM,
|
input logic RASPredPCWrongM,
|
||||||
@ -114,7 +114,7 @@ module csrc #(parameter
|
|||||||
// Counter adders with inhibits for power savings
|
// Counter adders with inhibits for power savings
|
||||||
assign CYCLEPlusM = CYCLE_REGW + {63'b0, ~MCOUNTINHIBIT_REGW[0]};
|
assign CYCLEPlusM = CYCLE_REGW + {63'b0, ~MCOUNTINHIBIT_REGW[0]};
|
||||||
//assign TIMEPlusM = TIME_REGW + 1; // can't be inhibited
|
//assign TIMEPlusM = TIME_REGW + 1; // can't be inhibited
|
||||||
assign INSTRETPlusM = INSTRET_REGW + {63'b0, InstrValidW & ~StallW & ~MCOUNTINHIBIT_REGW[2]};
|
assign INSTRETPlusM = INSTRET_REGW + {63'b0, InstrValidM & ~StallW & ~MCOUNTINHIBIT_REGW[2]};
|
||||||
//assign HPMCOUNTER3PlusM = HPMCOUNTER3_REGW + {63'b0, LoadStallD & ~MCOUNTINHIBIT_REGW[3]}; // count load stalls
|
//assign HPMCOUNTER3PlusM = HPMCOUNTER3_REGW + {63'b0, LoadStallD & ~MCOUNTINHIBIT_REGW[3]}; // count load stalls
|
||||||
//assign HPMCOUNTER4PlusM = HPMCOUNTER4_REGW + {63'b0, 1'b0 & ~MCOUNTINHIBIT_REGW[4]}; // change to count signals
|
//assign HPMCOUNTER4PlusM = HPMCOUNTER4_REGW + {63'b0, 1'b0 & ~MCOUNTINHIBIT_REGW[4]}; // change to count signals
|
||||||
assign NextCYCLEM = WriteCYCLEM ? CSRWriteValM : CYCLEPlusM[`XLEN-1:0];
|
assign NextCYCLEM = WriteCYCLEM ? CSRWriteValM : CYCLEPlusM[`XLEN-1:0];
|
||||||
@ -134,7 +134,7 @@ module csrc #(parameter
|
|||||||
// could replace special counters 0-2 with this loop for all counters
|
// could replace special counters 0-2 with this loop for all counters
|
||||||
assign CounterEvent[0] = 1'b1;
|
assign CounterEvent[0] = 1'b1;
|
||||||
assign CounterEvent[1] = 1'b0;
|
assign CounterEvent[1] = 1'b0;
|
||||||
assign CounterEvent[2] = InstrValidW & ~StallW;
|
assign CounterEvent[2] = InstrValidM & ~StallW;
|
||||||
assign CounterEvent[3] = LoadStallD & ~StallD;
|
assign CounterEvent[3] = LoadStallD & ~StallD;
|
||||||
assign CounterEvent[4] = BPPredDirWrongM & ~StallM;
|
assign CounterEvent[4] = BPPredDirWrongM & ~StallM;
|
||||||
assign CounterEvent[5] = InstrClassM[0] & ~StallM;
|
assign CounterEvent[5] = InstrClassM[0] & ~StallM;
|
||||||
@ -339,7 +339,7 @@ module csrc #(parameter
|
|||||||
HPMCOUNTERHBASE = 12'hC80,
|
HPMCOUNTERHBASE = 12'hC80,
|
||||||
)(input logic clk, reset,
|
)(input logic clk, reset,
|
||||||
input logic StallD, StallE, StallM, StallW,
|
input logic StallD, StallE, StallM, StallW,
|
||||||
input logic InstrValidW, LoadStallD, CSRMWriteM,
|
input logic InstrValidM, LoadStallD, CSRMWriteM,
|
||||||
input logic BPPredDirWrongM,
|
input logic BPPredDirWrongM,
|
||||||
input logic BTBPredPCWrongM,
|
input logic BTBPredPCWrongM,
|
||||||
input logic RASPredPCWrongM,
|
input logic RASPredPCWrongM,
|
||||||
@ -381,7 +381,7 @@ module csrc #(parameter
|
|||||||
logic [`COUNTERS:0] MCOUNTEN;
|
logic [`COUNTERS:0] MCOUNTEN;
|
||||||
assign MCOUNTEN[0] = 1'b1;
|
assign MCOUNTEN[0] = 1'b1;
|
||||||
assign MCOUNTEN[1] = 1'b0;
|
assign MCOUNTEN[1] = 1'b0;
|
||||||
assign MCOUNTEN[2] = InstrValidW & ~StallW;
|
assign MCOUNTEN[2] = InstrValidM & ~StallW;
|
||||||
assign MCOUNTEN[3] = LoadStallD & ~StallD;
|
assign MCOUNTEN[3] = LoadStallD & ~StallD;
|
||||||
assign MCOUNTEN[4] = BPPredDirWrongM & ~StallM;
|
assign MCOUNTEN[4] = BPPredDirWrongM & ~StallM;
|
||||||
assign MCOUNTEN[5] = InstrClassM[0] & ~StallM;
|
assign MCOUNTEN[5] = InstrClassM[0] & ~StallM;
|
||||||
|
@ -38,7 +38,7 @@ module privileged (
|
|||||||
output logic [`XLEN-1:0] PrivilegedNextPCM,
|
output logic [`XLEN-1:0] PrivilegedNextPCM,
|
||||||
output logic RetM, TrapM, NonBusTrapM,
|
output logic RetM, TrapM, NonBusTrapM,
|
||||||
output logic ITLBFlushF, DTLBFlushM,
|
output logic ITLBFlushF, DTLBFlushM,
|
||||||
input logic InstrValidM,InstrValidW, CommittedM,
|
input logic InstrValidM, CommittedM,
|
||||||
input logic FloatRegWriteW, LoadStallD,
|
input logic FloatRegWriteW, LoadStallD,
|
||||||
input logic BPPredDirWrongM,
|
input logic BPPredDirWrongM,
|
||||||
input logic BTBPredPCWrongM,
|
input logic BTBPredPCWrongM,
|
||||||
|
@ -74,7 +74,7 @@ module wallypipelinedhart
|
|||||||
logic [`XLEN-1:0] CSRReadValW, MulDivResultW;
|
logic [`XLEN-1:0] CSRReadValW, MulDivResultW;
|
||||||
logic [`XLEN-1:0] PrivilegedNextPCM;
|
logic [`XLEN-1:0] PrivilegedNextPCM;
|
||||||
logic [1:0] MemRWM;
|
logic [1:0] MemRWM;
|
||||||
logic InstrValidM, InstrValidW;
|
logic InstrValidM;
|
||||||
logic InstrMisalignedFaultM;
|
logic InstrMisalignedFaultM;
|
||||||
logic DataMisalignedM;
|
logic DataMisalignedM;
|
||||||
logic IllegalBaseInstrFaultD, IllegalIEUInstrFaultD;
|
logic IllegalBaseInstrFaultD, IllegalIEUInstrFaultD;
|
||||||
|
Loading…
Reference in New Issue
Block a user