1package xiangshan.backend.fu.NewCSR 2 3import chisel3._ 4import xiangshan.backend.fu.NewCSR.CSRFunc._ 5import xiangshan.macros.CSRMacros.CSRFieldsImpl 6 7import scala.language.experimental.macros 8 9object CSRDefines { 10 object CSRField1Bits extends CSREnum with CSRMacroApply 11 12 object CSRField2Bits extends CSREnum with CSRMacroApply 13 14 object CSRField3Bits extends CSREnum with CSRMacroApply 15 16 object CSRField4Bits extends CSREnum with CSRMacroApply 17 18 object CSRField5Bits extends CSREnum with CSRMacroApply 19 20 object CSRField6Bits extends CSREnum with CSRMacroApply 21 22 object CSRField7Bits extends CSREnum with CSRMacroApply 23 24 object CSRField8Bits extends CSREnum with CSRMacroApply 25 26 object CSRField9Bits extends CSREnum with CSRMacroApply 27 28 object CSRField10Bits extends CSREnum with CSRMacroApply 29 30 object CSRField11Bits extends CSREnum with CSRMacroApply 31 32 object CSRField12Bits extends CSREnum with CSRMacroApply 33 34 object CSRField13Bits extends CSREnum with CSRMacroApply 35 36 object CSRField14Bits extends CSREnum with CSRMacroApply 37 38 object CSRField15Bits extends CSREnum with CSRMacroApply 39 40 object CSRField16Bits extends CSREnum with CSRMacroApply 41 42 object CSRField17Bits extends CSREnum with CSRMacroApply 43 44 object CSRField18Bits extends CSREnum with CSRMacroApply 45 46 object CSRField19Bits extends CSREnum with CSRMacroApply 47 48 object CSRField20Bits extends CSREnum with CSRMacroApply 49 50 object CSRField21Bits extends CSREnum with CSRMacroApply 51 52 object CSRField22Bits extends CSREnum with CSRMacroApply 53 54 object CSRField23Bits extends CSREnum with CSRMacroApply 55 56 object CSRField24Bits extends CSREnum with CSRMacroApply 57 58 object CSRField25Bits extends CSREnum with CSRMacroApply 59 60 object CSRField26Bits extends CSREnum with CSRMacroApply 61 62 object CSRField27Bits extends CSREnum with CSRMacroApply 63 64 object CSRField28Bits extends CSREnum with CSRMacroApply 65 66 object CSRField29Bits extends CSREnum with CSRMacroApply 67 68 object CSRField30Bits extends CSREnum with CSRMacroApply 69 70 object CSRField31Bits extends CSREnum with CSRMacroApply 71 72 object CSRField32Bits extends CSREnum with CSRMacroApply 73 74 object CSRField33Bits extends CSREnum with CSRMacroApply 75 76 object CSRField34Bits extends CSREnum with CSRMacroApply 77 78 object CSRField35Bits extends CSREnum with CSRMacroApply 79 80 object CSRField36Bits extends CSREnum with CSRMacroApply 81 82 object CSRField37Bits extends CSREnum with CSRMacroApply 83 84 object CSRField38Bits extends CSREnum with CSRMacroApply 85 86 object CSRField39Bits extends CSREnum with CSRMacroApply 87 88 object CSRField40Bits extends CSREnum with CSRMacroApply 89 90 object CSRField41Bits extends CSREnum with CSRMacroApply 91 92 object CSRField42Bits extends CSREnum with CSRMacroApply 93 94 object CSRField43Bits extends CSREnum with CSRMacroApply 95 96 object CSRField44Bits extends CSREnum with CSRMacroApply 97 98 object CSRField45Bits extends CSREnum with CSRMacroApply 99 100 object CSRField46Bits extends CSREnum with CSRMacroApply 101 102 object CSRField47Bits extends CSREnum with CSRMacroApply 103 104 object CSRField48Bits extends CSREnum with CSRMacroApply 105 106 object CSRField49Bits extends CSREnum with CSRMacroApply 107 108 object CSRField50Bits extends CSREnum with CSRMacroApply 109 110 object CSRField51Bits extends CSREnum with CSRMacroApply 111 112 object CSRField52Bits extends CSREnum with CSRMacroApply 113 114 object CSRField53Bits extends CSREnum with CSRMacroApply 115 116 object CSRField54Bits extends CSREnum with CSRMacroApply 117 118 object CSRField55Bits extends CSREnum with CSRMacroApply 119 120 object CSRField56Bits extends CSREnum with CSRMacroApply 121 122 object CSRField57Bits extends CSREnum with CSRMacroApply 123 124 object CSRField58Bits extends CSREnum with CSRMacroApply 125 126 object CSRField59Bits extends CSREnum with CSRMacroApply 127 128 object CSRField60Bits extends CSREnum with CSRMacroApply 129 130 object CSRField61Bits extends CSREnum with CSRMacroApply 131 132 object CSRField62Bits extends CSREnum with CSRMacroApply 133 134 object CSRField63Bits extends CSREnum with CSRMacroApply 135 136 object CSRField64Bits extends CSREnum with CSRMacroApply 137 138 object ContextStatus extends CSREnum with ContextStatusDef with RWApply 139 object ContextStatusRO extends CSREnum with ContextStatusDef with ROApply 140 trait ContextStatusDef { this: CSREnum => 141 val Off = Value(0.U) 142 val Initial = Value(1.U) 143 val Clean = Value(2.U) 144 val Dirty = Value(3.U) 145 } 146 147 object XLENField extends CSREnum with ROApply { 148 val XLEN32 = Value(1.U) 149 val XLEN64 = Value(2.U) 150 val XLEN128 = Value(3.U) 151 } 152 153 object XtvecMode extends CSREnum with WARLApply { 154 val Direct = Value(0.U) 155 val Vectored = Value(1.U) 156 157 override def isLegal(enum: CSREnumType): Bool = enum.isOneOf(Direct, Vectored) 158 } 159 160 object SatpMode extends CSREnum with WARLApply { 161 val Bare = Value(0.U) 162 val Sv39 = Value(8.U) 163 val Sv48 = Value(9.U) 164 val Sv57 = Value(10.U) 165 val Sv64 = Value(11.U) // Reserved for page-based 64-bit virtual addressing 166 167 // XiangShan only support Sv39 Page 168 override def isLegal(enum: CSREnumType): Bool = enum.isOneOf(Bare, Sv39) 169 } 170 171 object HgatpMode extends CSREnum with WARLApply { 172 val Bare = Value(0.U) 173 val Sv39x4 = Value(8.U) 174 val Sv48x4 = Value(9.U) 175 val Sv57x4 = Value(10.U) 176 177 // XiangShan only support Sv39 Page 178 override def isLegal(enum: CSREnumType): Bool = enum.isOneOf(Bare, Sv39x4) 179 } 180 181 object CSRWARLField { 182 def apply(msb: Int, lsb: Int, fn: CSRRfnType): CSREnumType = macro CSRFieldsImpl.CSRWARLFieldRange 183 184 def apply(bit: Int, fn: CSRRfnType): CSREnumType = macro CSRFieldsImpl.CSRWARLFieldBit 185 186 def apply(msb: Int, lsb: Int, fn: CSRWfnType): CSREnumType = macro CSRFieldsImpl.CSRWARLFieldRange 187 188 def apply(bit: Int, fn: CSRWfnType): CSREnumType = macro CSRFieldsImpl.CSRWARLFieldBit 189 } 190 191 object CSRROField { 192 def apply(msb: Int, lsb: Int, rfn: CSRRfnType): CSREnumType = macro CSRFieldsImpl.CSRROFieldRange 193 194 def apply(bit: Int, rfn: CSRRfnType): CSREnumType = macro CSRFieldsImpl.CSRROFieldBit 195 196 def apply(msb: Int, lsb: Int): CSREnumType = macro CSRFieldsImpl.CSRROFieldRangeNoFn 197 198 def apply(bit: Int): CSREnumType = macro CSRFieldsImpl.CSRROFieldBitNoFn 199 } 200 201 object CSRRWField { 202 def apply(msb: Int, lsb: Int): CSREnumType = macro CSRFieldsImpl.CSRRWFieldRange 203 204 def apply(bit: Int): CSREnumType = macro CSRFieldsImpl.CSRRWFieldBit 205 206 def apply(msb: Int, lsb: Int, resetVal: Data): CSREnumType = macro CSRFieldsImpl.CSRRWFieldRangeWithReset 207 208 def apply(bit: Int, resetVal: Data): CSREnumType = macro CSRFieldsImpl.CSRRWFieldBitWithReset 209 } 210 211 object CSRWARLRefField { 212 def apply(ref: CSREnumType, msb: Int, lsb: Int, wfn: CSRWfnType): CSREnumType = macro CSRFieldsImpl.CSRRefWARLFieldRange 213 214 def apply(ref: CSREnumType, bit: Int, wfn: CSRWfnType): CSREnumType = macro CSRFieldsImpl.CSRRefWARLFieldBit 215 } 216 217 object CSRWLRLField { 218 def apply(msb: Int, lsb: Int, fn: CSRWfnType): CSREnumType = macro CSRFieldsImpl.CSRWLRLFieldRange 219 } 220 221 object PrivMode extends CSREnum with RWApply { 222 val U = Value(0.U) 223 val S = Value(1.U) 224 val M = Value(3.U) 225 } 226 227 object VirtMode extends CSREnum with RWApply { 228 val Off = Value(0.U) 229 val On = Value(1.U) 230 } 231 232 object DebugverMode extends CSREnum with DebugverModeDef with ROApply 233 234 trait DebugverModeDef { 235 this: CSREnum => 236 val None = Value(0.U) 237 val Spec = Value(4.U) 238 val Custom = Value(15.U) 239 } 240} 241