1package xiangshan.backend.fu.wrapper 2 3import chipsalliance.rocketchip.config.Parameters 4import chisel3._ 5import utility.SignExt 6import xiangshan.backend.decode.ImmUnion 7import xiangshan.backend.fu.{BranchModule, FuncUnit} 8import xiangshan.backend.fu.FuConfig 9import xiangshan.backend.datapath.DataConfig.VAddrData 10import xiangshan.{RedirectLevel, XSModule} 11 12class AddrAddModule(len: Int)(implicit p: Parameters) extends XSModule { 13 val io = IO(new Bundle { 14 val pc = Input(UInt(len.W)) 15 val offset = Input(UInt(12.W)) // branch inst only support 12 bits immediate num 16 val target = Output(UInt(len.W)) 17 }) 18 io.target := io.pc + SignExt(ImmUnion.B.toImm32(io.offset), len) 19} 20 21class BranchUnit(cfg: FuConfig)(implicit p: Parameters) extends FuncUnit(cfg) { 22 val dataModule = Module(new BranchModule) 23 val addModule = Module(new AddrAddModule(VAddrData().dataWidth)) 24 dataModule.io.src(0) := io.in.bits.src(0) // rs1 25 dataModule.io.src(1) := io.in.bits.src(1) // rs2 26 dataModule.io.func := io.in.bits.fuOpType 27 dataModule.io.pred_taken := io.in.bits.predictInfo.get.taken 28 29 addModule.io.pc := io.in.bits.pc.get // pc 30 addModule.io.offset := io.in.bits.imm // imm 31 32 io.out.valid := io.in.valid 33 io.in.ready := io.out.ready 34 35 io.out.bits.data := 0.U 36 37 io.out.bits.redirect.get.valid := io.out.valid && dataModule.io.mispredict 38 io.out.bits.redirect.get.bits := 0.U.asTypeOf(io.out.bits.redirect.get.bits) 39 io.out.bits.redirect.get.bits.level := RedirectLevel.flushAfter 40 io.out.bits.redirect.get.bits.robIdx := io.in.bits.robIdx 41 io.out.bits.redirect.get.bits.ftqIdx := io.in.bits.ftqIdx.get 42 io.out.bits.redirect.get.bits.ftqOffset := io.in.bits.ftqOffset.get 43 io.out.bits.redirect.get.bits.cfiUpdate.isMisPred := dataModule.io.mispredict 44 io.out.bits.redirect.get.bits.cfiUpdate.taken := dataModule.io.taken 45 io.out.bits.redirect.get.bits.cfiUpdate.predTaken := dataModule.io.pred_taken 46 io.out.bits.redirect.get.bits.cfiUpdate.target := addModule.io.target 47 connectNonPipedCtrlSingal 48} 49