xref: /XiangShan/src/main/scala/xiangshan/backend/fu/NewCSR/InterruptBundle.scala (revision a2cf57616ebde35fcac4de9c2ad02bb85cb3a47d)
1039cdc35SXuan Hupackage xiangshan.backend.fu.NewCSR
2039cdc35SXuan Hu
31d192ad8SXuan Huimport chisel3._
41d192ad8SXuan Huimport chisel3.util._
51d192ad8SXuan Huimport xiangshan.backend.fu.NewCSR.CSRDefines.{CSRROField => RO, CSRRWField => RW}
61d192ad8SXuan Huimport xiangshan.backend.fu.NewCSR.ChiselRecordForField.AddRecordSpecifyFields
7039cdc35SXuan Hu
8039cdc35SXuan Huclass InterruptBundle extends CSRBundle {
9039cdc35SXuan Hu  // Software Interrupt
10039cdc35SXuan Hu  val SSI      = RW(1)
11039cdc35SXuan Hu  val VSSI     = RW(2)
12039cdc35SXuan Hu  val MSI      = RW(3)
13039cdc35SXuan Hu  // Time Interrupt
14039cdc35SXuan Hu  val STI      = RW(5)
15039cdc35SXuan Hu  val VSTI     = RW(6)
16039cdc35SXuan Hu  val MTI      = RW(7)
17039cdc35SXuan Hu  // External Interrupt
18039cdc35SXuan Hu  val SEI      = RW(9)
19039cdc35SXuan Hu  val VSEI     = RW(10)
20039cdc35SXuan Hu  val MEI      = RW(11)
21039cdc35SXuan Hu  val SGEI     = RW(12)
22039cdc35SXuan Hu  // SoC
231d192ad8SXuan Hu  val LCOFI    = RW(13) // Counter overflow interrupt
241d192ad8SXuan Hu  val LC14I    = RO(14)
251d192ad8SXuan Hu  val LC15I    = RO(15)
261d192ad8SXuan Hu  val LC16I    = RO(16)
271d192ad8SXuan Hu  val LC17I    = RO(17)
281d192ad8SXuan Hu  val LC18I    = RO(18)
291d192ad8SXuan Hu  val LC19I    = RO(19)
301d192ad8SXuan Hu  val LC20I    = RO(20)
311d192ad8SXuan Hu  val LC21I    = RO(21)
321d192ad8SXuan Hu  val LC22I    = RO(22)
331d192ad8SXuan Hu  val LC23I    = RO(23)
341d192ad8SXuan Hu  val LC24I    = RO(24)
351d192ad8SXuan Hu  val LC25I    = RO(25)
361d192ad8SXuan Hu  val LC26I    = RO(26)
371d192ad8SXuan Hu  val LC27I    = RO(27)
381d192ad8SXuan Hu  val LC28I    = RO(28)
391d192ad8SXuan Hu  val LC29I    = RO(29)
401d192ad8SXuan Hu  val LC30I    = RO(30)
411d192ad8SXuan Hu  val LC31I    = RO(31)
421d192ad8SXuan Hu  val LC32I    = RO(32)
431d192ad8SXuan Hu  val LC33I    = RO(33)
441d192ad8SXuan Hu  val LC34I    = RO(34)
451d192ad8SXuan Hu  val LPRASEI  = RO(35)
461d192ad8SXuan Hu  val LC36I    = RO(36)
471d192ad8SXuan Hu  val LC37I    = RO(37)
481d192ad8SXuan Hu  val LC38I    = RO(38)
491d192ad8SXuan Hu  val LC39I    = RO(39)
501d192ad8SXuan Hu  val LC40I    = RO(40)
511d192ad8SXuan Hu  val LC41I    = RO(41)
521d192ad8SXuan Hu  val LC42I    = RO(42)
531d192ad8SXuan Hu  val HPRASEI  = RO(43)
541d192ad8SXuan Hu  val LC44I    = RO(44)
551d192ad8SXuan Hu  val LC45I    = RO(45)
561d192ad8SXuan Hu  val LC46I    = RO(46)
571d192ad8SXuan Hu  val LC47I    = RO(47)
581d192ad8SXuan Hu  val LC48I    = RO(48)
591d192ad8SXuan Hu  val LC49I    = RO(49)
601d192ad8SXuan Hu  val LC50I    = RO(50)
611d192ad8SXuan Hu  val LC51I    = RO(51)
621d192ad8SXuan Hu  val LC52I    = RO(52)
631d192ad8SXuan Hu  val LC53I    = RO(53)
641d192ad8SXuan Hu  val LC54I    = RO(54)
651d192ad8SXuan Hu  val LC55I    = RO(55)
661d192ad8SXuan Hu  val LC56I    = RO(56)
671d192ad8SXuan Hu  val LC57I    = RO(57)
681d192ad8SXuan Hu  val LC58I    = RO(58)
691d192ad8SXuan Hu  val LC59I    = RO(59)
701d192ad8SXuan Hu  val LC60I    = RO(60)
711d192ad8SXuan Hu  val LC61I    = RO(61)
721d192ad8SXuan Hu  val LC62I    = RO(62)
731d192ad8SXuan Hu  val LC63I    = RO(63)
74039cdc35SXuan Hu
75039cdc35SXuan Hu  def getVS = Seq(VSSI, VSTI, VSEI)
76039cdc35SXuan Hu
77039cdc35SXuan Hu  def getHS = Seq(SSI, STI, SEI)
78039cdc35SXuan Hu
79039cdc35SXuan Hu  def getM = Seq(MSI, MTI, MEI)
80039cdc35SXuan Hu
811d192ad8SXuan Hu  def getNonLocal = Seq(
821d192ad8SXuan Hu    SSI, VSSI, MSI,
831d192ad8SXuan Hu    STI, VSTI, MTI,
841d192ad8SXuan Hu    SEI, VSEI, MEI,
851d192ad8SXuan Hu    SGEI
861d192ad8SXuan Hu  )
87ab449222SsinceforYy
881d192ad8SXuan Hu  def getLocal = Seq(
891d192ad8SXuan Hu    LCOFI,LC14I,LC15I,
901d192ad8SXuan Hu    LC16I,LC17I,LC18I,LC19I,LC20I,LC21I,LC22I,LC23I,
911d192ad8SXuan Hu    LC24I,LC25I,LC26I,LC27I,LC28I,LC29I,LC30I,LC31I,
921d192ad8SXuan Hu    LC32I,LC33I,LC34I,LPRASEI,LC36I,LC37I,LC38I,LC39I,
931d192ad8SXuan Hu    LC40I,LC41I,LC42I,HPRASEI,LC44I,LC45I,LC46I,LC47I,
941d192ad8SXuan Hu    LC48I,LC49I,LC50I,LC51I,LC52I,LC53I,LC54I,LC55I,
951d192ad8SXuan Hu    LC56I,LC57I,LC58I,LC59I,LC60I,LC61I,LC62I,LC63I,
961d192ad8SXuan Hu  )
971d192ad8SXuan Hu
981d192ad8SXuan Hu  def getALL = getNonLocal ++ getLocal
99039cdc35SXuan Hu}
100039cdc35SXuan Hu
101039cdc35SXuan Huclass InterruptPendingBundle extends CSRBundle {
102039cdc35SXuan Hu  // Software Interrupt
1031d192ad8SXuan Hu  val SSIP     = RO(1)
1041d192ad8SXuan Hu  val VSSIP    = RO(2)
1051d192ad8SXuan Hu  val MSIP     = RO(3)
106039cdc35SXuan Hu  // Time Interrupt
1071d192ad8SXuan Hu  val STIP     = RO(5)
1081d192ad8SXuan Hu  val VSTIP    = RO(6)
1091d192ad8SXuan Hu  val MTIP     = RO(7)
110039cdc35SXuan Hu  // External Interrupt
1111d192ad8SXuan Hu  val SEIP     = RO(9)
1121d192ad8SXuan Hu  val VSEIP    = RO(10)
1131d192ad8SXuan Hu  val MEIP     = RO(11)
1141d192ad8SXuan Hu  val SGEIP    = RO(12)
1151d192ad8SXuan Hu  // Local Interrupt
1161d192ad8SXuan Hu  val LCOFIP   = RO(13) // Counter overflow interrupt
1171d192ad8SXuan Hu  val LC14IP   = RO(14)
1181d192ad8SXuan Hu  val LC15IP   = RO(15)
1191d192ad8SXuan Hu  val LC16IP   = RO(16)
1201d192ad8SXuan Hu  val LC17IP   = RO(17)
1211d192ad8SXuan Hu  val LC18IP   = RO(18)
1221d192ad8SXuan Hu  val LC19IP   = RO(19)
1231d192ad8SXuan Hu  val LC20IP   = RO(20)
1241d192ad8SXuan Hu  val LC21IP   = RO(21)
1251d192ad8SXuan Hu  val LC22IP   = RO(22)
1261d192ad8SXuan Hu  val LC23IP   = RO(23)
1271d192ad8SXuan Hu  val LC24IP   = RO(24)
1281d192ad8SXuan Hu  val LC25IP   = RO(25)
1291d192ad8SXuan Hu  val LC26IP   = RO(26)
1301d192ad8SXuan Hu  val LC27IP   = RO(27)
1311d192ad8SXuan Hu  val LC28IP   = RO(28)
1321d192ad8SXuan Hu  val LC29IP   = RO(29)
1331d192ad8SXuan Hu  val LC30IP   = RO(30)
1341d192ad8SXuan Hu  val LC31IP   = RO(31)
1351d192ad8SXuan Hu  val LC32IP   = RO(32)
1361d192ad8SXuan Hu  val LC33IP   = RO(33)
1371d192ad8SXuan Hu  val LC34IP   = RO(34)
1381d192ad8SXuan Hu  val LPRASEIP = RO(35) // Low-priority RAS event interrupt
1391d192ad8SXuan Hu  val LC36IP   = RO(36)
1401d192ad8SXuan Hu  val LC37IP   = RO(37)
1411d192ad8SXuan Hu  val LC38IP   = RO(38)
1421d192ad8SXuan Hu  val LC39IP   = RO(39)
1431d192ad8SXuan Hu  val LC40IP   = RO(40)
1441d192ad8SXuan Hu  val LC41IP   = RO(41)
1451d192ad8SXuan Hu  val LC42IP   = RO(42)
1461d192ad8SXuan Hu  val HPRASEIP = RO(43) // High-priority RAS event interrupt
1471d192ad8SXuan Hu  val LC44IP   = RO(44)
1481d192ad8SXuan Hu  val LC45IP   = RO(45)
1491d192ad8SXuan Hu  val LC46IP   = RO(46)
1501d192ad8SXuan Hu  val LC47IP   = RO(47)
1511d192ad8SXuan Hu  val LC48IP   = RO(48)
1521d192ad8SXuan Hu  val LC49IP   = RO(49)
1531d192ad8SXuan Hu  val LC50IP   = RO(50)
1541d192ad8SXuan Hu  val LC51IP   = RO(51)
1551d192ad8SXuan Hu  val LC52IP   = RO(52)
1561d192ad8SXuan Hu  val LC53IP   = RO(53)
1571d192ad8SXuan Hu  val LC54IP   = RO(54)
1581d192ad8SXuan Hu  val LC55IP   = RO(55)
1591d192ad8SXuan Hu  val LC56IP   = RO(56)
1601d192ad8SXuan Hu  val LC57IP   = RO(57)
1611d192ad8SXuan Hu  val LC58IP   = RO(58)
1621d192ad8SXuan Hu  val LC59IP   = RO(59)
1631d192ad8SXuan Hu  val LC60IP   = RO(60)
1641d192ad8SXuan Hu  val LC61IP   = RO(61)
1651d192ad8SXuan Hu  val LC62IP   = RO(62)
1661d192ad8SXuan Hu  val LC63IP   = RO(63)
167039cdc35SXuan Hu
168039cdc35SXuan Hu  def getVS = Seq(VSSIP, VSTIP, VSEIP)
169039cdc35SXuan Hu
170039cdc35SXuan Hu  def getHS = Seq(SSIP, STIP, SEIP)
171039cdc35SXuan Hu
172039cdc35SXuan Hu  def getM = Seq(MSIP, MTIP, MEIP)
173039cdc35SXuan Hu
1741d192ad8SXuan Hu  def getNonLocal = Seq(
1751d192ad8SXuan Hu    SSIP, VSSIP, MSIP,
1761d192ad8SXuan Hu    STIP, VSTIP, MTIP,
1771d192ad8SXuan Hu    SEIP, VSEIP, MEIP,
1781d192ad8SXuan Hu    SGEIP
1791d192ad8SXuan Hu  )
180039cdc35SXuan Hu
1811d192ad8SXuan Hu  def getLocal = Seq(
1821d192ad8SXuan Hu    LCOFIP,LC14IP,LC15IP,
1831d192ad8SXuan Hu    LC16IP,LC17IP,LC18IP,LC19IP,LC20IP,LC21IP,LC22IP,LC23IP,
1841d192ad8SXuan Hu    LC24IP,LC25IP,LC26IP,LC27IP,LC28IP,LC29IP,LC30IP,LC31IP,
1851d192ad8SXuan Hu    LC32IP,LC33IP,LC34IP,LPRASEIP,LC36IP,LC37IP,LC38IP,LC39IP,
1861d192ad8SXuan Hu    LC40IP,LC41IP,LC42IP,HPRASEIP,LC44IP,LC45IP,LC46IP,LC47IP,
1871d192ad8SXuan Hu    LC48IP,LC49IP,LC50IP,LC51IP,LC52IP,LC53IP,LC54IP,LC55IP,
1881d192ad8SXuan Hu    LC56IP,LC57IP,LC58IP,LC59IP,LC60IP,LC61IP,LC62IP,LC63IP,
1891d192ad8SXuan Hu  )
1901d192ad8SXuan Hu
1911d192ad8SXuan Hu  def getALL = getNonLocal ++ getLocal
192039cdc35SXuan Hu}
193039cdc35SXuan Hu
194039cdc35SXuan Huclass InterruptEnableBundle extends CSRBundle {
195039cdc35SXuan Hu  // Software Interrupt
1961d192ad8SXuan Hu  val SSIE     = RO(1)
1971d192ad8SXuan Hu  val VSSIE    = RO(2)
1981d192ad8SXuan Hu  val MSIE     = RO(3)
199039cdc35SXuan Hu  // Time Interrupt
2001d192ad8SXuan Hu  val STIE     = RO(5)
2011d192ad8SXuan Hu  val VSTIE    = RO(6)
2021d192ad8SXuan Hu  val MTIE     = RO(7)
203039cdc35SXuan Hu  // External Interrupt
2041d192ad8SXuan Hu  val SEIE     = RO(9)
2051d192ad8SXuan Hu  val VSEIE    = RO(10)
2061d192ad8SXuan Hu  val MEIE     = RO(11)
2071d192ad8SXuan Hu  val SGEIE    = RO(12)
208039cdc35SXuan Hu  // SoC
2091d192ad8SXuan Hu  val LCOFIE   = RO(13) // Counter overflow interrupt
2101d192ad8SXuan Hu  val LC14IE   = RO(14)
2111d192ad8SXuan Hu  val LC15IE   = RO(15)
2121d192ad8SXuan Hu  val LC16IE   = RO(16)
2131d192ad8SXuan Hu  val LC17IE   = RO(17)
2141d192ad8SXuan Hu  val LC18IE   = RO(18)
2151d192ad8SXuan Hu  val LC19IE   = RO(19)
2161d192ad8SXuan Hu  val LC20IE   = RO(20)
2171d192ad8SXuan Hu  val LC21IE   = RO(21)
2181d192ad8SXuan Hu  val LC22IE   = RO(22)
2191d192ad8SXuan Hu  val LC23IE   = RO(23)
2201d192ad8SXuan Hu  val LC24IE   = RO(24)
2211d192ad8SXuan Hu  val LC25IE   = RO(25)
2221d192ad8SXuan Hu  val LC26IE   = RO(26)
2231d192ad8SXuan Hu  val LC27IE   = RO(27)
2241d192ad8SXuan Hu  val LC28IE   = RO(28)
2251d192ad8SXuan Hu  val LC29IE   = RO(29)
2261d192ad8SXuan Hu  val LC30IE   = RO(30)
2271d192ad8SXuan Hu  val LC31IE   = RO(31)
2281d192ad8SXuan Hu  val LC32IE   = RO(32)
2291d192ad8SXuan Hu  val LC33IE   = RO(33)
2301d192ad8SXuan Hu  val LC34IE   = RO(34)
2311d192ad8SXuan Hu  val LPRASEIE = RO(35) // Low-priority RAS event interrupt
2321d192ad8SXuan Hu  val LC36IE   = RO(36)
2331d192ad8SXuan Hu  val LC37IE   = RO(37)
2341d192ad8SXuan Hu  val LC38IE   = RO(38)
2351d192ad8SXuan Hu  val LC39IE   = RO(39)
2361d192ad8SXuan Hu  val LC40IE   = RO(40)
2371d192ad8SXuan Hu  val LC41IE   = RO(41)
2381d192ad8SXuan Hu  val LC42IE   = RO(42)
2391d192ad8SXuan Hu  val HPRASEIE = RO(43) // High-priority RAS event interrupt
2401d192ad8SXuan Hu  val LC44IE   = RO(44)
2411d192ad8SXuan Hu  val LC45IE   = RO(45)
2421d192ad8SXuan Hu  val LC46IE   = RO(46)
2431d192ad8SXuan Hu  val LC47IE   = RO(47)
2441d192ad8SXuan Hu  val LC48IE   = RO(48)
2451d192ad8SXuan Hu  val LC49IE   = RO(49)
2461d192ad8SXuan Hu  val LC50IE   = RO(50)
2471d192ad8SXuan Hu  val LC51IE   = RO(51)
2481d192ad8SXuan Hu  val LC52IE   = RO(52)
2491d192ad8SXuan Hu  val LC53IE   = RO(53)
2501d192ad8SXuan Hu  val LC54IE   = RO(54)
2511d192ad8SXuan Hu  val LC55IE   = RO(55)
2521d192ad8SXuan Hu  val LC56IE   = RO(56)
2531d192ad8SXuan Hu  val LC57IE   = RO(57)
2541d192ad8SXuan Hu  val LC58IE   = RO(58)
2551d192ad8SXuan Hu  val LC59IE   = RO(59)
2561d192ad8SXuan Hu  val LC60IE   = RO(60)
2571d192ad8SXuan Hu  val LC61IE   = RO(61)
2581d192ad8SXuan Hu  val LC62IE   = RO(62)
2591d192ad8SXuan Hu  val LC63IE   = RO(63)
260039cdc35SXuan Hu
261039cdc35SXuan Hu  def getVS = Seq(VSSIE, VSTIE, VSEIE)
262039cdc35SXuan Hu
263039cdc35SXuan Hu  def getHS = Seq(SSIE, STIE, SEIE)
264039cdc35SXuan Hu
265039cdc35SXuan Hu  def getM = Seq(MSIE, MTIE, MEIE)
266039cdc35SXuan Hu
267a2eeddbfSXuan Hu  def getNonVS = this.getHS ++ this.getM ++ this.getLocal :+ this.SGEIE
268a2eeddbfSXuan Hu
2691d192ad8SXuan Hu  def getNonLocal = Seq(
2701d192ad8SXuan Hu    SSIE, VSSIE, MSIE,
2711d192ad8SXuan Hu    STIE, VSTIE, MTIE,
2721d192ad8SXuan Hu    SEIE, VSEIE, MEIE,
2731d192ad8SXuan Hu    SGEIE
2741d192ad8SXuan Hu  )
2758056933dSXuan Hu
2761d192ad8SXuan Hu  def getLocal = Seq(
2771d192ad8SXuan Hu    LCOFIE,LC14IE,LC15IE,
2781d192ad8SXuan Hu    LC16IE,LC17IE,LC18IE,LC19IE,LC20IE,LC21IE,LC22IE,LC23IE,
2791d192ad8SXuan Hu    LC24IE,LC25IE,LC26IE,LC27IE,LC28IE,LC29IE,LC30IE,LC31IE,
2801d192ad8SXuan Hu    LC32IE,LC33IE,LC34IE,LPRASEIE,LC36IE,LC37IE,LC38IE,LC39IE,
2811d192ad8SXuan Hu    LC40IE,LC41IE,LC42IE,HPRASEIE,LC44IE,LC45IE,LC46IE,LC47IE,
2821d192ad8SXuan Hu    LC48IE,LC49IE,LC50IE,LC51IE,LC52IE,LC53IE,LC54IE,LC55IE,
2831d192ad8SXuan Hu    LC56IE,LC57IE,LC58IE,LC59IE,LC60IE,LC61IE,LC62IE,LC63IE
2841d192ad8SXuan Hu  )
2851d192ad8SXuan Hu
2861d192ad8SXuan Hu  def getALL = getNonLocal ++ getLocal
2871d192ad8SXuan Hu
2881d192ad8SXuan Hu  def getRW = getALL.filter(_.isRW)
289039cdc35SXuan Hu}
290237d4cfdSXuan Hu
291c2a2229dSlewislzhclass NonMaskableIRPendingBundle extends CSRBundle {
2928bc90631SZehao Liu  val NMI_31 = RW(31).withReset(0.U)
2938bc90631SZehao Liu  val NMI_43 = RW(43).withReset(0.U)
294c2a2229dSlewislzh  // reserve for more NMI type
295c2a2229dSlewislzh}
296c2a2229dSlewislzhobject NonMaskableIRNO{
2978bc90631SZehao Liu  final val NMI_43 = 43
2988bc90631SZehao Liu  final val NMI_31 = 31
299c2a2229dSlewislzh  // reserve for more NMI type
300c2a2229dSlewislzh
301c2a2229dSlewislzh  val interruptDefaultPrio = Seq(
3028bc90631SZehao Liu    NMI_43, NMI_31
303c2a2229dSlewislzh  )
304c2a2229dSlewislzh  def getIRQHigherThan(irq: Int): Seq[Int] = {
305c2a2229dSlewislzh    val idx = this.interruptDefaultPrio.indexOf(irq, 0)
306c2a2229dSlewislzh    require(idx != -1, s"The irq($irq) does not exists in IntPriority Seq")
307c2a2229dSlewislzh    this.interruptDefaultPrio.slice(0, idx)
308c2a2229dSlewislzh  }
309c2a2229dSlewislzh
310c2a2229dSlewislzh}
311c2a2229dSlewislzh
312237d4cfdSXuan Huobject InterruptNO {
313237d4cfdSXuan Hu  // Software Interrupt
314237d4cfdSXuan Hu  final val SSI  = 1
315237d4cfdSXuan Hu  final val VSSI = 2
316237d4cfdSXuan Hu  final val MSI  = 3
317237d4cfdSXuan Hu  // Time Interrupt
318237d4cfdSXuan Hu  final val STI  = 5
319237d4cfdSXuan Hu  final val VSTI = 6
320237d4cfdSXuan Hu  final val MTI  = 7
321237d4cfdSXuan Hu  // External Interrupt
322237d4cfdSXuan Hu  final val SEI  = 9
323237d4cfdSXuan Hu  final val VSEI = 10
324237d4cfdSXuan Hu  final val MEI  = 11
325237d4cfdSXuan Hu  final val SGEI = 12
3264016eee8SsinceforYy  // SoC
3274016eee8SsinceforYy  final val COI = 13
3284016eee8SsinceforYy  final val LPRASEI = 35
3294016eee8SsinceforYy  final val HPRASEI = 43
3304016eee8SsinceforYy
3313113cca9SsinceforYy  val privArchGroup = Seq(
3324016eee8SsinceforYy    MEI, MSI, MTI,
3334016eee8SsinceforYy    SEI, SSI, STI,
3344016eee8SsinceforYy    SGEI,
3354016eee8SsinceforYy    VSEI, VSSI, VSTI,
336*a2cf5761SsinceforYy    COI, 14, 15,
3374016eee8SsinceforYy  )
338423dd365SXuan Hu
3393174481bSXuan Hu  val localHighGroup = Seq(
3403174481bSXuan Hu    47, 23, 46,
3413174481bSXuan Hu    45, 22, 44,
3423174481bSXuan Hu    HPRASEI, 21, 42,
3433174481bSXuan Hu    41, 20, 40,
3443174481bSXuan Hu  )
3453174481bSXuan Hu
3463174481bSXuan Hu  val localLowGroup = Seq(
3473174481bSXuan Hu    39, 19, 38,
3483174481bSXuan Hu    37, 18, 36,
3493174481bSXuan Hu    LPRASEI, 17, 34,
3503174481bSXuan Hu    33, 16, 32,
3513174481bSXuan Hu  )
3523174481bSXuan Hu
3533174481bSXuan Hu  val customHighestGroup = Seq(
3543174481bSXuan Hu    63, 31, 62,
3553174481bSXuan Hu    61, 30, 60,
3563174481bSXuan Hu  )
3573174481bSXuan Hu
3583174481bSXuan Hu  val customMiddleHighGroup = Seq(
3593174481bSXuan Hu    59, 29, 58,
3603174481bSXuan Hu    57, 28, 56,
3613174481bSXuan Hu  )
3623174481bSXuan Hu
3633174481bSXuan Hu  val customMiddleLowGroup = Seq(
3643174481bSXuan Hu    55, 27, 54,
3653174481bSXuan Hu    53, 26, 52,
3663174481bSXuan Hu  )
3673174481bSXuan Hu
3683174481bSXuan Hu  val customLowestGroup = Seq(
3693174481bSXuan Hu    51, 25, 50,
3703174481bSXuan Hu    49, 24, 48,
3713174481bSXuan Hu  )
3723174481bSXuan Hu
3733113cca9SsinceforYy  val interruptDefaultPrio = customHighestGroup ++
3743113cca9SsinceforYy                            localHighGroup ++
3753113cca9SsinceforYy                            customMiddleHighGroup ++
3763113cca9SsinceforYy                            privArchGroup ++
3773113cca9SsinceforYy                            customMiddleLowGroup ++
3783113cca9SsinceforYy                            localLowGroup ++
3793113cca9SsinceforYy                            customLowestGroup
3803113cca9SsinceforYy
3813174481bSXuan Hu  def getPrioIdxInGroup(group: this.type => Seq[Int])(f: this.type => Int): Int = {
3823174481bSXuan Hu    val idx = group(this).indexOf(f(this))
383423dd365SXuan Hu    assert(idx != -1)
384423dd365SXuan Hu    idx
385423dd365SXuan Hu  }
38673e616deSXuan Hu
38773e616deSXuan Hu  def getVS = Seq(VSSI, VSTI, VSEI)
38873e616deSXuan Hu
38973e616deSXuan Hu  def getHS = Seq(SSI, STI, SEI)
39073e616deSXuan Hu
39173e616deSXuan Hu  def getM = Seq(MSI, MTI, MEI)
39273e616deSXuan Hu
39373e616deSXuan Hu  def getNonLocal = Seq(
39473e616deSXuan Hu    SSI, VSSI, MSI,
39573e616deSXuan Hu    STI, VSTI, MTI,
39673e616deSXuan Hu    SEI, VSEI, MEI,
39773e616deSXuan Hu    SGEI
39873e616deSXuan Hu  )
39937e0d55eSsinceforYy
40037e0d55eSsinceforYy  def getLocal = localHighGroup ++ localLowGroup ++
40137e0d55eSsinceforYy                 customHighestGroup ++ customMiddleHighGroup ++
40237e0d55eSsinceforYy                 customMiddleLowGroup ++ customLowestGroup ++ Seq(COI)
403237d4cfdSXuan Hu}
4041d192ad8SXuan Hu
4051d192ad8SXuan Hutrait HasIpIeBundle { self: CSRModule[_] =>
4061d192ad8SXuan Hu  val mideleg = IO(Input(new MidelegBundle))
4071d192ad8SXuan Hu  val mip     = IO(Input(new MipBundle))
4081d192ad8SXuan Hu  val mie     = IO(Input(new MieBundle))
4091d192ad8SXuan Hu  val mvip    = IO(Input(new MvipBundle))
4101d192ad8SXuan Hu  val mvien   = IO(Input(new MvienBundle))
4111d192ad8SXuan Hu  val hideleg = IO(Input(new HidelegBundle))
4121d192ad8SXuan Hu  val hip     = IO(Input(new HipBundle))
4131d192ad8SXuan Hu  val hie     = IO(Input(new HieBundle))
4141d192ad8SXuan Hu  val hvien   = IO(Input(new HvienBundle))
4151d192ad8SXuan Hu  val hvip    = IO(Input(new HvipBundle))
4161d192ad8SXuan Hu  val sip     = IO(Input(new SipBundle))
4171d192ad8SXuan Hu  val sie     = IO(Input(new SieBundle))
4181d192ad8SXuan Hu  val vsip    = IO(Input(new VSipBundle))
4191d192ad8SXuan Hu  val vsie    = IO(Input(new VSieBundle))
4201d192ad8SXuan Hu  val hgeip   = IO(Input(new HgeipBundle))
4211d192ad8SXuan Hu  val hgeie   = IO(Input(new HgeieBundle))
4221d192ad8SXuan Hu  val hstatusVGEIN = IO(Input(HstatusVgeinField()))
4231d192ad8SXuan Hu}
4241d192ad8SXuan Hu
4251d192ad8SXuan Hutrait ToAliasIpLocalPart extends Bundle {
4261d192ad8SXuan Hu  val LCOFIP   = ValidIO(RO(13)) // Counter overflow interrupt
4271d192ad8SXuan Hu  val LC14IP   = ValidIO(RO(14))
4281d192ad8SXuan Hu  val LC15IP   = ValidIO(RO(15))
4291d192ad8SXuan Hu  val LC16IP   = ValidIO(RO(16))
4301d192ad8SXuan Hu  val LC17IP   = ValidIO(RO(17))
4311d192ad8SXuan Hu  val LC18IP   = ValidIO(RO(18))
4321d192ad8SXuan Hu  val LC19IP   = ValidIO(RO(19))
4331d192ad8SXuan Hu  val LC20IP   = ValidIO(RO(20))
4341d192ad8SXuan Hu  val LC21IP   = ValidIO(RO(21))
4351d192ad8SXuan Hu  val LC22IP   = ValidIO(RO(22))
4361d192ad8SXuan Hu  val LC23IP   = ValidIO(RO(23))
4371d192ad8SXuan Hu  val LC24IP   = ValidIO(RO(24))
4381d192ad8SXuan Hu  val LC25IP   = ValidIO(RO(25))
4391d192ad8SXuan Hu  val LC26IP   = ValidIO(RO(26))
4401d192ad8SXuan Hu  val LC27IP   = ValidIO(RO(27))
4411d192ad8SXuan Hu  val LC28IP   = ValidIO(RO(28))
4421d192ad8SXuan Hu  val LC29IP   = ValidIO(RO(29))
4431d192ad8SXuan Hu  val LC30IP   = ValidIO(RO(30))
4441d192ad8SXuan Hu  val LC31IP   = ValidIO(RO(31))
4451d192ad8SXuan Hu  val LC32IP   = ValidIO(RO(32))
4461d192ad8SXuan Hu  val LC33IP   = ValidIO(RO(33))
4471d192ad8SXuan Hu  val LC34IP   = ValidIO(RO(34))
4481d192ad8SXuan Hu  val LPRASEIP = ValidIO(RO(35)) // Low-priority RAS event interrupt
4491d192ad8SXuan Hu  val LC36IP   = ValidIO(RO(36))
4501d192ad8SXuan Hu  val LC37IP   = ValidIO(RO(37))
4511d192ad8SXuan Hu  val LC38IP   = ValidIO(RO(38))
4521d192ad8SXuan Hu  val LC39IP   = ValidIO(RO(39))
4531d192ad8SXuan Hu  val LC40IP   = ValidIO(RO(40))
4541d192ad8SXuan Hu  val LC41IP   = ValidIO(RO(41))
4551d192ad8SXuan Hu  val LC42IP   = ValidIO(RO(42))
4561d192ad8SXuan Hu  val HPRASEIP = ValidIO(RO(43)) // High-priority RAS event interrupt
4571d192ad8SXuan Hu  val LC44IP   = ValidIO(RO(44))
4581d192ad8SXuan Hu  val LC45IP   = ValidIO(RO(45))
4591d192ad8SXuan Hu  val LC46IP   = ValidIO(RO(46))
4601d192ad8SXuan Hu  val LC47IP   = ValidIO(RO(47))
4611d192ad8SXuan Hu  val LC48IP   = ValidIO(RO(48))
4621d192ad8SXuan Hu  val LC49IP   = ValidIO(RO(49))
4631d192ad8SXuan Hu  val LC50IP   = ValidIO(RO(50))
4641d192ad8SXuan Hu  val LC51IP   = ValidIO(RO(51))
4651d192ad8SXuan Hu  val LC52IP   = ValidIO(RO(52))
4661d192ad8SXuan Hu  val LC53IP   = ValidIO(RO(53))
4671d192ad8SXuan Hu  val LC54IP   = ValidIO(RO(54))
4681d192ad8SXuan Hu  val LC55IP   = ValidIO(RO(55))
4691d192ad8SXuan Hu  val LC56IP   = ValidIO(RO(56))
4701d192ad8SXuan Hu  val LC57IP   = ValidIO(RO(57))
4711d192ad8SXuan Hu  val LC58IP   = ValidIO(RO(58))
4721d192ad8SXuan Hu  val LC59IP   = ValidIO(RO(59))
4731d192ad8SXuan Hu  val LC60IP   = ValidIO(RO(60))
4741d192ad8SXuan Hu  val LC61IP   = ValidIO(RO(61))
4751d192ad8SXuan Hu  val LC62IP   = ValidIO(RO(62))
4761d192ad8SXuan Hu  val LC63IP   = ValidIO(RO(63))
4771d192ad8SXuan Hu
4781d192ad8SXuan Hu  def getLocal = Seq(
4791d192ad8SXuan Hu    LCOFIP, LC14IP, LC15IP,
4801d192ad8SXuan Hu    LC16IP, LC17IP, LC18IP, LC19IP, LC20IP, LC21IP, LC22IP, LC23IP,
4811d192ad8SXuan Hu    LC24IP, LC25IP, LC26IP, LC27IP, LC28IP, LC29IP, LC30IP, LC31IP,
4821d192ad8SXuan Hu    LC32IP, LC33IP, LC34IP, LPRASEIP, LC36IP, LC37IP, LC38IP, LC39IP,
4831d192ad8SXuan Hu    LC40IP, LC41IP, LC42IP, HPRASEIP, LC44IP, LC45IP, LC46IP, LC47IP,
4841d192ad8SXuan Hu    LC48IP, LC49IP, LC50IP, LC51IP, LC52IP, LC53IP, LC54IP, LC55IP,
4851d192ad8SXuan Hu    LC56IP, LC57IP, LC58IP, LC59IP, LC60IP, LC61IP, LC62IP, LC63IP,
4861d192ad8SXuan Hu  )
4871d192ad8SXuan Hu}
4881d192ad8SXuan Hu
4891d192ad8SXuan Huclass IeValidBundle extends Bundle with IgnoreSeqInBundle {
4901d192ad8SXuan Hu  val SSIE     = ValidIO(RO( 1))
4911d192ad8SXuan Hu  val VSSIE    = ValidIO(RO( 2))
4921d192ad8SXuan Hu  val MSIE     = ValidIO(RO( 3))
4931d192ad8SXuan Hu  val STIE     = ValidIO(RO( 5))
4941d192ad8SXuan Hu  val VSTIE    = ValidIO(RO( 6))
4951d192ad8SXuan Hu  val MTIE     = ValidIO(RO( 7))
4961d192ad8SXuan Hu  val SEIE     = ValidIO(RO( 9))
4971d192ad8SXuan Hu  val VSEIE    = ValidIO(RO(10))
4981d192ad8SXuan Hu  val MEIE     = ValidIO(RO(11))
4991d192ad8SXuan Hu  val SGEIE    = ValidIO(RO(12))
5001d192ad8SXuan Hu
5011d192ad8SXuan Hu  val LCOFIE   = ValidIO(RO(13)) // Counter overflow interrupt
5021d192ad8SXuan Hu  val LC14IE   = ValidIO(RO(14))
5031d192ad8SXuan Hu  val LC15IE   = ValidIO(RO(15))
5041d192ad8SXuan Hu  val LC16IE   = ValidIO(RO(16))
5051d192ad8SXuan Hu  val LC17IE   = ValidIO(RO(17))
5061d192ad8SXuan Hu  val LC18IE   = ValidIO(RO(18))
5071d192ad8SXuan Hu  val LC19IE   = ValidIO(RO(19))
5081d192ad8SXuan Hu  val LC20IE   = ValidIO(RO(20))
5091d192ad8SXuan Hu  val LC21IE   = ValidIO(RO(21))
5101d192ad8SXuan Hu  val LC22IE   = ValidIO(RO(22))
5111d192ad8SXuan Hu  val LC23IE   = ValidIO(RO(23))
5121d192ad8SXuan Hu  val LC24IE   = ValidIO(RO(24))
5131d192ad8SXuan Hu  val LC25IE   = ValidIO(RO(25))
5141d192ad8SXuan Hu  val LC26IE   = ValidIO(RO(26))
5151d192ad8SXuan Hu  val LC27IE   = ValidIO(RO(27))
5161d192ad8SXuan Hu  val LC28IE   = ValidIO(RO(28))
5171d192ad8SXuan Hu  val LC29IE   = ValidIO(RO(29))
5181d192ad8SXuan Hu  val LC30IE   = ValidIO(RO(30))
5191d192ad8SXuan Hu  val LC31IE   = ValidIO(RO(31))
5201d192ad8SXuan Hu  val LC32IE   = ValidIO(RO(32))
5211d192ad8SXuan Hu  val LC33IE   = ValidIO(RO(33))
5221d192ad8SXuan Hu  val LC34IE   = ValidIO(RO(34))
5231d192ad8SXuan Hu  val LPRASEIE = ValidIO(RO(35)) // Low-priority RAS event interrupt
5241d192ad8SXuan Hu  val LC36IE   = ValidIO(RO(36))
5251d192ad8SXuan Hu  val LC37IE   = ValidIO(RO(37))
5261d192ad8SXuan Hu  val LC38IE   = ValidIO(RO(38))
5271d192ad8SXuan Hu  val LC39IE   = ValidIO(RO(39))
5281d192ad8SXuan Hu  val LC40IE   = ValidIO(RO(40))
5291d192ad8SXuan Hu  val LC41IE   = ValidIO(RO(41))
5301d192ad8SXuan Hu  val LC42IE   = ValidIO(RO(42))
5311d192ad8SXuan Hu  val HPRASEIE = ValidIO(RO(43)) // High-priority RAS event interrupt
5321d192ad8SXuan Hu  val LC44IE   = ValidIO(RO(44))
5331d192ad8SXuan Hu  val LC45IE   = ValidIO(RO(45))
5341d192ad8SXuan Hu  val LC46IE   = ValidIO(RO(46))
5351d192ad8SXuan Hu  val LC47IE   = ValidIO(RO(47))
5361d192ad8SXuan Hu  val LC48IE   = ValidIO(RO(48))
5371d192ad8SXuan Hu  val LC49IE   = ValidIO(RO(49))
5381d192ad8SXuan Hu  val LC50IE   = ValidIO(RO(50))
5391d192ad8SXuan Hu  val LC51IE   = ValidIO(RO(51))
5401d192ad8SXuan Hu  val LC52IE   = ValidIO(RO(52))
5411d192ad8SXuan Hu  val LC53IE   = ValidIO(RO(53))
5421d192ad8SXuan Hu  val LC54IE   = ValidIO(RO(54))
5431d192ad8SXuan Hu  val LC55IE   = ValidIO(RO(55))
5441d192ad8SXuan Hu  val LC56IE   = ValidIO(RO(56))
5451d192ad8SXuan Hu  val LC57IE   = ValidIO(RO(57))
5461d192ad8SXuan Hu  val LC58IE   = ValidIO(RO(58))
5471d192ad8SXuan Hu  val LC59IE   = ValidIO(RO(59))
5481d192ad8SXuan Hu  val LC60IE   = ValidIO(RO(60))
5491d192ad8SXuan Hu  val LC61IE   = ValidIO(RO(61))
5501d192ad8SXuan Hu  val LC62IE   = ValidIO(RO(62))
5511d192ad8SXuan Hu  val LC63IE   = ValidIO(RO(63))
5521d192ad8SXuan Hu
5531d192ad8SXuan Hu  val getVS = Seq(VSSIE, VSTIE, VSEIE)
5541d192ad8SXuan Hu
5551d192ad8SXuan Hu  def getHS = Seq(SSIE, STIE, SEIE)
5561d192ad8SXuan Hu
5571d192ad8SXuan Hu  def getM = Seq(MSIE, MTIE, MEIE)
5581d192ad8SXuan Hu
5591d192ad8SXuan Hu  def getNonLocal = Seq(
5601d192ad8SXuan Hu    SSIE, VSSIE, MSIE,
5611d192ad8SXuan Hu    STIE, VSTIE, MTIE,
5621d192ad8SXuan Hu    SEIE, VSEIE, MEIE,
5631d192ad8SXuan Hu    SGEIE
5641d192ad8SXuan Hu  )
5651d192ad8SXuan Hu
5661d192ad8SXuan Hu  def getLocal = Seq(
5671d192ad8SXuan Hu    LCOFIE, LC14IE, LC15IE,
5681d192ad8SXuan Hu    LC16IE, LC17IE, LC18IE, LC19IE, LC20IE, LC21IE, LC22IE, LC23IE,
5691d192ad8SXuan Hu    LC24IE, LC25IE, LC26IE, LC27IE, LC28IE, LC29IE, LC30IE, LC31IE,
5701d192ad8SXuan Hu    LC32IE, LC33IE, LC34IE, LPRASEIE, LC36IE, LC37IE, LC38IE, LC39IE,
5711d192ad8SXuan Hu    LC40IE, LC41IE, LC42IE, HPRASEIE, LC44IE, LC45IE, LC46IE, LC47IE,
5721d192ad8SXuan Hu    LC48IE, LC49IE, LC50IE, LC51IE, LC52IE, LC53IE, LC54IE, LC55IE,
5731d192ad8SXuan Hu    LC56IE, LC57IE, LC58IE, LC59IE, LC60IE, LC61IE, LC62IE, LC63IE,
5741d192ad8SXuan Hu  )
5751d192ad8SXuan Hu
5761d192ad8SXuan Hu  def getAll = getNonLocal ++ getLocal
5771d192ad8SXuan Hu
5781d192ad8SXuan Hu  def getRW = getAll.filter(_.bits.isRW)
5791d192ad8SXuan Hu
5801d192ad8SXuan Hu  def getNonRW = getAll.filterNot(_.bits.isRW)
5811d192ad8SXuan Hu
5821d192ad8SXuan Hu  def getByNum(num: Int) = getAll.find(_.bits.lsb == num).get
5831d192ad8SXuan Hu
5841d192ad8SXuan Hu  def connectZeroNonRW : this.type = {
5851d192ad8SXuan Hu    this.getNonRW.foreach(_.specifyField(
5861d192ad8SXuan Hu      _.valid := false.B,
5871d192ad8SXuan Hu      _.bits  := DontCare
5881d192ad8SXuan Hu    ))
5891d192ad8SXuan Hu    this
5901d192ad8SXuan Hu  }
5911d192ad8SXuan Hu}
5921d192ad8SXuan Hu
5931d192ad8SXuan Huclass IpValidBundle extends Bundle with IgnoreSeqInBundle {
5941d192ad8SXuan Hu  val SSIP     = ValidIO(RO( 1))
5951d192ad8SXuan Hu  val VSSIP    = ValidIO(RO( 2))
5961d192ad8SXuan Hu  val MSIP     = ValidIO(RO( 3))
5971d192ad8SXuan Hu  val STIP     = ValidIO(RO( 5))
5981d192ad8SXuan Hu  val VSTIP    = ValidIO(RO( 6))
5991d192ad8SXuan Hu  val MTIP     = ValidIO(RO( 7))
6001d192ad8SXuan Hu  val SEIP     = ValidIO(RO( 9))
6011d192ad8SXuan Hu  val VSEIP    = ValidIO(RO(10))
6021d192ad8SXuan Hu  val MEIP     = ValidIO(RO(11))
6031d192ad8SXuan Hu  val SGEIP    = ValidIO(RO(12))
6041d192ad8SXuan Hu
6051d192ad8SXuan Hu  val LCOFIP   = ValidIO(RO(13)) // Counter overflow interrupt
6061d192ad8SXuan Hu  val LC14IP   = ValidIO(RO(14))
6071d192ad8SXuan Hu  val LC15IP   = ValidIO(RO(15))
6081d192ad8SXuan Hu  val LC16IP   = ValidIO(RO(16))
6091d192ad8SXuan Hu  val LC17IP   = ValidIO(RO(17))
6101d192ad8SXuan Hu  val LC18IP   = ValidIO(RO(18))
6111d192ad8SXuan Hu  val LC19IP   = ValidIO(RO(19))
6121d192ad8SXuan Hu  val LC20IP   = ValidIO(RO(20))
6131d192ad8SXuan Hu  val LC21IP   = ValidIO(RO(21))
6141d192ad8SXuan Hu  val LC22IP   = ValidIO(RO(22))
6151d192ad8SXuan Hu  val LC23IP   = ValidIO(RO(23))
6161d192ad8SXuan Hu  val LC24IP   = ValidIO(RO(24))
6171d192ad8SXuan Hu  val LC25IP   = ValidIO(RO(25))
6181d192ad8SXuan Hu  val LC26IP   = ValidIO(RO(26))
6191d192ad8SXuan Hu  val LC27IP   = ValidIO(RO(27))
6201d192ad8SXuan Hu  val LC28IP   = ValidIO(RO(28))
6211d192ad8SXuan Hu  val LC29IP   = ValidIO(RO(29))
6221d192ad8SXuan Hu  val LC30IP   = ValidIO(RO(30))
6231d192ad8SXuan Hu  val LC31IP   = ValidIO(RO(31))
6241d192ad8SXuan Hu  val LC32IP   = ValidIO(RO(32))
6251d192ad8SXuan Hu  val LC33IP   = ValidIO(RO(33))
6261d192ad8SXuan Hu  val LC34IP   = ValidIO(RO(34))
6271d192ad8SXuan Hu  val LPRASEIP = ValidIO(RO(35)) // Low-priority RAS event interrupt
6281d192ad8SXuan Hu  val LC36IP   = ValidIO(RO(36))
6291d192ad8SXuan Hu  val LC37IP   = ValidIO(RO(37))
6301d192ad8SXuan Hu  val LC38IP   = ValidIO(RO(38))
6311d192ad8SXuan Hu  val LC39IP   = ValidIO(RO(39))
6321d192ad8SXuan Hu  val LC40IP   = ValidIO(RO(40))
6331d192ad8SXuan Hu  val LC41IP   = ValidIO(RO(41))
6341d192ad8SXuan Hu  val LC42IP   = ValidIO(RO(42))
6351d192ad8SXuan Hu  val HPRASEIP = ValidIO(RO(43)) // High-priority RAS event interrupt
6361d192ad8SXuan Hu  val LC44IP   = ValidIO(RO(44))
6371d192ad8SXuan Hu  val LC45IP   = ValidIO(RO(45))
6381d192ad8SXuan Hu  val LC46IP   = ValidIO(RO(46))
6391d192ad8SXuan Hu  val LC47IP   = ValidIO(RO(47))
6401d192ad8SXuan Hu  val LC48IP   = ValidIO(RO(48))
6411d192ad8SXuan Hu  val LC49IP   = ValidIO(RO(49))
6421d192ad8SXuan Hu  val LC50IP   = ValidIO(RO(50))
6431d192ad8SXuan Hu  val LC51IP   = ValidIO(RO(51))
6441d192ad8SXuan Hu  val LC52IP   = ValidIO(RO(52))
6451d192ad8SXuan Hu  val LC53IP   = ValidIO(RO(53))
6461d192ad8SXuan Hu  val LC54IP   = ValidIO(RO(54))
6471d192ad8SXuan Hu  val LC55IP   = ValidIO(RO(55))
6481d192ad8SXuan Hu  val LC56IP   = ValidIO(RO(56))
6491d192ad8SXuan Hu  val LC57IP   = ValidIO(RO(57))
6501d192ad8SXuan Hu  val LC58IP   = ValidIO(RO(58))
6511d192ad8SXuan Hu  val LC59IP   = ValidIO(RO(59))
6521d192ad8SXuan Hu  val LC60IP   = ValidIO(RO(60))
6531d192ad8SXuan Hu  val LC61IP   = ValidIO(RO(61))
6541d192ad8SXuan Hu  val LC62IP   = ValidIO(RO(62))
6551d192ad8SXuan Hu  val LC63IP   = ValidIO(RO(63))
6561d192ad8SXuan Hu
6571d192ad8SXuan Hu  val getVS = Seq(VSSIP, VSTIP, VSEIP)
6581d192ad8SXuan Hu
6591d192ad8SXuan Hu  def getHS = Seq(SSIP, STIP, SEIP)
6601d192ad8SXuan Hu
6611d192ad8SXuan Hu  def getM = Seq(MSIP, MTIP, MEIP)
6621d192ad8SXuan Hu
6631d192ad8SXuan Hu  def getNonLocal = Seq(
6641d192ad8SXuan Hu    SSIP, VSSIP, MSIP,
6651d192ad8SXuan Hu    STIP, VSTIP, MTIP,
6661d192ad8SXuan Hu    SEIP, VSEIP, MEIP,
6671d192ad8SXuan Hu    SGEIP
6681d192ad8SXuan Hu  )
6691d192ad8SXuan Hu
6701d192ad8SXuan Hu  def getLocal = Seq(
6711d192ad8SXuan Hu    LCOFIP, LC14IP, LC15IP,
6721d192ad8SXuan Hu    LC16IP, LC17IP, LC18IP, LC19IP, LC20IP, LC21IP, LC22IP, LC23IP,
6731d192ad8SXuan Hu    LC24IP, LC25IP, LC26IP, LC27IP, LC28IP, LC29IP, LC30IP, LC31IP,
6741d192ad8SXuan Hu    LC32IP, LC33IP, LC34IP, LPRASEIP, LC36IP, LC37IP, LC38IP, LC39IP,
6751d192ad8SXuan Hu    LC40IP, LC41IP, LC42IP, HPRASEIP, LC44IP, LC45IP, LC46IP, LC47IP,
6761d192ad8SXuan Hu    LC48IP, LC49IP, LC50IP, LC51IP, LC52IP, LC53IP, LC54IP, LC55IP,
6771d192ad8SXuan Hu    LC56IP, LC57IP, LC58IP, LC59IP, LC60IP, LC61IP, LC62IP, LC63IP,
6781d192ad8SXuan Hu  )
6791d192ad8SXuan Hu
6801d192ad8SXuan Hu  def getAll = getNonLocal ++ getLocal
6811d192ad8SXuan Hu
6821d192ad8SXuan Hu  def getRW = getAll.filter(_.bits.isRW)
6831d192ad8SXuan Hu
6841d192ad8SXuan Hu  def getNonRW = getAll.filterNot(_.bits.isRW)
6851d192ad8SXuan Hu
6861d192ad8SXuan Hu  def getByNum(num: Int) = getAll.find(_.bits.lsb == num).get
6871d192ad8SXuan Hu
6881d192ad8SXuan Hu  def connectZeroNonRW : this.type = {
6891d192ad8SXuan Hu    this.getNonRW.foreach(_.specifyField(
6901d192ad8SXuan Hu      _.valid := false.B,
6911d192ad8SXuan Hu      _.bits  := DontCare,
6921d192ad8SXuan Hu    ))
6931d192ad8SXuan Hu    this
6941d192ad8SXuan Hu  }
6951d192ad8SXuan Hu}
696