Skip to content

Commit a6b1af2

Browse files
committed
feat: add independ stall ctrl module
1 parent 2b57c88 commit a6b1af2

File tree

2 files changed

+37
-16
lines changed

2 files changed

+37
-16
lines changed
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package treecorel2
2+
3+
import chisel3._
4+
import chisel3.util._
5+
6+
class StallControl extends Module with InstConfig {
7+
val io = IO(new Bundle {
8+
val globalEn = Input(Bool())
9+
val stall = Input(Bool())
10+
val st1 = Output(Bool())
11+
val st2 = Output(Bool())
12+
val st3 = Output(Bool())
13+
})
14+
15+
protected val (tickCnt, cntWrap) = Counter(io.globalEn && io.stall, 3)
16+
protected val cyc1 = io.stall && (tickCnt === 0.U)
17+
protected val cyc2 = io.stall && (tickCnt === 1.U)
18+
protected val cyc3 = io.stall && (tickCnt === 2.U)
19+
20+
io.st1 := cyc1
21+
io.st2 := cyc2
22+
io.st3 := cyc3
23+
}

rtl/tc_l2/src/main/scala/core/TreeCoreL2.scala

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -43,31 +43,29 @@ class TreeCoreL2 extends Module with InstConfig {
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)
62+
protected val lsStall = RegEnable(stallCtrl.io.st1, false.B, io.globalEn) || RegEnable(stallCtrl.io.st2, false.B, io.globalEn)
6563
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

Comments
 (0)