1package xiangshan.backend.fu.NewCSR 2 3import chisel3._ 4import chisel3.experimental.BundleLiterals._ 5import xiangshan.backend.fu.NewCSR.CSRDefines.{ 6 CSRROField => RO, 7 CSRRWField => RW, 8 CSRWARLField => WARL, 9 _ 10} 11import xiangshan.backend.fu.NewCSR.CSRFunc._ 12 13object CSRBundles { 14 class XtvecBundle extends CSRBundle { 15 val mode = XtvecMode(1, 0, wNoFilter) 16 val addr = WARL(63, 2, wNoFilter) 17 } 18 19 class CauseBundle extends CSRBundle { 20 val Interrupt = RW(63) 21 val ExceptionCode = RW(62, 0) 22 } 23 24 class Counteren extends CSRBundle { 25 val CY = RW(0) 26 val TM = RW(1) 27 val IR = RW(2) 28 val HPM = RW(31, 3) 29 } 30 31 class OneFieldBundle extends CSRBundle { 32 val ALL = RW(63, 0) 33 } 34 35 class Envcfg extends CSRBundle { 36 val STCE = RO( 63).withReset(0.U) 37 val PBMTE = RO( 62).withReset(0.U) 38 val ADUE = RO( 61).withReset(0.U) 39 val PMM = RO(33, 32).withReset(0.U) 40 val CBZE = RO( 7).withReset(0.U) 41 val CBCFE = RO( 6).withReset(0.U) 42 val CBIE = RO( 5, 4).withReset(0.U) 43 val FIOM = RO( 0).withReset(0.U) 44 } 45 46 class PrivState extends Bundle { 47 val PRVM = PrivMode(0) 48 val V = VirtMode(0) 49 50 def isModeHU: Bool = this.V === VirtMode.Off && this.PRVM === PrivMode.U 51 52 def isModeHS: Bool = this.V === VirtMode.Off && this.PRVM === PrivMode.S 53 54 def isModeHUorHS: Bool = this.V === VirtMode.Off && this.PRVM.isOneOf(PrivMode.S, PrivMode.U) 55 56 def isModeM: Bool = this.V === VirtMode.Off && this.PRVM === PrivMode.M 57 58 def isModeVU: Bool = this.V === VirtMode.On && this.PRVM === PrivMode.U 59 60 def isModeVS: Bool = this.V === VirtMode.On && this.PRVM === PrivMode.S 61 62 def isVirtual: Bool = this.V === VirtMode.On 63 } 64 65 object PrivState { 66 def ModeM: PrivState = WireInit((new PrivState).Lit( 67 _.PRVM -> PrivMode.M, 68 _.V -> VirtMode.Off, 69 )) 70 71 def ModeHS: PrivState = WireInit((new PrivState).Lit( 72 _.PRVM -> PrivMode.S, 73 _.V -> VirtMode.Off, 74 )) 75 76 def ModeHU: PrivState = WireInit((new PrivState).Lit( 77 _.PRVM -> PrivMode.U, 78 _.V -> VirtMode.Off, 79 )) 80 81 def ModeVS: PrivState = WireInit((new PrivState).Lit( 82 _.PRVM -> PrivMode.S, 83 _.V -> VirtMode.On, 84 )) 85 86 def ModeVU: PrivState = WireInit((new PrivState).Lit( 87 _.PRVM -> PrivMode.U, 88 _.V -> VirtMode.On, 89 )) 90 } 91} 92