xref: /XiangShan/src/main/scala/xiangshan/backend/fu/wrapper/JumpUnit.scala (revision bb2f3f51dd67f6e16e0cc1ffe43368c9fc7e4aef)
1package xiangshan.backend.fu.wrapper
2
3import org.chipsalliance.cde.config.Parameters
4import chisel3._
5import fudian.SignExt
6import xiangshan.RedirectLevel
7import xiangshan.backend.fu.{FuConfig, FuncUnit, JumpDataModule, PipedFuncUnit}
8import xiangshan.backend.datapath.DataConfig.VAddrData
9
10
11class JumpUnit(cfg: FuConfig)(implicit p: Parameters) extends PipedFuncUnit(cfg) {
12  private val jumpDataModule = Module(new JumpDataModule)
13
14  private val flushed = io.in.bits.ctrl.robIdx.needFlush(io.flush)
15
16  // associated with AddrData's position of JmpCfg.srcData
17  private val src = io.in.bits.data.src(0)
18  private val pc = SignExt(io.in.bits.data.pc.get, cfg.destDataBits)
19  private val immMin = io.in.bits.data.imm
20  private val func = io.in.bits.ctrl.fuOpType
21  private val isRVC = io.in.bits.ctrl.preDecode.get.isRVC
22
23  jumpDataModule.io.src := src
24  jumpDataModule.io.pc := pc
25  jumpDataModule.io.immMin := immMin
26  jumpDataModule.io.func := func
27  jumpDataModule.io.isRVC := isRVC
28
29  val jmpTarget = io.in.bits.ctrl.predictInfo.get.target
30  val predTaken = io.in.bits.ctrl.predictInfo.get.taken
31
32  val redirect = io.out.bits.res.redirect.get.bits
33  val redirectValid = io.out.bits.res.redirect.get.valid
34  redirectValid := io.in.valid && !jumpDataModule.io.isAuipc
35  redirect := 0.U.asTypeOf(redirect)
36  redirect.level := RedirectLevel.flushAfter
37  redirect.robIdx := io.in.bits.ctrl.robIdx
38  redirect.ftqIdx := io.in.bits.ctrl.ftqIdx.get
39  redirect.ftqOffset := io.in.bits.ctrl.ftqOffset.get
40  redirect.cfiUpdate.predTaken := true.B
41  redirect.cfiUpdate.taken := true.B
42  redirect.cfiUpdate.target := jumpDataModule.io.target
43  redirect.cfiUpdate.isMisPred := jumpDataModule.io.target(VAddrData().dataWidth - 1, 0) =/= jmpTarget || !predTaken
44//  redirect.debug_runahead_checkpoint_id := uop.debugInfo.runahead_checkpoint_id // Todo: assign it
45
46  io.in.ready := io.out.ready
47  io.out.valid := io.in.valid
48  io.out.bits.res.data := jumpDataModule.io.result
49  connect0LatencyCtrlSingal
50}
51