1*24519898SXuan Hupackage xiangshan.backend.ctrlblock 2*24519898SXuan Hu 3*24519898SXuan Huimport chipsalliance.rocketchip.config.Parameters 4*24519898SXuan Huimport chisel3._ 5*24519898SXuan Huimport chisel3.util._ 6*24519898SXuan Huimport xiangshan.XSBundle 7*24519898SXuan Hu 8*24519898SXuan Huclass DebugMdpInfo(implicit p: Parameters) extends XSBundle{ 9*24519898SXuan Hu val ssid = UInt(SSIDWidth.W) 10*24519898SXuan Hu val waitAllStore = Bool() 11*24519898SXuan Hu} 12*24519898SXuan Hu 13*24519898SXuan Huclass DebugLsInfo(implicit p: Parameters) extends XSBundle{ 14*24519898SXuan Hu val s1 = new Bundle{ 15*24519898SXuan Hu val isTlbFirstMiss = Bool() // in s1 16*24519898SXuan Hu val isBankConflict = Bool() // in s1 17*24519898SXuan Hu val isLoadToLoadForward = Bool() 18*24519898SXuan Hu val isReplayFast = Bool() 19*24519898SXuan Hu } 20*24519898SXuan Hu val s2 = new Bundle{ 21*24519898SXuan Hu val isDcacheFirstMiss = Bool() // in s2 (predicted result is in s1 when using WPU, real result is in s2) 22*24519898SXuan Hu val isForwardFail = Bool() // in s2 23*24519898SXuan Hu val isReplaySlow = Bool() 24*24519898SXuan Hu val isLoadReplayTLBMiss = Bool() 25*24519898SXuan Hu val isLoadReplayCacheMiss = Bool() 26*24519898SXuan Hu } 27*24519898SXuan Hu val replayCnt = UInt(XLEN.W) 28*24519898SXuan Hu 29*24519898SXuan Hu def s1SignalEnable(ena: DebugLsInfo) = { 30*24519898SXuan Hu when(ena.s1.isTlbFirstMiss) { s1.isTlbFirstMiss := true.B } 31*24519898SXuan Hu when(ena.s1.isBankConflict) { s1.isBankConflict := true.B } 32*24519898SXuan Hu when(ena.s1.isLoadToLoadForward) { s1.isLoadToLoadForward := true.B } 33*24519898SXuan Hu when(ena.s1.isReplayFast) { 34*24519898SXuan Hu s1.isReplayFast := true.B 35*24519898SXuan Hu replayCnt := replayCnt + 1.U 36*24519898SXuan Hu } 37*24519898SXuan Hu } 38*24519898SXuan Hu 39*24519898SXuan Hu def s2SignalEnable(ena: DebugLsInfo) = { 40*24519898SXuan Hu when(ena.s2.isDcacheFirstMiss) { s2.isDcacheFirstMiss := true.B } 41*24519898SXuan Hu when(ena.s2.isForwardFail) { s2.isForwardFail := true.B } 42*24519898SXuan Hu when(ena.s2.isLoadReplayTLBMiss) { s2.isLoadReplayTLBMiss := true.B } 43*24519898SXuan Hu when(ena.s2.isLoadReplayCacheMiss) { s2.isLoadReplayCacheMiss := true.B } 44*24519898SXuan Hu when(ena.s2.isReplaySlow) { 45*24519898SXuan Hu s2.isReplaySlow := true.B 46*24519898SXuan Hu replayCnt := replayCnt + 1.U 47*24519898SXuan Hu } 48*24519898SXuan Hu } 49*24519898SXuan Hu} 50*24519898SXuan Hu 51*24519898SXuan Huobject DebugLsInfo{ 52*24519898SXuan Hu def init(implicit p: Parameters): DebugLsInfo = { 53*24519898SXuan Hu val lsInfo = Wire(new DebugLsInfo) 54*24519898SXuan Hu lsInfo.s1.isTlbFirstMiss := false.B 55*24519898SXuan Hu lsInfo.s1.isBankConflict := false.B 56*24519898SXuan Hu lsInfo.s1.isLoadToLoadForward := false.B 57*24519898SXuan Hu lsInfo.s1.isReplayFast := false.B 58*24519898SXuan Hu lsInfo.s2.isDcacheFirstMiss := false.B 59*24519898SXuan Hu lsInfo.s2.isForwardFail := false.B 60*24519898SXuan Hu lsInfo.s2.isReplaySlow := false.B 61*24519898SXuan Hu lsInfo.s2.isLoadReplayTLBMiss := false.B 62*24519898SXuan Hu lsInfo.s2.isLoadReplayCacheMiss := false.B 63*24519898SXuan Hu lsInfo.replayCnt := 0.U 64*24519898SXuan Hu lsInfo 65*24519898SXuan Hu } 66*24519898SXuan Hu} 67*24519898SXuan Hu 68*24519898SXuan Huclass DebugLsInfoBundle(implicit p: Parameters) extends DebugLsInfo { 69*24519898SXuan Hu // unified processing at the end stage of load/store ==> s2 ==> bug that will write error robIdx data 70*24519898SXuan Hu val s1_robIdx = UInt(log2Ceil(RobSize).W) 71*24519898SXuan Hu val s2_robIdx = UInt(log2Ceil(RobSize).W) 72*24519898SXuan Hu} 73*24519898SXuan Hu 74*24519898SXuan Huclass DebugLSIO(implicit p: Parameters) extends XSBundle { 75*24519898SXuan Hu val debugLsInfo = Vec(backendParams.LduCnt + backendParams.StaCnt, Output(new DebugLsInfoBundle)) 76*24519898SXuan Hu} 77