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 = RW(1).withReset(0.U) 293 // reserve for more NMI type 294} 295object NonMaskableIRNO{ 296 final val NMI = 1 297 // reserve for more NMI type 298 299 val interruptDefaultPrio = Seq( 300 NMI 301 ) 302 def getIRQHigherThan(irq: Int): Seq[Int] = { 303 val idx = this.interruptDefaultPrio.indexOf(irq, 0) 304 require(idx != -1, s"The irq($irq) does not exists in IntPriority Seq") 305 this.interruptDefaultPrio.slice(0, idx) 306 } 307 308} 309 310object InterruptNO { 311 // Software Interrupt 312 final val SSI = 1 313 final val VSSI = 2 314 final val MSI = 3 315 // Time Interrupt 316 final val STI = 5 317 final val VSTI = 6 318 final val MTI = 7 319 // External Interrupt 320 final val SEI = 9 321 final val VSEI = 10 322 final val MEI = 11 323 final val SGEI = 12 324 // SoC 325 final val COI = 13 326 final val LPRASEI = 35 327 final val HPRASEI = 43 328 329 val interruptDefaultPrio = Seq( 330 MEI, MSI, MTI, 331 SEI, SSI, STI, 332 SGEI, 333 VSEI, VSSI, VSTI, 334 COI, 335 ) 336 337 val localHighGroup = Seq( 338 47, 23, 46, 339 45, 22, 44, 340 HPRASEI, 21, 42, 341 41, 20, 40, 342 ) 343 344 val localLowGroup = Seq( 345 39, 19, 38, 346 37, 18, 36, 347 LPRASEI, 17, 34, 348 33, 16, 32, 349 ) 350 351 val customHighestGroup = Seq( 352 63, 31, 62, 353 61, 30, 60, 354 ) 355 356 val customMiddleHighGroup = Seq( 357 59, 29, 58, 358 57, 28, 56, 359 ) 360 361 val customMiddleLowGroup = Seq( 362 55, 27, 54, 363 53, 26, 52, 364 ) 365 366 val customLowestGroup = Seq( 367 51, 25, 50, 368 49, 24, 48, 369 ) 370 371 def getPrioIdxInGroup(group: this.type => Seq[Int])(f: this.type => Int): Int = { 372 val idx = group(this).indexOf(f(this)) 373 assert(idx != -1) 374 idx 375 } 376 377 def getVS = Seq(VSSI, VSTI, VSEI) 378 379 def getHS = Seq(SSI, STI, SEI) 380 381 def getM = Seq(MSI, MTI, MEI) 382 383 def getNonLocal = Seq( 384 SSI, VSSI, MSI, 385 STI, VSTI, MTI, 386 SEI, VSEI, MEI, 387 SGEI 388 ) 389 390 def getLocal = localHighGroup ++ localLowGroup ++ 391 customHighestGroup ++ customMiddleHighGroup ++ 392 customMiddleLowGroup ++ customLowestGroup ++ Seq(COI) 393} 394 395trait HasIpIeBundle { self: CSRModule[_] => 396 val mideleg = IO(Input(new MidelegBundle)) 397 val mip = IO(Input(new MipBundle)) 398 val mie = IO(Input(new MieBundle)) 399 val mvip = IO(Input(new MvipBundle)) 400 val mvien = IO(Input(new MvienBundle)) 401 val hideleg = IO(Input(new HidelegBundle)) 402 val hip = IO(Input(new HipBundle)) 403 val hie = IO(Input(new HieBundle)) 404 val hvien = IO(Input(new HvienBundle)) 405 val hvip = IO(Input(new HvipBundle)) 406 val sip = IO(Input(new SipBundle)) 407 val sie = IO(Input(new SieBundle)) 408 val vsip = IO(Input(new VSipBundle)) 409 val vsie = IO(Input(new VSieBundle)) 410 val hgeip = IO(Input(new HgeipBundle)) 411 val hgeie = IO(Input(new HgeieBundle)) 412 val hstatusVGEIN = IO(Input(HstatusVgeinField())) 413} 414 415trait ToAliasIpLocalPart extends Bundle { 416 val LCOFIP = ValidIO(RO(13)) // Counter overflow interrupt 417 val LC14IP = ValidIO(RO(14)) 418 val LC15IP = ValidIO(RO(15)) 419 val LC16IP = ValidIO(RO(16)) 420 val LC17IP = ValidIO(RO(17)) 421 val LC18IP = ValidIO(RO(18)) 422 val LC19IP = ValidIO(RO(19)) 423 val LC20IP = ValidIO(RO(20)) 424 val LC21IP = ValidIO(RO(21)) 425 val LC22IP = ValidIO(RO(22)) 426 val LC23IP = ValidIO(RO(23)) 427 val LC24IP = ValidIO(RO(24)) 428 val LC25IP = ValidIO(RO(25)) 429 val LC26IP = ValidIO(RO(26)) 430 val LC27IP = ValidIO(RO(27)) 431 val LC28IP = ValidIO(RO(28)) 432 val LC29IP = ValidIO(RO(29)) 433 val LC30IP = ValidIO(RO(30)) 434 val LC31IP = ValidIO(RO(31)) 435 val LC32IP = ValidIO(RO(32)) 436 val LC33IP = ValidIO(RO(33)) 437 val LC34IP = ValidIO(RO(34)) 438 val LPRASEIP = ValidIO(RO(35)) // Low-priority RAS event interrupt 439 val LC36IP = ValidIO(RO(36)) 440 val LC37IP = ValidIO(RO(37)) 441 val LC38IP = ValidIO(RO(38)) 442 val LC39IP = ValidIO(RO(39)) 443 val LC40IP = ValidIO(RO(40)) 444 val LC41IP = ValidIO(RO(41)) 445 val LC42IP = ValidIO(RO(42)) 446 val HPRASEIP = ValidIO(RO(43)) // High-priority RAS event interrupt 447 val LC44IP = ValidIO(RO(44)) 448 val LC45IP = ValidIO(RO(45)) 449 val LC46IP = ValidIO(RO(46)) 450 val LC47IP = ValidIO(RO(47)) 451 val LC48IP = ValidIO(RO(48)) 452 val LC49IP = ValidIO(RO(49)) 453 val LC50IP = ValidIO(RO(50)) 454 val LC51IP = ValidIO(RO(51)) 455 val LC52IP = ValidIO(RO(52)) 456 val LC53IP = ValidIO(RO(53)) 457 val LC54IP = ValidIO(RO(54)) 458 val LC55IP = ValidIO(RO(55)) 459 val LC56IP = ValidIO(RO(56)) 460 val LC57IP = ValidIO(RO(57)) 461 val LC58IP = ValidIO(RO(58)) 462 val LC59IP = ValidIO(RO(59)) 463 val LC60IP = ValidIO(RO(60)) 464 val LC61IP = ValidIO(RO(61)) 465 val LC62IP = ValidIO(RO(62)) 466 val LC63IP = ValidIO(RO(63)) 467 468 def getLocal = Seq( 469 LCOFIP, LC14IP, LC15IP, 470 LC16IP, LC17IP, LC18IP, LC19IP, LC20IP, LC21IP, LC22IP, LC23IP, 471 LC24IP, LC25IP, LC26IP, LC27IP, LC28IP, LC29IP, LC30IP, LC31IP, 472 LC32IP, LC33IP, LC34IP, LPRASEIP, LC36IP, LC37IP, LC38IP, LC39IP, 473 LC40IP, LC41IP, LC42IP, HPRASEIP, LC44IP, LC45IP, LC46IP, LC47IP, 474 LC48IP, LC49IP, LC50IP, LC51IP, LC52IP, LC53IP, LC54IP, LC55IP, 475 LC56IP, LC57IP, LC58IP, LC59IP, LC60IP, LC61IP, LC62IP, LC63IP, 476 ) 477} 478 479class IeValidBundle extends Bundle with IgnoreSeqInBundle { 480 val SSIE = ValidIO(RO( 1)) 481 val VSSIE = ValidIO(RO( 2)) 482 val MSIE = ValidIO(RO( 3)) 483 val STIE = ValidIO(RO( 5)) 484 val VSTIE = ValidIO(RO( 6)) 485 val MTIE = ValidIO(RO( 7)) 486 val SEIE = ValidIO(RO( 9)) 487 val VSEIE = ValidIO(RO(10)) 488 val MEIE = ValidIO(RO(11)) 489 val SGEIE = ValidIO(RO(12)) 490 491 val LCOFIE = ValidIO(RO(13)) // Counter overflow interrupt 492 val LC14IE = ValidIO(RO(14)) 493 val LC15IE = ValidIO(RO(15)) 494 val LC16IE = ValidIO(RO(16)) 495 val LC17IE = ValidIO(RO(17)) 496 val LC18IE = ValidIO(RO(18)) 497 val LC19IE = ValidIO(RO(19)) 498 val LC20IE = ValidIO(RO(20)) 499 val LC21IE = ValidIO(RO(21)) 500 val LC22IE = ValidIO(RO(22)) 501 val LC23IE = ValidIO(RO(23)) 502 val LC24IE = ValidIO(RO(24)) 503 val LC25IE = ValidIO(RO(25)) 504 val LC26IE = ValidIO(RO(26)) 505 val LC27IE = ValidIO(RO(27)) 506 val LC28IE = ValidIO(RO(28)) 507 val LC29IE = ValidIO(RO(29)) 508 val LC30IE = ValidIO(RO(30)) 509 val LC31IE = ValidIO(RO(31)) 510 val LC32IE = ValidIO(RO(32)) 511 val LC33IE = ValidIO(RO(33)) 512 val LC34IE = ValidIO(RO(34)) 513 val LPRASEIE = ValidIO(RO(35)) // Low-priority RAS event interrupt 514 val LC36IE = ValidIO(RO(36)) 515 val LC37IE = ValidIO(RO(37)) 516 val LC38IE = ValidIO(RO(38)) 517 val LC39IE = ValidIO(RO(39)) 518 val LC40IE = ValidIO(RO(40)) 519 val LC41IE = ValidIO(RO(41)) 520 val LC42IE = ValidIO(RO(42)) 521 val HPRASEIE = ValidIO(RO(43)) // High-priority RAS event interrupt 522 val LC44IE = ValidIO(RO(44)) 523 val LC45IE = ValidIO(RO(45)) 524 val LC46IE = ValidIO(RO(46)) 525 val LC47IE = ValidIO(RO(47)) 526 val LC48IE = ValidIO(RO(48)) 527 val LC49IE = ValidIO(RO(49)) 528 val LC50IE = ValidIO(RO(50)) 529 val LC51IE = ValidIO(RO(51)) 530 val LC52IE = ValidIO(RO(52)) 531 val LC53IE = ValidIO(RO(53)) 532 val LC54IE = ValidIO(RO(54)) 533 val LC55IE = ValidIO(RO(55)) 534 val LC56IE = ValidIO(RO(56)) 535 val LC57IE = ValidIO(RO(57)) 536 val LC58IE = ValidIO(RO(58)) 537 val LC59IE = ValidIO(RO(59)) 538 val LC60IE = ValidIO(RO(60)) 539 val LC61IE = ValidIO(RO(61)) 540 val LC62IE = ValidIO(RO(62)) 541 val LC63IE = ValidIO(RO(63)) 542 543 val getVS = Seq(VSSIE, VSTIE, VSEIE) 544 545 def getHS = Seq(SSIE, STIE, SEIE) 546 547 def getM = Seq(MSIE, MTIE, MEIE) 548 549 def getNonLocal = Seq( 550 SSIE, VSSIE, MSIE, 551 STIE, VSTIE, MTIE, 552 SEIE, VSEIE, MEIE, 553 SGEIE 554 ) 555 556 def getLocal = Seq( 557 LCOFIE, LC14IE, LC15IE, 558 LC16IE, LC17IE, LC18IE, LC19IE, LC20IE, LC21IE, LC22IE, LC23IE, 559 LC24IE, LC25IE, LC26IE, LC27IE, LC28IE, LC29IE, LC30IE, LC31IE, 560 LC32IE, LC33IE, LC34IE, LPRASEIE, LC36IE, LC37IE, LC38IE, LC39IE, 561 LC40IE, LC41IE, LC42IE, HPRASEIE, LC44IE, LC45IE, LC46IE, LC47IE, 562 LC48IE, LC49IE, LC50IE, LC51IE, LC52IE, LC53IE, LC54IE, LC55IE, 563 LC56IE, LC57IE, LC58IE, LC59IE, LC60IE, LC61IE, LC62IE, LC63IE, 564 ) 565 566 def getAll = getNonLocal ++ getLocal 567 568 def getRW = getAll.filter(_.bits.isRW) 569 570 def getNonRW = getAll.filterNot(_.bits.isRW) 571 572 def getByNum(num: Int) = getAll.find(_.bits.lsb == num).get 573 574 def connectZeroNonRW : this.type = { 575 this.getNonRW.foreach(_.specifyField( 576 _.valid := false.B, 577 _.bits := DontCare 578 )) 579 this 580 } 581} 582 583class IpValidBundle extends Bundle with IgnoreSeqInBundle { 584 val SSIP = ValidIO(RO( 1)) 585 val VSSIP = ValidIO(RO( 2)) 586 val MSIP = ValidIO(RO( 3)) 587 val STIP = ValidIO(RO( 5)) 588 val VSTIP = ValidIO(RO( 6)) 589 val MTIP = ValidIO(RO( 7)) 590 val SEIP = ValidIO(RO( 9)) 591 val VSEIP = ValidIO(RO(10)) 592 val MEIP = ValidIO(RO(11)) 593 val SGEIP = ValidIO(RO(12)) 594 595 val LCOFIP = ValidIO(RO(13)) // Counter overflow interrupt 596 val LC14IP = ValidIO(RO(14)) 597 val LC15IP = ValidIO(RO(15)) 598 val LC16IP = ValidIO(RO(16)) 599 val LC17IP = ValidIO(RO(17)) 600 val LC18IP = ValidIO(RO(18)) 601 val LC19IP = ValidIO(RO(19)) 602 val LC20IP = ValidIO(RO(20)) 603 val LC21IP = ValidIO(RO(21)) 604 val LC22IP = ValidIO(RO(22)) 605 val LC23IP = ValidIO(RO(23)) 606 val LC24IP = ValidIO(RO(24)) 607 val LC25IP = ValidIO(RO(25)) 608 val LC26IP = ValidIO(RO(26)) 609 val LC27IP = ValidIO(RO(27)) 610 val LC28IP = ValidIO(RO(28)) 611 val LC29IP = ValidIO(RO(29)) 612 val LC30IP = ValidIO(RO(30)) 613 val LC31IP = ValidIO(RO(31)) 614 val LC32IP = ValidIO(RO(32)) 615 val LC33IP = ValidIO(RO(33)) 616 val LC34IP = ValidIO(RO(34)) 617 val LPRASEIP = ValidIO(RO(35)) // Low-priority RAS event interrupt 618 val LC36IP = ValidIO(RO(36)) 619 val LC37IP = ValidIO(RO(37)) 620 val LC38IP = ValidIO(RO(38)) 621 val LC39IP = ValidIO(RO(39)) 622 val LC40IP = ValidIO(RO(40)) 623 val LC41IP = ValidIO(RO(41)) 624 val LC42IP = ValidIO(RO(42)) 625 val HPRASEIP = ValidIO(RO(43)) // High-priority RAS event interrupt 626 val LC44IP = ValidIO(RO(44)) 627 val LC45IP = ValidIO(RO(45)) 628 val LC46IP = ValidIO(RO(46)) 629 val LC47IP = ValidIO(RO(47)) 630 val LC48IP = ValidIO(RO(48)) 631 val LC49IP = ValidIO(RO(49)) 632 val LC50IP = ValidIO(RO(50)) 633 val LC51IP = ValidIO(RO(51)) 634 val LC52IP = ValidIO(RO(52)) 635 val LC53IP = ValidIO(RO(53)) 636 val LC54IP = ValidIO(RO(54)) 637 val LC55IP = ValidIO(RO(55)) 638 val LC56IP = ValidIO(RO(56)) 639 val LC57IP = ValidIO(RO(57)) 640 val LC58IP = ValidIO(RO(58)) 641 val LC59IP = ValidIO(RO(59)) 642 val LC60IP = ValidIO(RO(60)) 643 val LC61IP = ValidIO(RO(61)) 644 val LC62IP = ValidIO(RO(62)) 645 val LC63IP = ValidIO(RO(63)) 646 647 val getVS = Seq(VSSIP, VSTIP, VSEIP) 648 649 def getHS = Seq(SSIP, STIP, SEIP) 650 651 def getM = Seq(MSIP, MTIP, MEIP) 652 653 def getNonLocal = Seq( 654 SSIP, VSSIP, MSIP, 655 STIP, VSTIP, MTIP, 656 SEIP, VSEIP, MEIP, 657 SGEIP 658 ) 659 660 def getLocal = Seq( 661 LCOFIP, LC14IP, LC15IP, 662 LC16IP, LC17IP, LC18IP, LC19IP, LC20IP, LC21IP, LC22IP, LC23IP, 663 LC24IP, LC25IP, LC26IP, LC27IP, LC28IP, LC29IP, LC30IP, LC31IP, 664 LC32IP, LC33IP, LC34IP, LPRASEIP, LC36IP, LC37IP, LC38IP, LC39IP, 665 LC40IP, LC41IP, LC42IP, HPRASEIP, LC44IP, LC45IP, LC46IP, LC47IP, 666 LC48IP, LC49IP, LC50IP, LC51IP, LC52IP, LC53IP, LC54IP, LC55IP, 667 LC56IP, LC57IP, LC58IP, LC59IP, LC60IP, LC61IP, LC62IP, LC63IP, 668 ) 669 670 def getAll = getNonLocal ++ getLocal 671 672 def getRW = getAll.filter(_.bits.isRW) 673 674 def getNonRW = getAll.filterNot(_.bits.isRW) 675 676 def getByNum(num: Int) = getAll.find(_.bits.lsb == num).get 677 678 def connectZeroNonRW : this.type = { 679 this.getNonRW.foreach(_.specifyField( 680 _.valid := false.B, 681 _.bits := DontCare, 682 )) 683 this 684 } 685} 686