@@ -43,31 +43,29 @@ class TreeCoreL2 extends Module with InstConfig {
43
43
exu.io.nxtPC <> ifu.io.nxtPC
44
44
exu.io.mtip <> mau.io.mtip
45
45
46
- // stall
47
- protected val isStall = exu.io.stall
48
- protected val (tickCnt, cntWrap) = Counter (io.globalEn && isStall, 3 )
49
- protected val cyc1 = isStall && (tickCnt === 0 .U )
50
- protected val cyc2 = isStall && (tickCnt === 1 .U )
51
- protected val cyc3 = isStall && (tickCnt === 2 .U )
46
+ // stall control
47
+ protected val stallCtrl = Module (new StallControl )
48
+ stallCtrl.io.globalEn := io.globalEn
49
+ stallCtrl.io.stall := exu.io.stall
52
50
53
- ifu.io.stall := cyc1
54
- idu.io.stall := cyc1
51
+ ifu.io.stall := stallCtrl.io.st1
52
+ idu.io.stall := stallCtrl.io.st1
55
53
ifu.io.globalEn := io.globalEn
56
54
idu.io.globalEn := io.globalEn
57
- exu.io.globalEn := Mux (cyc1 || cyc2 , false .B , io.globalEn)
58
- mau.io.globalEn := Mux (cyc1 || cyc2 , false .B , io.globalEn)
59
- wbu.io.globalEn := Mux (cyc1 || cyc2 , false .B , io.globalEn)
60
- idu.io.wbdata := Mux (cyc1 || cyc2 , 0 .U .asTypeOf(new WBDATAIO ), wbu.io.wbdata)
61
- ifu.io.nxtPC := Mux (cyc1 , exu.io.nxtPC, 0 .U .asTypeOf(new NXTPCIO ))
55
+ exu.io.globalEn := Mux (stallCtrl.io.st1 || stallCtrl.io.st2 , false .B , io.globalEn)
56
+ mau.io.globalEn := Mux (stallCtrl.io.st1 || stallCtrl.io.st2 , false .B , io.globalEn)
57
+ wbu.io.globalEn := Mux (stallCtrl.io.st1 || stallCtrl.io.st2 , false .B , io.globalEn)
58
+ idu.io.wbdata := Mux (stallCtrl.io.st1 || stallCtrl.io.st2 , 0 .U .asTypeOf(new WBDATAIO ), wbu.io.wbdata)
59
+ ifu.io.nxtPC := Mux (stallCtrl.io.st1 , exu.io.nxtPC, 0 .U .asTypeOf(new NXTPCIO ))
62
60
63
61
// special judge
64
- protected val lsStall = RegEnable (cyc1 , false .B , io.globalEn) || RegEnable (cyc2 , false .B , io.globalEn)
62
+ protected val lsStall = RegEnable (stallCtrl.io.st1 , false .B , io.globalEn) || RegEnable (stallCtrl.io.st2 , false .B , io.globalEn)
65
63
protected val ldDataReg = RegInit (0 .U (XLen .W ))
66
64
67
65
when(io.globalEn) {
68
- when(cyc1 ) {
66
+ when(stallCtrl.io.st1 ) {
69
67
ldDataReg := io.ld.data
70
- }.elsewhen(cyc3 ) {
68
+ }.elsewhen(stallCtrl.io.st3 ) {
71
69
ldDataReg := 0 .U
72
70
}
73
71
}
0 commit comments