xref: /XiangShan/src/main/scala/xiangshan/backend/fu/NewCSR/CSRDefines.scala (revision 25dc4a827ee27e3ccbaf02e8e5134872cba28fcd)
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