@@ -4,21 +4,24 @@ import chisel3._
4
4
import chisel3 .util ._
5
5
import difftest ._
6
6
7
- import treecorel2 .common .ConstVal
7
+ import treecorel2 .common .{ ConstVal , InstConfig }
8
8
9
- class CSRReg extends Module {
9
+ object CSRReg {
10
+ val timeCause = " h8000_0000_0000_0007" .U (64 .W )
11
+ val ecallCause = " h0000_0000_0000_000b" .U (64 .W )
12
+ }
13
+
14
+ class CSRReg extends Module with InstConfig {
10
15
val io = IO (new Bundle {
11
16
val globalEn = Input (Bool ())
12
- val pc = Input (UInt (64 .W ))
13
- val inst = Input (UInt (64 .W ))
14
- val src = Input (UInt (64 .W ))
15
- val data = Output (UInt (64 .W ))
17
+ val pc = Input (UInt (XLen .W ))
18
+ val inst = Input (UInt (XLen .W ))
19
+ val src = Input (UInt (XLen .W ))
20
+ val data = Output (UInt (XLen .W ))
16
21
val mtip = Input (Bool ())
17
22
val timeIntrEn = Output (Bool ())
18
23
val ecallEn = Output (Bool ())
19
-
20
- // difftest
21
- val csrState = Flipped (new DiffCSRStateIO )
24
+ val csrState = Flipped (new DiffCSRStateIO )
22
25
})
23
26
24
27
protected val csrrwVis = (io.inst === BitPat (" b????????????_?????_001_?????_1110011" ))
@@ -30,19 +33,19 @@ class CSRReg extends Module {
30
33
protected val csrVis = csrrcVis || csrrciVis || csrrsVis || csrrsiVis || csrrwVis || csrrwiVis
31
34
protected val mretVis = (io.inst === BitPat (" b001100000010_00000_000_00000_1110011" ))
32
35
protected val ecallVis = (io.inst === BitPat (" b000000000000_00000_000_00000_1110011" ))
33
- protected val zimm = ZeroExt (io.inst(19 , 15 ), 64 )
36
+ protected val zimm = ZeroExt (io.inst(19 , 15 ), XLen )
34
37
protected val addr = io.inst(31 , 20 )
35
38
36
- protected val mcycle = RegInit (0 .U (64 .W ))
37
- protected val mstatus = RegInit (0 .U (64 .W ))
38
- protected val mtvec = RegInit (0 .U (64 .W ))
39
- protected val mcause = RegInit (0 .U (64 .W ))
40
- protected val mepc = RegInit (0 .U (64 .W ))
41
- protected val mie = RegInit (0 .U (64 .W ))
42
- protected val mip = RegInit (0 .U (64 .W ))
43
- protected val mscratch = RegInit (0 .U (64 .W ))
44
- protected val medeleg = RegInit (0 .U (64 .W ))
45
- protected val mhartid = RegInit (0 .U (64 .W ))
39
+ protected val mcycle = RegInit (0 .U (XLen .W ))
40
+ protected val mstatus = RegInit (0 .U (XLen .W ))
41
+ protected val mtvec = RegInit (0 .U (XLen .W ))
42
+ protected val mcause = RegInit (0 .U (XLen .W ))
43
+ protected val mepc = RegInit (0 .U (XLen .W ))
44
+ protected val mie = RegInit (0 .U (XLen .W ))
45
+ protected val mip = RegInit (0 .U (XLen .W ))
46
+ protected val mscratch = RegInit (0 .U (XLen .W ))
47
+ protected val medeleg = RegInit (0 .U (XLen .W ))
48
+ protected val mhartid = RegInit (0 .U (XLen .W ))
46
49
47
50
protected val mhartidVis = addr === ConstVal .mhartidAddr
48
51
protected val mstatusVis = addr === ConstVal .mstatusAddr
@@ -117,9 +120,9 @@ class CSRReg extends Module {
117
120
}
118
121
119
122
when(timeIntrEn) {
120
- mcause := " h8000_0000_0000_0007 " . U ( 64 . W )
123
+ mcause := CSRReg .timeCause
121
124
}.elsewhen(ecallEn) {
122
- mcause := " h0000_0000_0000_000b " . U ( 64 . W )
125
+ mcause := CSRReg .ecallCause
123
126
}.elsewhen(csrVis && mcauseVis) {
124
127
mcause := wData
125
128
}
0 commit comments