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