xref: /XiangShan/src/main/scala/xiangshan/backend/ctrlblock/LsInfo.scala (revision e4d4d30585412eb8ac83b5c75599a348356342a2)
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}