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