1package xiangshan.backend.fu.NewCSR 2 3import chisel3._ 4import chisel3.util._ 5import xiangshan.backend.fu.NewCSR.CSRDefines.{CSRROField => RO, CSRRWField => RW} 6import xiangshan.backend.fu.NewCSR.ChiselRecordForField.AddRecordSpecifyFields 7 8class InterruptBundle extends CSRBundle { 9 // Software Interrupt 10 val SSI = RW(1) 11 val VSSI = RW(2) 12 val MSI = RW(3) 13 // Time Interrupt 14 val STI = RW(5) 15 val VSTI = RW(6) 16 val MTI = RW(7) 17 // External Interrupt 18 val SEI = RW(9) 19 val VSEI = RW(10) 20 val MEI = RW(11) 21 val SGEI = RW(12) 22 // SoC 23 val LCOFI = RW(13) // Counter overflow interrupt 24 val LC14I = RO(14) 25 val LC15I = RO(15) 26 val LC16I = RO(16) 27 val LC17I = RO(17) 28 val LC18I = RO(18) 29 val LC19I = RO(19) 30 val LC20I = RO(20) 31 val LC21I = RO(21) 32 val LC22I = RO(22) 33 val LC23I = RO(23) 34 val LC24I = RO(24) 35 val LC25I = RO(25) 36 val LC26I = RO(26) 37 val LC27I = RO(27) 38 val LC28I = RO(28) 39 val LC29I = RO(29) 40 val LC30I = RO(30) 41 val LC31I = RO(31) 42 val LC32I = RO(32) 43 val LC33I = RO(33) 44 val LC34I = RO(34) 45 val LPRASEI = RO(35) 46 val LC36I = RO(36) 47 val LC37I = RO(37) 48 val LC38I = RO(38) 49 val LC39I = RO(39) 50 val LC40I = RO(40) 51 val LC41I = RO(41) 52 val LC42I = RO(42) 53 val HPRASEI = RO(43) 54 val LC44I = RO(44) 55 val LC45I = RO(45) 56 val LC46I = RO(46) 57 val LC47I = RO(47) 58 val LC48I = RO(48) 59 val LC49I = RO(49) 60 val LC50I = RO(50) 61 val LC51I = RO(51) 62 val LC52I = RO(52) 63 val LC53I = RO(53) 64 val LC54I = RO(54) 65 val LC55I = RO(55) 66 val LC56I = RO(56) 67 val LC57I = RO(57) 68 val LC58I = RO(58) 69 val LC59I = RO(59) 70 val LC60I = RO(60) 71 val LC61I = RO(61) 72 val LC62I = RO(62) 73 val LC63I = RO(63) 74 75 def getVS = Seq(VSSI, VSTI, VSEI) 76 77 def getHS = Seq(SSI, STI, SEI) 78 79 def getM = Seq(MSI, MTI, MEI) 80 81 def getNonLocal = Seq( 82 SSI, VSSI, MSI, 83 STI, VSTI, MTI, 84 SEI, VSEI, MEI, 85 SGEI 86 ) 87 88 def getLocal = Seq( 89 LCOFI,LC14I,LC15I, 90 LC16I,LC17I,LC18I,LC19I,LC20I,LC21I,LC22I,LC23I, 91 LC24I,LC25I,LC26I,LC27I,LC28I,LC29I,LC30I,LC31I, 92 LC32I,LC33I,LC34I,LPRASEI,LC36I,LC37I,LC38I,LC39I, 93 LC40I,LC41I,LC42I,HPRASEI,LC44I,LC45I,LC46I,LC47I, 94 LC48I,LC49I,LC50I,LC51I,LC52I,LC53I,LC54I,LC55I, 95 LC56I,LC57I,LC58I,LC59I,LC60I,LC61I,LC62I,LC63I, 96 ) 97 98 def getALL = getNonLocal ++ getLocal 99} 100 101class InterruptPendingBundle extends CSRBundle { 102 // Software Interrupt 103 val SSIP = RO(1) 104 val VSSIP = RO(2) 105 val MSIP = RO(3) 106 // Time Interrupt 107 val STIP = RO(5) 108 val VSTIP = RO(6) 109 val MTIP = RO(7) 110 // External Interrupt 111 val SEIP = RO(9) 112 val VSEIP = RO(10) 113 val MEIP = RO(11) 114 val SGEIP = RO(12) 115 // Local Interrupt 116 val LCOFIP = RO(13) // Counter overflow interrupt 117 val LC14IP = RO(14) 118 val LC15IP = RO(15) 119 val LC16IP = RO(16) 120 val LC17IP = RO(17) 121 val LC18IP = RO(18) 122 val LC19IP = RO(19) 123 val LC20IP = RO(20) 124 val LC21IP = RO(21) 125 val LC22IP = RO(22) 126 val LC23IP = RO(23) 127 val LC24IP = RO(24) 128 val LC25IP = RO(25) 129 val LC26IP = RO(26) 130 val LC27IP = RO(27) 131 val LC28IP = RO(28) 132 val LC29IP = RO(29) 133 val LC30IP = RO(30) 134 val LC31IP = RO(31) 135 val LC32IP = RO(32) 136 val LC33IP = RO(33) 137 val LC34IP = RO(34) 138 val LPRASEIP = RO(35) // Low-priority RAS event interrupt 139 val LC36IP = RO(36) 140 val LC37IP = RO(37) 141 val LC38IP = RO(38) 142 val LC39IP = RO(39) 143 val LC40IP = RO(40) 144 val LC41IP = RO(41) 145 val LC42IP = RO(42) 146 val HPRASEIP = RO(43) // High-priority RAS event interrupt 147 val LC44IP = RO(44) 148 val LC45IP = RO(45) 149 val LC46IP = RO(46) 150 val LC47IP = RO(47) 151 val LC48IP = RO(48) 152 val LC49IP = RO(49) 153 val LC50IP = RO(50) 154 val LC51IP = RO(51) 155 val LC52IP = RO(52) 156 val LC53IP = RO(53) 157 val LC54IP = RO(54) 158 val LC55IP = RO(55) 159 val LC56IP = RO(56) 160 val LC57IP = RO(57) 161 val LC58IP = RO(58) 162 val LC59IP = RO(59) 163 val LC60IP = RO(60) 164 val LC61IP = RO(61) 165 val LC62IP = RO(62) 166 val LC63IP = RO(63) 167 168 def getVS = Seq(VSSIP, VSTIP, VSEIP) 169 170 def getHS = Seq(SSIP, STIP, SEIP) 171 172 def getM = Seq(MSIP, MTIP, MEIP) 173 174 def getNonLocal = Seq( 175 SSIP, VSSIP, MSIP, 176 STIP, VSTIP, MTIP, 177 SEIP, VSEIP, MEIP, 178 SGEIP 179 ) 180 181 def getLocal = Seq( 182 LCOFIP,LC14IP,LC15IP, 183 LC16IP,LC17IP,LC18IP,LC19IP,LC20IP,LC21IP,LC22IP,LC23IP, 184 LC24IP,LC25IP,LC26IP,LC27IP,LC28IP,LC29IP,LC30IP,LC31IP, 185 LC32IP,LC33IP,LC34IP,LPRASEIP,LC36IP,LC37IP,LC38IP,LC39IP, 186 LC40IP,LC41IP,LC42IP,HPRASEIP,LC44IP,LC45IP,LC46IP,LC47IP, 187 LC48IP,LC49IP,LC50IP,LC51IP,LC52IP,LC53IP,LC54IP,LC55IP, 188 LC56IP,LC57IP,LC58IP,LC59IP,LC60IP,LC61IP,LC62IP,LC63IP, 189 ) 190 191 def getALL = getNonLocal ++ getLocal 192} 193 194class InterruptEnableBundle extends CSRBundle { 195 // Software Interrupt 196 val SSIE = RO(1) 197 val VSSIE = RO(2) 198 val MSIE = RO(3) 199 // Time Interrupt 200 val STIE = RO(5) 201 val VSTIE = RO(6) 202 val MTIE = RO(7) 203 // External Interrupt 204 val SEIE = RO(9) 205 val VSEIE = RO(10) 206 val MEIE = RO(11) 207 val SGEIE = RO(12) 208 // SoC 209 val LCOFIE = RO(13) // Counter overflow interrupt 210 val LC14IE = RO(14) 211 val LC15IE = RO(15) 212 val LC16IE = RO(16) 213 val LC17IE = RO(17) 214 val LC18IE = RO(18) 215 val LC19IE = RO(19) 216 val LC20IE = RO(20) 217 val LC21IE = RO(21) 218 val LC22IE = RO(22) 219 val LC23IE = RO(23) 220 val LC24IE = RO(24) 221 val LC25IE = RO(25) 222 val LC26IE = RO(26) 223 val LC27IE = RO(27) 224 val LC28IE = RO(28) 225 val LC29IE = RO(29) 226 val LC30IE = RO(30) 227 val LC31IE = RO(31) 228 val LC32IE = RO(32) 229 val LC33IE = RO(33) 230 val LC34IE = RO(34) 231 val LPRASEIE = RO(35) // Low-priority RAS event interrupt 232 val LC36IE = RO(36) 233 val LC37IE = RO(37) 234 val LC38IE = RO(38) 235 val LC39IE = RO(39) 236 val LC40IE = RO(40) 237 val LC41IE = RO(41) 238 val LC42IE = RO(42) 239 val HPRASEIE = RO(43) // High-priority RAS event interrupt 240 val LC44IE = RO(44) 241 val LC45IE = RO(45) 242 val LC46IE = RO(46) 243 val LC47IE = RO(47) 244 val LC48IE = RO(48) 245 val LC49IE = RO(49) 246 val LC50IE = RO(50) 247 val LC51IE = RO(51) 248 val LC52IE = RO(52) 249 val LC53IE = RO(53) 250 val LC54IE = RO(54) 251 val LC55IE = RO(55) 252 val LC56IE = RO(56) 253 val LC57IE = RO(57) 254 val LC58IE = RO(58) 255 val LC59IE = RO(59) 256 val LC60IE = RO(60) 257 val LC61IE = RO(61) 258 val LC62IE = RO(62) 259 val LC63IE = RO(63) 260 261 def getVS = Seq(VSSIE, VSTIE, VSEIE) 262 263 def getHS = Seq(SSIE, STIE, SEIE) 264 265 def getM = Seq(MSIE, MTIE, MEIE) 266 267 def getNonVS = this.getHS ++ this.getM ++ this.getLocal :+ this.SGEIE 268 269 def getNonLocal = Seq( 270 SSIE, VSSIE, MSIE, 271 STIE, VSTIE, MTIE, 272 SEIE, VSEIE, MEIE, 273 SGEIE 274 ) 275 276 def getLocal = Seq( 277 LCOFIE,LC14IE,LC15IE, 278 LC16IE,LC17IE,LC18IE,LC19IE,LC20IE,LC21IE,LC22IE,LC23IE, 279 LC24IE,LC25IE,LC26IE,LC27IE,LC28IE,LC29IE,LC30IE,LC31IE, 280 LC32IE,LC33IE,LC34IE,LPRASEIE,LC36IE,LC37IE,LC38IE,LC39IE, 281 LC40IE,LC41IE,LC42IE,HPRASEIE,LC44IE,LC45IE,LC46IE,LC47IE, 282 LC48IE,LC49IE,LC50IE,LC51IE,LC52IE,LC53IE,LC54IE,LC55IE, 283 LC56IE,LC57IE,LC58IE,LC59IE,LC60IE,LC61IE,LC62IE,LC63IE 284 ) 285 286 def getALL = getNonLocal ++ getLocal 287 288 def getRW = getALL.filter(_.isRW) 289} 290 291class NonMaskableIRPendingBundle extends CSRBundle { 292 val NMI_31 = RW(31).withReset(0.U) 293 val NMI_43 = RW(43).withReset(0.U) 294 // reserve for more NMI type 295} 296object NonMaskableIRNO{ 297 final val NMI_43 = 43 298 final val NMI_31 = 31 299 // reserve for more NMI type 300 301 val interruptDefaultPrio = Seq( 302 NMI_43, NMI_31 303 ) 304 def getIRQHigherThan(irq: Int): Seq[Int] = { 305 val idx = this.interruptDefaultPrio.indexOf(irq, 0) 306 require(idx != -1, s"The irq($irq) does not exists in IntPriority Seq") 307 this.interruptDefaultPrio.slice(0, idx) 308 } 309 310} 311 312object InterruptNO { 313 // Software Interrupt 314 final val SSI = 1 315 final val VSSI = 2 316 final val MSI = 3 317 // Time Interrupt 318 final val STI = 5 319 final val VSTI = 6 320 final val MTI = 7 321 // External Interrupt 322 final val SEI = 9 323 final val VSEI = 10 324 final val MEI = 11 325 final val SGEI = 12 326 // SoC 327 final val COI = 13 328 final val LPRASEI = 35 329 final val HPRASEI = 43 330 331 val privArchGroup = Seq( 332 MEI, MSI, MTI, 333 SEI, SSI, STI, 334 SGEI, 335 VSEI, VSSI, VSTI, 336 COI, 14, 15, 337 ) 338 339 val localHighGroup = Seq( 340 47, 23, 46, 341 45, 22, 44, 342 HPRASEI, 21, 42, 343 41, 20, 40, 344 ) 345 346 val localLowGroup = Seq( 347 39, 19, 38, 348 37, 18, 36, 349 LPRASEI, 17, 34, 350 33, 16, 32, 351 ) 352 353 val customHighestGroup = Seq( 354 63, 31, 62, 355 61, 30, 60, 356 ) 357 358 val customMiddleHighGroup = Seq( 359 59, 29, 58, 360 57, 28, 56, 361 ) 362 363 val customMiddleLowGroup = Seq( 364 55, 27, 54, 365 53, 26, 52, 366 ) 367 368 val customLowestGroup = Seq( 369 51, 25, 50, 370 49, 24, 48, 371 ) 372 373 val interruptDefaultPrio = customHighestGroup ++ 374 localHighGroup ++ 375 customMiddleHighGroup ++ 376 privArchGroup ++ 377 customMiddleLowGroup ++ 378 localLowGroup ++ 379 customLowestGroup 380 381 def getPrioIdxInGroup(group: this.type => Seq[Int])(f: this.type => Int): Int = { 382 val idx = group(this).indexOf(f(this)) 383 assert(idx != -1) 384 idx 385 } 386 387 def getVS = Seq(VSSI, VSTI, VSEI) 388 389 def getHS = Seq(SSI, STI, SEI) 390 391 def getM = Seq(MSI, MTI, MEI) 392 393 def getNonLocal = Seq( 394 SSI, VSSI, MSI, 395 STI, VSTI, MTI, 396 SEI, VSEI, MEI, 397 SGEI 398 ) 399 400 def getLocal = localHighGroup ++ localLowGroup ++ 401 customHighestGroup ++ customMiddleHighGroup ++ 402 customMiddleLowGroup ++ customLowestGroup ++ Seq(COI) 403} 404 405trait HasIpIeBundle { self: CSRModule[_] => 406 val mideleg = IO(Input(new MidelegBundle)) 407 val mip = IO(Input(new MipBundle)) 408 val mie = IO(Input(new MieBundle)) 409 val mvip = IO(Input(new MvipBundle)) 410 val mvien = IO(Input(new MvienBundle)) 411 val hideleg = IO(Input(new HidelegBundle)) 412 val hip = IO(Input(new HipBundle)) 413 val hie = IO(Input(new HieBundle)) 414 val hvien = IO(Input(new HvienBundle)) 415 val hvip = IO(Input(new HvipBundle)) 416 val sip = IO(Input(new SipBundle)) 417 val sie = IO(Input(new SieBundle)) 418 val vsip = IO(Input(new VSipBundle)) 419 val vsie = IO(Input(new VSieBundle)) 420 val hgeip = IO(Input(new HgeipBundle)) 421 val hgeie = IO(Input(new HgeieBundle)) 422 val hstatusVGEIN = IO(Input(HstatusVgeinField())) 423} 424 425trait ToAliasIpLocalPart extends Bundle { 426 val LCOFIP = ValidIO(RO(13)) // Counter overflow interrupt 427 val LC14IP = ValidIO(RO(14)) 428 val LC15IP = ValidIO(RO(15)) 429 val LC16IP = ValidIO(RO(16)) 430 val LC17IP = ValidIO(RO(17)) 431 val LC18IP = ValidIO(RO(18)) 432 val LC19IP = ValidIO(RO(19)) 433 val LC20IP = ValidIO(RO(20)) 434 val LC21IP = ValidIO(RO(21)) 435 val LC22IP = ValidIO(RO(22)) 436 val LC23IP = ValidIO(RO(23)) 437 val LC24IP = ValidIO(RO(24)) 438 val LC25IP = ValidIO(RO(25)) 439 val LC26IP = ValidIO(RO(26)) 440 val LC27IP = ValidIO(RO(27)) 441 val LC28IP = ValidIO(RO(28)) 442 val LC29IP = ValidIO(RO(29)) 443 val LC30IP = ValidIO(RO(30)) 444 val LC31IP = ValidIO(RO(31)) 445 val LC32IP = ValidIO(RO(32)) 446 val LC33IP = ValidIO(RO(33)) 447 val LC34IP = ValidIO(RO(34)) 448 val LPRASEIP = ValidIO(RO(35)) // Low-priority RAS event interrupt 449 val LC36IP = ValidIO(RO(36)) 450 val LC37IP = ValidIO(RO(37)) 451 val LC38IP = ValidIO(RO(38)) 452 val LC39IP = ValidIO(RO(39)) 453 val LC40IP = ValidIO(RO(40)) 454 val LC41IP = ValidIO(RO(41)) 455 val LC42IP = ValidIO(RO(42)) 456 val HPRASEIP = ValidIO(RO(43)) // High-priority RAS event interrupt 457 val LC44IP = ValidIO(RO(44)) 458 val LC45IP = ValidIO(RO(45)) 459 val LC46IP = ValidIO(RO(46)) 460 val LC47IP = ValidIO(RO(47)) 461 val LC48IP = ValidIO(RO(48)) 462 val LC49IP = ValidIO(RO(49)) 463 val LC50IP = ValidIO(RO(50)) 464 val LC51IP = ValidIO(RO(51)) 465 val LC52IP = ValidIO(RO(52)) 466 val LC53IP = ValidIO(RO(53)) 467 val LC54IP = ValidIO(RO(54)) 468 val LC55IP = ValidIO(RO(55)) 469 val LC56IP = ValidIO(RO(56)) 470 val LC57IP = ValidIO(RO(57)) 471 val LC58IP = ValidIO(RO(58)) 472 val LC59IP = ValidIO(RO(59)) 473 val LC60IP = ValidIO(RO(60)) 474 val LC61IP = ValidIO(RO(61)) 475 val LC62IP = ValidIO(RO(62)) 476 val LC63IP = ValidIO(RO(63)) 477 478 def getLocal = Seq( 479 LCOFIP, LC14IP, LC15IP, 480 LC16IP, LC17IP, LC18IP, LC19IP, LC20IP, LC21IP, LC22IP, LC23IP, 481 LC24IP, LC25IP, LC26IP, LC27IP, LC28IP, LC29IP, LC30IP, LC31IP, 482 LC32IP, LC33IP, LC34IP, LPRASEIP, LC36IP, LC37IP, LC38IP, LC39IP, 483 LC40IP, LC41IP, LC42IP, HPRASEIP, LC44IP, LC45IP, LC46IP, LC47IP, 484 LC48IP, LC49IP, LC50IP, LC51IP, LC52IP, LC53IP, LC54IP, LC55IP, 485 LC56IP, LC57IP, LC58IP, LC59IP, LC60IP, LC61IP, LC62IP, LC63IP, 486 ) 487} 488 489class IeValidBundle extends Bundle with IgnoreSeqInBundle { 490 val SSIE = ValidIO(RO( 1)) 491 val VSSIE = ValidIO(RO( 2)) 492 val MSIE = ValidIO(RO( 3)) 493 val STIE = ValidIO(RO( 5)) 494 val VSTIE = ValidIO(RO( 6)) 495 val MTIE = ValidIO(RO( 7)) 496 val SEIE = ValidIO(RO( 9)) 497 val VSEIE = ValidIO(RO(10)) 498 val MEIE = ValidIO(RO(11)) 499 val SGEIE = ValidIO(RO(12)) 500 501 val LCOFIE = ValidIO(RO(13)) // Counter overflow interrupt 502 val LC14IE = ValidIO(RO(14)) 503 val LC15IE = ValidIO(RO(15)) 504 val LC16IE = ValidIO(RO(16)) 505 val LC17IE = ValidIO(RO(17)) 506 val LC18IE = ValidIO(RO(18)) 507 val LC19IE = ValidIO(RO(19)) 508 val LC20IE = ValidIO(RO(20)) 509 val LC21IE = ValidIO(RO(21)) 510 val LC22IE = ValidIO(RO(22)) 511 val LC23IE = ValidIO(RO(23)) 512 val LC24IE = ValidIO(RO(24)) 513 val LC25IE = ValidIO(RO(25)) 514 val LC26IE = ValidIO(RO(26)) 515 val LC27IE = ValidIO(RO(27)) 516 val LC28IE = ValidIO(RO(28)) 517 val LC29IE = ValidIO(RO(29)) 518 val LC30IE = ValidIO(RO(30)) 519 val LC31IE = ValidIO(RO(31)) 520 val LC32IE = ValidIO(RO(32)) 521 val LC33IE = ValidIO(RO(33)) 522 val LC34IE = ValidIO(RO(34)) 523 val LPRASEIE = ValidIO(RO(35)) // Low-priority RAS event interrupt 524 val LC36IE = ValidIO(RO(36)) 525 val LC37IE = ValidIO(RO(37)) 526 val LC38IE = ValidIO(RO(38)) 527 val LC39IE = ValidIO(RO(39)) 528 val LC40IE = ValidIO(RO(40)) 529 val LC41IE = ValidIO(RO(41)) 530 val LC42IE = ValidIO(RO(42)) 531 val HPRASEIE = ValidIO(RO(43)) // High-priority RAS event interrupt 532 val LC44IE = ValidIO(RO(44)) 533 val LC45IE = ValidIO(RO(45)) 534 val LC46IE = ValidIO(RO(46)) 535 val LC47IE = ValidIO(RO(47)) 536 val LC48IE = ValidIO(RO(48)) 537 val LC49IE = ValidIO(RO(49)) 538 val LC50IE = ValidIO(RO(50)) 539 val LC51IE = ValidIO(RO(51)) 540 val LC52IE = ValidIO(RO(52)) 541 val LC53IE = ValidIO(RO(53)) 542 val LC54IE = ValidIO(RO(54)) 543 val LC55IE = ValidIO(RO(55)) 544 val LC56IE = ValidIO(RO(56)) 545 val LC57IE = ValidIO(RO(57)) 546 val LC58IE = ValidIO(RO(58)) 547 val LC59IE = ValidIO(RO(59)) 548 val LC60IE = ValidIO(RO(60)) 549 val LC61IE = ValidIO(RO(61)) 550 val LC62IE = ValidIO(RO(62)) 551 val LC63IE = ValidIO(RO(63)) 552 553 val getVS = Seq(VSSIE, VSTIE, VSEIE) 554 555 def getHS = Seq(SSIE, STIE, SEIE) 556 557 def getM = Seq(MSIE, MTIE, MEIE) 558 559 def getNonLocal = Seq( 560 SSIE, VSSIE, MSIE, 561 STIE, VSTIE, MTIE, 562 SEIE, VSEIE, MEIE, 563 SGEIE 564 ) 565 566 def getLocal = Seq( 567 LCOFIE, LC14IE, LC15IE, 568 LC16IE, LC17IE, LC18IE, LC19IE, LC20IE, LC21IE, LC22IE, LC23IE, 569 LC24IE, LC25IE, LC26IE, LC27IE, LC28IE, LC29IE, LC30IE, LC31IE, 570 LC32IE, LC33IE, LC34IE, LPRASEIE, LC36IE, LC37IE, LC38IE, LC39IE, 571 LC40IE, LC41IE, LC42IE, HPRASEIE, LC44IE, LC45IE, LC46IE, LC47IE, 572 LC48IE, LC49IE, LC50IE, LC51IE, LC52IE, LC53IE, LC54IE, LC55IE, 573 LC56IE, LC57IE, LC58IE, LC59IE, LC60IE, LC61IE, LC62IE, LC63IE, 574 ) 575 576 def getAll = getNonLocal ++ getLocal 577 578 def getRW = getAll.filter(_.bits.isRW) 579 580 def getNonRW = getAll.filterNot(_.bits.isRW) 581 582 def getByNum(num: Int) = getAll.find(_.bits.lsb == num).get 583 584 def connectZeroNonRW : this.type = { 585 this.getNonRW.foreach(_.specifyField( 586 _.valid := false.B, 587 _.bits := DontCare 588 )) 589 this 590 } 591} 592 593class IpValidBundle extends Bundle with IgnoreSeqInBundle { 594 val SSIP = ValidIO(RO( 1)) 595 val VSSIP = ValidIO(RO( 2)) 596 val MSIP = ValidIO(RO( 3)) 597 val STIP = ValidIO(RO( 5)) 598 val VSTIP = ValidIO(RO( 6)) 599 val MTIP = ValidIO(RO( 7)) 600 val SEIP = ValidIO(RO( 9)) 601 val VSEIP = ValidIO(RO(10)) 602 val MEIP = ValidIO(RO(11)) 603 val SGEIP = ValidIO(RO(12)) 604 605 val LCOFIP = ValidIO(RO(13)) // Counter overflow interrupt 606 val LC14IP = ValidIO(RO(14)) 607 val LC15IP = ValidIO(RO(15)) 608 val LC16IP = ValidIO(RO(16)) 609 val LC17IP = ValidIO(RO(17)) 610 val LC18IP = ValidIO(RO(18)) 611 val LC19IP = ValidIO(RO(19)) 612 val LC20IP = ValidIO(RO(20)) 613 val LC21IP = ValidIO(RO(21)) 614 val LC22IP = ValidIO(RO(22)) 615 val LC23IP = ValidIO(RO(23)) 616 val LC24IP = ValidIO(RO(24)) 617 val LC25IP = ValidIO(RO(25)) 618 val LC26IP = ValidIO(RO(26)) 619 val LC27IP = ValidIO(RO(27)) 620 val LC28IP = ValidIO(RO(28)) 621 val LC29IP = ValidIO(RO(29)) 622 val LC30IP = ValidIO(RO(30)) 623 val LC31IP = ValidIO(RO(31)) 624 val LC32IP = ValidIO(RO(32)) 625 val LC33IP = ValidIO(RO(33)) 626 val LC34IP = ValidIO(RO(34)) 627 val LPRASEIP = ValidIO(RO(35)) // Low-priority RAS event interrupt 628 val LC36IP = ValidIO(RO(36)) 629 val LC37IP = ValidIO(RO(37)) 630 val LC38IP = ValidIO(RO(38)) 631 val LC39IP = ValidIO(RO(39)) 632 val LC40IP = ValidIO(RO(40)) 633 val LC41IP = ValidIO(RO(41)) 634 val LC42IP = ValidIO(RO(42)) 635 val HPRASEIP = ValidIO(RO(43)) // High-priority RAS event interrupt 636 val LC44IP = ValidIO(RO(44)) 637 val LC45IP = ValidIO(RO(45)) 638 val LC46IP = ValidIO(RO(46)) 639 val LC47IP = ValidIO(RO(47)) 640 val LC48IP = ValidIO(RO(48)) 641 val LC49IP = ValidIO(RO(49)) 642 val LC50IP = ValidIO(RO(50)) 643 val LC51IP = ValidIO(RO(51)) 644 val LC52IP = ValidIO(RO(52)) 645 val LC53IP = ValidIO(RO(53)) 646 val LC54IP = ValidIO(RO(54)) 647 val LC55IP = ValidIO(RO(55)) 648 val LC56IP = ValidIO(RO(56)) 649 val LC57IP = ValidIO(RO(57)) 650 val LC58IP = ValidIO(RO(58)) 651 val LC59IP = ValidIO(RO(59)) 652 val LC60IP = ValidIO(RO(60)) 653 val LC61IP = ValidIO(RO(61)) 654 val LC62IP = ValidIO(RO(62)) 655 val LC63IP = ValidIO(RO(63)) 656 657 val getVS = Seq(VSSIP, VSTIP, VSEIP) 658 659 def getHS = Seq(SSIP, STIP, SEIP) 660 661 def getM = Seq(MSIP, MTIP, MEIP) 662 663 def getNonLocal = Seq( 664 SSIP, VSSIP, MSIP, 665 STIP, VSTIP, MTIP, 666 SEIP, VSEIP, MEIP, 667 SGEIP 668 ) 669 670 def getLocal = Seq( 671 LCOFIP, LC14IP, LC15IP, 672 LC16IP, LC17IP, LC18IP, LC19IP, LC20IP, LC21IP, LC22IP, LC23IP, 673 LC24IP, LC25IP, LC26IP, LC27IP, LC28IP, LC29IP, LC30IP, LC31IP, 674 LC32IP, LC33IP, LC34IP, LPRASEIP, LC36IP, LC37IP, LC38IP, LC39IP, 675 LC40IP, LC41IP, LC42IP, HPRASEIP, LC44IP, LC45IP, LC46IP, LC47IP, 676 LC48IP, LC49IP, LC50IP, LC51IP, LC52IP, LC53IP, LC54IP, LC55IP, 677 LC56IP, LC57IP, LC58IP, LC59IP, LC60IP, LC61IP, LC62IP, LC63IP, 678 ) 679 680 def getAll = getNonLocal ++ getLocal 681 682 def getRW = getAll.filter(_.bits.isRW) 683 684 def getNonRW = getAll.filterNot(_.bits.isRW) 685 686 def getByNum(num: Int) = getAll.find(_.bits.lsb == num).get 687 688 def connectZeroNonRW : this.type = { 689 this.getNonRW.foreach(_.specifyField( 690 _.valid := false.B, 691 _.bits := DontCare, 692 )) 693 this 694 } 695} 696