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