1package xiangshan.backend.fu.NewCSR 2 3import xiangshan.backend.fu.NewCSR.CSRDefines.{ 4 CSRRWField => RW, 5} 6 7class ExceptionBundle extends CSRBundle { 8 val EX_IAM = RW(0) 9 val EX_IAF = RW(1) 10 val EX_II = RW(2) 11 val EX_BP = RW(3) 12 val EX_LAM = RW(4) 13 val EX_LAF = RW(5) 14 val EX_SAM = RW(6) 15 val EX_SAF = RW(7) 16 val EX_UCALL = RW(8) 17 val EX_HSCALL = RW(9) 18 val EX_VSCALL = RW(10) 19 val EX_MCALL = RW(11) 20 val EX_IPF = RW(12) 21 val EX_LPF = RW(13) 22 // 14 Reserved 23 val EX_SPF = RW(15) 24 // double trap 25 val EX_DBLTRP = RW(16) 26 // 17 Reserved 27 // software check 28 val EX_SWC = RW(18) 29 // hardware error 30 val EX_HWE = RW(19) 31 val EX_IGPF = RW(20) 32 val EX_LGPF = RW(21) 33 val EX_VI = RW(22) 34 val EX_SGPF = RW(23) 35 // 24-31 Designated for custom use 36 // 32-47 Reserved 37 // 48-63 Designated for custom use 38 // >= 64 Reserved 39 40 def getAddressMisaligned = Seq(EX_IAM, EX_LAM, EX_SAM) 41 42 def getAccessFault = Seq(EX_IAF, EX_LAF, EX_SAF) 43 44 def getPageFault = Seq(EX_IPF, EX_LPF, EX_SPF) 45 46 def getGuestPageFault = Seq(EX_IGPF, EX_LGPF, EX_SGPF) 47 48 def getLSGuestPageFault = Seq(EX_LGPF, EX_SGPF) 49 50 def getFetchFault = Seq(EX_IAM, EX_IAF, EX_IPF) 51 52 def getLoadFault = Seq(EX_LAM, EX_LAF, EX_LPF) 53 54 def getStoreFault = Seq(EX_SAM, EX_SAF, EX_SPF) 55 56 def getALL = Seq(EX_SGPF, EX_VI, EX_LGPF, EX_IGPF, EX_HWE, EX_SWC, EX_DBLTRP, EX_SPF, EX_LPF, EX_IPF, EX_MCALL, EX_VSCALL, 57 EX_HSCALL, EX_UCALL, EX_SAF, EX_SAM, EX_LAF, EX_LAM, EX_BP, EX_II, EX_IAF, EX_IAM) 58} 59