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