@@ -3,23 +3,27 @@ package treecorel2
33import chisel3 ._
44import chisel3 .util ._
55
6+ import treecorel2 .common .ConstVal
7+
68class IFU extends Module {
79 val io = IO (new Bundle {
8- val globalEn = Input (Bool ())
9- val stall = Input (Bool ())
10- val socEn = Input (Bool ())
11- val fetch = new IFIO
12- val if2id = new IF2IDIO
13- val nxtPC = Flipped (new NXTPCIO )
10+ val globalEn = Input (Bool ())
11+ val stall = Input (Bool ())
12+ val socEn = Input (Bool ())
13+ val branchInfo = Flipped (new BRANCHIO )
14+ val fetch = new IFIO
15+ val if2id = new IF2IDIO
16+ val nxtPC = Flipped (new NXTPCIO )
1417 })
1518
1619 protected val startAddr = Mux (io.socEn, " h0000000030000000" .U (64 .W ), " h0000000080000000" .U (64 .W ))
1720 protected val valid = Mux (reset.asBool(), false .B , true .B )
1821 protected val inst = io.fetch.data
1922 protected val pc = RegInit (startAddr)
2023
21- // protected val bpu = Module(new BPU)
22- // bpu.io.in := 0.U
24+ protected val bpu = Module (new BPU )
25+ bpu.io.branchInfo <> io.branchInfo
26+ bpu.io.lookupPc := pc
2327
2428 when(io.globalEn) {
2529 when(io.nxtPC.trap) {
@@ -28,15 +32,18 @@ class IFU extends Module {
2832 pc := io.nxtPC.mepc
2933 }.elsewhen(io.nxtPC.branch) {
3034 pc := io.nxtPC.tgt
35+ }.elsewhen(bpu.io.predTaken) {
36+ pc := bpu.io.predTgt
3137 }.otherwise {
3238 pc := pc + 4 .U
3339 }
3440 }
3541
36- io.if2id.valid := Mux (io.stall, false .B , valid)
37- io.if2id.inst := inst
38- io.if2id.pc := pc
39-
42+ io.if2id.valid := Mux (io.stall, false .B , valid)
43+ io.if2id.inst := inst
44+ io.if2id.pc := pc
45+ io.if2id.branIdx := bpu.io.predIdx
46+ io.if2id.predTaken := bpu.io.predTaken
4047 // comm with crossbar to get inst back
4148 io.fetch.en := valid
4249 io.fetch.addr := pc
0 commit comments