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