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._ 9import xiangshan.backend.fu.fpu.Bundles.Fflags 10import xiangshan.backend.fu.vector.Bundles.{Vl, Vstart, Vxsat} 11 12object CSRBundles { 13 class XtvecBundle extends CSRBundle { 14 val mode = XtvecMode(1, 0, wNoFilter) 15 val addr = WARL(63, 2, wNoFilter) 16 } 17 18 class CauseBundle extends CSRBundle { 19 val Interrupt = RW(63) 20 val ExceptionCode = RW(62, 0) 21 } 22 23 class Counteren extends CSRBundle { 24 val CY = RW(0) 25 val TM = RW(1) 26 val IR = RW(2) 27 val HPM = RW(31, 3) 28 } 29 30 class OneFieldBundle extends CSRBundle { 31 val ALL = RW(63, 0) 32 } 33 34 class Envcfg extends CSRBundle { 35 val STCE = RO( 63).withReset(0.U) 36 val PBMTE = RO( 62).withReset(0.U) 37 val ADUE = RO( 61).withReset(0.U) 38 val PMM = RO(33, 32).withReset(0.U) 39 val CBZE = RO( 7).withReset(0.U) 40 val CBCFE = RO( 6).withReset(0.U) 41 val CBIE = RO( 5, 4).withReset(0.U) 42 val FIOM = RO( 0).withReset(0.U) 43 } 44 45 class PrivState extends Bundle { 46 val PRVM = PrivMode(0) 47 val V = VirtMode(0) 48 49 def isModeHU: Bool = this.V === VirtMode.Off && this.PRVM === PrivMode.U 50 51 def isModeHS: Bool = this.V === VirtMode.Off && this.PRVM === PrivMode.S 52 53 def isModeHUorHS: Bool = this.V === VirtMode.Off && this.PRVM.isOneOf(PrivMode.S, PrivMode.U) 54 55 def isModeM: Bool = this.V === VirtMode.Off && this.PRVM === PrivMode.M 56 57 def isModeVU: Bool = this.V === VirtMode.On && this.PRVM === PrivMode.U 58 59 def isModeVS: Bool = this.V === VirtMode.On && this.PRVM === PrivMode.S 60 61 def isModeHUorVU: Bool = this.PRVM === PrivMode.U 62 63 def isVirtual: Bool = this.V === VirtMode.On 64 65 // VU < VS < HS < M 66 // HU < HS < M 67 def < (that: PrivState): Bool = { 68 (this.isVirtual && (that.isModeM || that.isModeHS)) || 69 (this.V === that.V && this.PRVM < that.PRVM) 70 } 71 72 def > (that: PrivState): Bool = { 73 (that.isVirtual && (this.isModeM || this.isModeHS)) || 74 (that.V === this.V && that.PRVM < this.PRVM) 75 } 76 } 77 78 object PrivState { 79 def ModeM: PrivState = WireInit((new PrivState).Lit( 80 _.PRVM -> PrivMode.M, 81 _.V -> VirtMode.Off, 82 )) 83 84 def ModeHS: PrivState = WireInit((new PrivState).Lit( 85 _.PRVM -> PrivMode.S, 86 _.V -> VirtMode.Off, 87 )) 88 89 def ModeHU: PrivState = WireInit((new PrivState).Lit( 90 _.PRVM -> PrivMode.U, 91 _.V -> VirtMode.Off, 92 )) 93 94 def ModeVS: PrivState = WireInit((new PrivState).Lit( 95 _.PRVM -> PrivMode.S, 96 _.V -> VirtMode.On, 97 )) 98 99 def ModeVU: PrivState = WireInit((new PrivState).Lit( 100 _.PRVM -> PrivMode.U, 101 _.V -> VirtMode.On, 102 )) 103 } 104 105 class RobCommitCSR(implicit p: Parameters) extends Bundle { 106 // need contain 8x8 107 val instNum = ValidIO(UInt(7.W)) 108 val fflags = ValidIO(Fflags()) 109 val fsDirty = Bool() 110 val vxsat = ValidIO(Vxsat()) 111 val vsDirty = Bool() 112 val vtype = ValidIO(new CSRVTypeBundle) 113 val vl = ValidIO(Vl()) 114 val vstart = ValidIO(Vstart()) 115 } 116} 117