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