mirror of
https://github.com/openhwgroup/cvw
synced 2025-02-11 06:05:49 +00:00
Fixed missing stall in InstrRet counter
This commit is contained in:
parent
230654ea76
commit
4d53a935b3
@ -64,7 +64,7 @@ module tlbcontrol #(parameter TLB_ENTRIES = 8,
|
|||||||
|
|
||||||
// Grab the sv mode from SATP and determine whether translation should occur
|
// Grab the sv mode from SATP and determine whether translation should occur
|
||||||
assign EffectivePrivilegeMode = (ITLB == 1) ? PrivilegeModeW : (STATUS_MPRV ? STATUS_MPP : PrivilegeModeW); // DTLB uses MPP mode when MPRV is 1
|
assign EffectivePrivilegeMode = (ITLB == 1) ? PrivilegeModeW : (STATUS_MPRV ? STATUS_MPP : PrivilegeModeW); // DTLB uses MPP mode when MPRV is 1
|
||||||
assign Translate = (SATP_MODE != `NO_TRANSLATE) & (EffectivePrivilegeMode != `M_MODE) & ~ DisableTranslation;
|
assign Translate = (SATP_MODE != `NO_TRANSLATE) & (EffectivePrivilegeMode != `M_MODE) & ~DisableTranslation;
|
||||||
generate
|
generate
|
||||||
if (`XLEN==64) begin
|
if (`XLEN==64) begin
|
||||||
assign SV39Mode = (SATP_MODE == `SV39);
|
assign SV39Mode = (SATP_MODE == `SV39);
|
||||||
|
@ -48,5 +48,5 @@ module tlblru #(parameter TLB_ENTRIES = 8) (
|
|||||||
assign AllUsed = &RUBitsAccessed; // if all recently used, then clear to none
|
assign AllUsed = &RUBitsAccessed; // if all recently used, then clear to none
|
||||||
assign RUBitsNext = AllUsed ? 0 : RUBitsAccessed;
|
assign RUBitsNext = AllUsed ? 0 : RUBitsAccessed;
|
||||||
flopenrc #(TLB_ENTRIES) lrustate(clk, reset, TLBFlush, (CAMHit || TLBWrite), RUBitsNext, RUBits);
|
flopenrc #(TLB_ENTRIES) lrustate(clk, reset, TLBFlush, (CAMHit || TLBWrite), RUBitsNext, RUBits);
|
||||||
|
// *** seems like enable must be ORd with TLBFlush to ensure flop fires on a flush. DH 7/8/21
|
||||||
endmodule
|
endmodule
|
||||||
|
@ -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 & ~MCOUNTINHIBIT_REGW[2]};
|
assign INSTRETPlusM = INSTRET_REGW + {63'b0, InstrValidW & ~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];
|
||||||
|
Loading…
Reference in New Issue
Block a user