124519898SXuan Hupackage xiangshan.backend.ctrlblock 224519898SXuan Hu 383ba63b3SXuan Huimport org.chipsalliance.cde.config.Parameters 424519898SXuan Huimport chisel3._ 524519898SXuan Huimport chisel3.util._ 624519898SXuan Huimport xiangshan.XSBundle 724519898SXuan Hu 824519898SXuan Huclass DebugMdpInfo(implicit p: Parameters) extends XSBundle{ 924519898SXuan Hu val ssid = UInt(SSIDWidth.W) 1024519898SXuan Hu val waitAllStore = Bool() 1124519898SXuan Hu} 1224519898SXuan Hu 1324519898SXuan Huclass DebugLsInfo(implicit p: Parameters) extends XSBundle{ 1424519898SXuan Hu val s1 = new Bundle{ 1524519898SXuan Hu val isTlbFirstMiss = Bool() // in s1 1624519898SXuan Hu val isBankConflict = Bool() // in s1 1724519898SXuan Hu val isLoadToLoadForward = Bool() 1824519898SXuan Hu val isReplayFast = Bool() 1924519898SXuan Hu } 2024519898SXuan Hu val s2 = new Bundle{ 2124519898SXuan Hu val isDcacheFirstMiss = Bool() // in s2 (predicted result is in s1 when using WPU, real result is in s2) 2224519898SXuan Hu val isForwardFail = Bool() // in s2 2324519898SXuan Hu val isReplaySlow = Bool() 2424519898SXuan Hu val isLoadReplayTLBMiss = Bool() 2524519898SXuan Hu val isLoadReplayCacheMiss = Bool() 2624519898SXuan Hu } 2724519898SXuan Hu val replayCnt = UInt(XLEN.W) 2824519898SXuan Hu 2924519898SXuan Hu def s1SignalEnable(ena: DebugLsInfo) = { 3024519898SXuan Hu when(ena.s1.isTlbFirstMiss) { s1.isTlbFirstMiss := true.B } 3124519898SXuan Hu when(ena.s1.isBankConflict) { s1.isBankConflict := true.B } 3224519898SXuan Hu when(ena.s1.isLoadToLoadForward) { s1.isLoadToLoadForward := true.B } 3324519898SXuan Hu when(ena.s1.isReplayFast) { 3424519898SXuan Hu s1.isReplayFast := true.B 3524519898SXuan Hu replayCnt := replayCnt + 1.U 3624519898SXuan Hu } 3724519898SXuan Hu } 3824519898SXuan Hu 3924519898SXuan Hu def s2SignalEnable(ena: DebugLsInfo) = { 4024519898SXuan Hu when(ena.s2.isDcacheFirstMiss) { s2.isDcacheFirstMiss := true.B } 4124519898SXuan Hu when(ena.s2.isForwardFail) { s2.isForwardFail := true.B } 4224519898SXuan Hu when(ena.s2.isLoadReplayTLBMiss) { s2.isLoadReplayTLBMiss := true.B } 4324519898SXuan Hu when(ena.s2.isLoadReplayCacheMiss) { s2.isLoadReplayCacheMiss := true.B } 4424519898SXuan Hu when(ena.s2.isReplaySlow) { 4524519898SXuan Hu s2.isReplaySlow := true.B 4624519898SXuan Hu replayCnt := replayCnt + 1.U 4724519898SXuan Hu } 4824519898SXuan Hu } 4924519898SXuan Hu} 5024519898SXuan Hu 5124519898SXuan Huobject DebugLsInfo{ 5224519898SXuan Hu def init(implicit p: Parameters): DebugLsInfo = { 5324519898SXuan Hu val lsInfo = Wire(new DebugLsInfo) 5424519898SXuan Hu lsInfo.s1.isTlbFirstMiss := false.B 5524519898SXuan Hu lsInfo.s1.isBankConflict := false.B 5624519898SXuan Hu lsInfo.s1.isLoadToLoadForward := false.B 5724519898SXuan Hu lsInfo.s1.isReplayFast := false.B 5824519898SXuan Hu lsInfo.s2.isDcacheFirstMiss := false.B 5924519898SXuan Hu lsInfo.s2.isForwardFail := false.B 6024519898SXuan Hu lsInfo.s2.isReplaySlow := false.B 6124519898SXuan Hu lsInfo.s2.isLoadReplayTLBMiss := false.B 6224519898SXuan Hu lsInfo.s2.isLoadReplayCacheMiss := false.B 6324519898SXuan Hu lsInfo.replayCnt := 0.U 6424519898SXuan Hu lsInfo 6524519898SXuan Hu } 6624519898SXuan Hu} 6724519898SXuan Hu 6824519898SXuan Huclass DebugLsInfoBundle(implicit p: Parameters) extends DebugLsInfo { 6924519898SXuan Hu // unified processing at the end stage of load/store ==> s2 ==> bug that will write error robIdx data 7024519898SXuan Hu val s1_robIdx = UInt(log2Ceil(RobSize).W) 7124519898SXuan Hu val s2_robIdx = UInt(log2Ceil(RobSize).W) 7224519898SXuan Hu} 7324519898SXuan Hu 7424519898SXuan Huclass DebugLSIO(implicit p: Parameters) extends XSBundle { 75*e4d4d305SXuan Hu val debugLsInfo = Vec(backendParams.LduCnt + backendParams.HyuCnt + backendParams.StaCnt + backendParams.HyuCnt, Output(new DebugLsInfoBundle)) 7624519898SXuan Hu} 77870f462dSXuan Hu 78870f462dSXuan Huclass LsTopdownInfo(implicit p: Parameters) extends XSBundle { 79870f462dSXuan Hu val s1 = new Bundle { 80870f462dSXuan Hu val robIdx = UInt(log2Ceil(RobSize).W) 81870f462dSXuan Hu val vaddr_valid = Bool() 82870f462dSXuan Hu val vaddr_bits = UInt(VAddrBits.W) 83870f462dSXuan Hu } 84870f462dSXuan Hu val s2 = new Bundle { 85870f462dSXuan Hu val robIdx = UInt(log2Ceil(RobSize).W) 86870f462dSXuan Hu val paddr_valid = Bool() 87870f462dSXuan Hu val paddr_bits = UInt(PAddrBits.W) 8883ba63b3SXuan Hu val cache_miss_en = Bool() 8983ba63b3SXuan Hu val first_real_miss = Bool() 90870f462dSXuan Hu } 91870f462dSXuan Hu 92870f462dSXuan Hu def s1SignalEnable(ena: LsTopdownInfo) = { 93870f462dSXuan Hu when(ena.s1.vaddr_valid) { 94870f462dSXuan Hu s1.vaddr_valid := true.B 95870f462dSXuan Hu s1.vaddr_bits := ena.s1.vaddr_bits 96870f462dSXuan Hu } 97870f462dSXuan Hu } 98870f462dSXuan Hu 99870f462dSXuan Hu def s2SignalEnable(ena: LsTopdownInfo) = { 100870f462dSXuan Hu when(ena.s2.paddr_valid) { 101870f462dSXuan Hu s2.paddr_valid := true.B 102870f462dSXuan Hu s2.paddr_bits := ena.s2.paddr_bits 103870f462dSXuan Hu } 10483ba63b3SXuan Hu when(ena.s2.cache_miss_en) { 10583ba63b3SXuan Hu s2.first_real_miss := ena.s2.first_real_miss 10683ba63b3SXuan Hu } 107870f462dSXuan Hu } 108870f462dSXuan Hu} 109870f462dSXuan Hu 110870f462dSXuan Huobject LsTopdownInfo { 111870f462dSXuan Hu def init(implicit p: Parameters): LsTopdownInfo = 0.U.asTypeOf(new LsTopdownInfo) 112870f462dSXuan Hu}