@@ -4,7 +4,7 @@ import chisel3._
44import chisel3 .util ._
55import difftest ._
66
7- class TreeCoreL2 extends Module {
7+ class TreeCoreL2 extends Module with InstConfig {
88 val io = IO (new Bundle {
99 val globalEn = Input (Bool ())
1010 val socEn = Input (Bool ())
@@ -43,31 +43,29 @@ class TreeCoreL2 extends Module {
4343 exu.io.nxtPC <> ifu.io.nxtPC
4444 exu.io.mtip <> mau.io.mtip
4545
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
5250
53- ifu.io.stall := cyc1
54- idu.io.stall := cyc1
51+ ifu.io.stall := stallCtrl.io.st1
52+ idu.io.stall := stallCtrl.io.st1
5553 ifu.io.globalEn := io.globalEn
5654 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 ))
6260
6361 // special judge
64- protected val lsStall = RegEnable (cyc1 , false .B , io.globalEn) || RegEnable (cyc2 , false .B , io.globalEn)
65- protected val ldDataReg = RegInit (0 .U (64 .W ))
62+ protected val lsStall = RegEnable (stallCtrl.io.st1 , false .B , io.globalEn) || RegEnable (stallCtrl.io.st2 , false .B , io.globalEn)
63+ protected val ldDataReg = RegInit (0 .U (XLen .W ))
6664
6765 when(io.globalEn) {
68- when(cyc1 ) {
66+ when(stallCtrl.io.st1 ) {
6967 ldDataReg := io.ld.data
70- }.elsewhen(cyc3 ) {
68+ }.elsewhen(stallCtrl.io.st3 ) {
7169 ldDataReg := 0 .U
7270 }
7371 }
0 commit comments