1*d91483a6Sfdy/*************************************************************************************** 2*d91483a6Sfdy * Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences 3*d91483a6Sfdy * Copyright (c) 2020-2021 Peng Cheng Laboratory 4*d91483a6Sfdy * 5*d91483a6Sfdy * XiangShan is licensed under Mulan PSL v2. 6*d91483a6Sfdy * You can use this software according to the terms and conditions of the Mulan PSL v2. 7*d91483a6Sfdy * You may obtain a copy of Mulan PSL v2 at: 8*d91483a6Sfdy * http://license.coscl.org.cn/MulanPSL2 9*d91483a6Sfdy * 10*d91483a6Sfdy * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, 11*d91483a6Sfdy * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, 12*d91483a6Sfdy * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. 13*d91483a6Sfdy * 14*d91483a6Sfdy * See the Mulan PSL v2 for more details. 15*d91483a6Sfdy ***************************************************************************************/ 16*d91483a6Sfdy 17*d91483a6Sfdypackage xiangshan.backend.decode 18*d91483a6Sfdy 19*d91483a6Sfdyimport chipsalliance.rocketchip.config.Parameters 20*d91483a6Sfdyimport chisel3._ 21*d91483a6Sfdyimport chisel3.util._ 22*d91483a6Sfdyimport freechips.rocketchip.rocket.Instructions 23*d91483a6Sfdyimport freechips.rocketchip.util.uintToBitPat 24*d91483a6Sfdyimport utils._ 25*d91483a6Sfdyimport utility._ 26*d91483a6Sfdyimport xiangshan.ExceptionNO.illegalInstr 27*d91483a6Sfdyimport xiangshan._ 28*d91483a6Sfdyimport xiangshan.backend.fu.fpu.FPU 29*d91483a6Sfdyimport xiangshan.backend.fu.FuType 30*d91483a6Sfdyimport freechips.rocketchip.rocket.Instructions._ 31*d91483a6Sfdyimport xiangshan.backend.Bundles.{DecodedInst, StaticInst} 32*d91483a6Sfdyimport yunsuan.VpermType 33*d91483a6Sfdy 34*d91483a6Sfdyimport scala.collection.Seq 35*d91483a6Sfdy 36*d91483a6Sfdytrait VectorConstants { 37*d91483a6Sfdy val MAX_VLMUL = 8 38*d91483a6Sfdy val FP_TMP_REG_MV = 32 39*d91483a6Sfdy val VECTOR_TMP_REG_LMUL = 32 // 32~38 -> 7 40*d91483a6Sfdy val VECTOR_VCONFIG = 39 41*d91483a6Sfdy} 42*d91483a6Sfdy 43*d91483a6Sfdyclass DecodeUnitCompIO(implicit p: Parameters) extends XSBundle { 44*d91483a6Sfdy val enq = new Bundle { val staticInst = Input(new StaticInst) } 45*d91483a6Sfdy val vtype = Input(new VType) 46*d91483a6Sfdy val isComplex = Input(Vec(DecodeWidth - 1, Bool())) 47*d91483a6Sfdy val validFromIBuf = Input(Vec(DecodeWidth, Bool())) 48*d91483a6Sfdy val readyFromRename = Input(Vec(RenameWidth, Bool())) 49*d91483a6Sfdy val deq = new Bundle { 50*d91483a6Sfdy val decodedInsts = Output(Vec(RenameWidth, new DecodedInst)) 51*d91483a6Sfdy val isVset = Output(Bool()) 52*d91483a6Sfdy val readyToIBuf = Output(Vec(DecodeWidth, Bool())) 53*d91483a6Sfdy val validToRename = Output(Vec(RenameWidth, Bool())) 54*d91483a6Sfdy val complexNum = Output(UInt(3.W)) 55*d91483a6Sfdy } 56*d91483a6Sfdy val csrCtrl = Input(new CustomCSRCtrlIO) 57*d91483a6Sfdy} 58*d91483a6Sfdy/** 59*d91483a6Sfdy * @author zly 60*d91483a6Sfdy */ 61*d91483a6Sfdyclass DecodeUnitComp()(implicit p : Parameters) extends XSModule with DecodeUnitConstants with VectorConstants { 62*d91483a6Sfdy val io = IO(new DecodeUnitCompIO) 63*d91483a6Sfdy 64*d91483a6Sfdy val maxUopSize = MaxUopSize 65*d91483a6Sfdy //input bits 66*d91483a6Sfdy val staticInst = Wire(new StaticInst) 67*d91483a6Sfdy 68*d91483a6Sfdy staticInst := io.enq.staticInst 69*d91483a6Sfdy 70*d91483a6Sfdy val src1 = Cat(0.U(1.W), staticInst.instr(19, 15)) 71*d91483a6Sfdy val src2 = Cat(0.U(1.W), staticInst.instr(24, 20)) 72*d91483a6Sfdy val dest = Cat(0.U(1.W), staticInst.instr(11, 7)) 73*d91483a6Sfdy 74*d91483a6Sfdy //output bits 75*d91483a6Sfdy val decodedInsts = Wire(Vec(RenameWidth, new DecodedInst)) 76*d91483a6Sfdy val validToRename = Wire(Vec(RenameWidth, Bool())) 77*d91483a6Sfdy val readyToIBuf = Wire(Vec(DecodeWidth, Bool())) 78*d91483a6Sfdy val complexNum = Wire(UInt(3.W)) 79*d91483a6Sfdy 80*d91483a6Sfdy //output of DecodeUnit 81*d91483a6Sfdy val decodedInsts_u = Wire(new DecodedInst) 82*d91483a6Sfdy val isVset_u = Wire(Bool()) 83*d91483a6Sfdy 84*d91483a6Sfdy //pre decode 85*d91483a6Sfdy val simple = Module(new DecodeUnit) 86*d91483a6Sfdy simple.io.enq.ctrlFlow := staticInst 87*d91483a6Sfdy simple.io.enq.vtype := io.vtype 88*d91483a6Sfdy simple.io.csrCtrl := io.csrCtrl 89*d91483a6Sfdy decodedInsts_u := simple.io.deq.decodedInst 90*d91483a6Sfdy isVset_u := simple.io.deq.decodedInst.isVset 91*d91483a6Sfdy when(isVset_u) { 92*d91483a6Sfdy when(dest === 0.U && src1 === 0.U) { 93*d91483a6Sfdy decodedInsts_u.fuOpType := VSETOpType.convert2oldvl(simple.io.deq.decodedInst.fuOpType) 94*d91483a6Sfdy }.elsewhen(src1 === 0.U) { 95*d91483a6Sfdy decodedInsts_u.fuOpType := VSETOpType.convert2vlmax(simple.io.deq.decodedInst.fuOpType) 96*d91483a6Sfdy } 97*d91483a6Sfdy } 98*d91483a6Sfdy //Type of uop Div 99*d91483a6Sfdy val typeOfDiv = decodedInsts_u.uopDivType 100*d91483a6Sfdy 101*d91483a6Sfdy //LMUL 102*d91483a6Sfdy val lmul = MuxLookup(simple.io.enq.vtype.vlmul, 1.U(4.W), Array( 103*d91483a6Sfdy "b001".U -> 2.U, 104*d91483a6Sfdy "b010".U -> 4.U, 105*d91483a6Sfdy "b011".U -> 8.U 106*d91483a6Sfdy )) 107*d91483a6Sfdy val numOfUopVslide = MuxLookup(simple.io.enq.vtype.vlmul, 1.U(log2Up(maxUopSize+1).W), Array( 108*d91483a6Sfdy "b001".U -> 3.U, 109*d91483a6Sfdy "b010".U -> 10.U, 110*d91483a6Sfdy "b011".U -> 36.U 111*d91483a6Sfdy )) 112*d91483a6Sfdy //number of uop 113*d91483a6Sfdy val numOfUop = MuxLookup(typeOfDiv, 1.U(log2Up(maxUopSize+1).W), Array( 114*d91483a6Sfdy UopDivType.VEC_0XV -> 2.U, 115*d91483a6Sfdy UopDivType.DIR -> Mux(dest =/= 0.U, 2.U, 116*d91483a6Sfdy Mux(src1 =/= 0.U, 1.U, 117*d91483a6Sfdy Mux(VSETOpType.isVsetvl(decodedInsts_u.fuOpType), 2.U, 1.U))), 118*d91483a6Sfdy UopDivType.VEC_VVV -> lmul, 119*d91483a6Sfdy UopDivType.VEC_EXT2 -> lmul, 120*d91483a6Sfdy UopDivType.VEC_EXT4 -> lmul, 121*d91483a6Sfdy UopDivType.VEC_EXT8 -> lmul, 122*d91483a6Sfdy UopDivType.VEC_VVM -> lmul, 123*d91483a6Sfdy UopDivType.VEC_VXM -> (lmul +& 1.U), 124*d91483a6Sfdy UopDivType.VEC_VXV -> (lmul +& 1.U), 125*d91483a6Sfdy UopDivType.VEC_VVW -> Cat(lmul, 0.U(1.W)), // lmul <= 4 126*d91483a6Sfdy UopDivType.VEC_WVW -> Cat(lmul, 0.U(1.W)), // lmul <= 4 127*d91483a6Sfdy UopDivType.VEC_VXW -> Cat(lmul, 1.U(1.W)), // lmul <= 4 128*d91483a6Sfdy UopDivType.VEC_WXW -> Cat(lmul, 1.U(1.W)), // lmul <= 4 129*d91483a6Sfdy UopDivType.VEC_WVV -> Cat(lmul, 0.U(1.W)), // lmul <= 4 130*d91483a6Sfdy UopDivType.VEC_WXV -> Cat(lmul, 1.U(1.W)), // lmul <= 4 131*d91483a6Sfdy UopDivType.VEC_SLIDE1UP -> (lmul +& 1.U), 132*d91483a6Sfdy UopDivType.VEC_FSLIDE1UP -> lmul, 133*d91483a6Sfdy UopDivType.VEC_SLIDE1DOWN -> Cat(lmul, 0.U(1.W)), 134*d91483a6Sfdy UopDivType.VEC_FSLIDE1DOWN -> (Cat(lmul, 0.U(1.W)) -1.U), 135*d91483a6Sfdy UopDivType.VEC_VRED -> lmul, 136*d91483a6Sfdy UopDivType.VEC_SLIDEUP -> (numOfUopVslide + 1.U), 137*d91483a6Sfdy UopDivType.VEC_ISLIDEUP -> numOfUopVslide, 138*d91483a6Sfdy UopDivType.VEC_SLIDEDOWN -> (numOfUopVslide + 1.U), 139*d91483a6Sfdy UopDivType.VEC_ISLIDEDOWN -> numOfUopVslide, 140*d91483a6Sfdy UopDivType.VEC_M0X -> (lmul +& 1.U), 141*d91483a6Sfdy UopDivType.VEC_MVV -> (Cat(lmul, 0.U(1.W)) -1.U), 142*d91483a6Sfdy UopDivType.VEC_M0X_VFIRST -> 2.U, 143*d91483a6Sfdy )) 144*d91483a6Sfdy 145*d91483a6Sfdy //uop div up to maxUopSize 146*d91483a6Sfdy val csBundle = Wire(Vec(maxUopSize, new DecodedInst)) 147*d91483a6Sfdy csBundle.map { case dst => 148*d91483a6Sfdy dst := decodedInsts_u 149*d91483a6Sfdy dst.firstUop := false.B 150*d91483a6Sfdy dst.lastUop := false.B 151*d91483a6Sfdy } 152*d91483a6Sfdy 153*d91483a6Sfdy csBundle(0).firstUop := true.B 154*d91483a6Sfdy csBundle(numOfUop - 1.U).lastUop := true.B 155*d91483a6Sfdy 156*d91483a6Sfdy switch(typeOfDiv) { 157*d91483a6Sfdy is(UopDivType.DIR) { 158*d91483a6Sfdy when(isVset_u) { 159*d91483a6Sfdy when(dest =/= 0.U) { 160*d91483a6Sfdy csBundle(0).fuType := FuType.vsetiwi.U 161*d91483a6Sfdy csBundle(0).fuOpType := VSETOpType.convert2uvsetvl(decodedInsts_u.fuOpType) 162*d91483a6Sfdy csBundle(0).flushPipe := false.B 163*d91483a6Sfdy csBundle(0).rfWen := true.B 164*d91483a6Sfdy csBundle(0).vecWen := false.B 165*d91483a6Sfdy csBundle(1).ldest := VECTOR_VCONFIG.U 166*d91483a6Sfdy }.elsewhen(src1 =/= 0.U) { 167*d91483a6Sfdy csBundle(0).ldest := VECTOR_VCONFIG.U 168*d91483a6Sfdy }.elsewhen(VSETOpType.isVsetvli(decodedInsts_u.fuOpType)) { 169*d91483a6Sfdy csBundle(0).fuType := FuType.vsetfwf.U 170*d91483a6Sfdy csBundle(0).srcType(0) := SrcType.vp 171*d91483a6Sfdy csBundle(0).lsrc(0) := VECTOR_VCONFIG.U 172*d91483a6Sfdy }.elsewhen(VSETOpType.isVsetvl(decodedInsts_u.fuOpType)) { 173*d91483a6Sfdy csBundle(0).srcType(0) := SrcType.reg 174*d91483a6Sfdy csBundle(0).srcType(1) := SrcType.imm 175*d91483a6Sfdy csBundle(0).lsrc(1) := 0.U 176*d91483a6Sfdy csBundle(0).ldest := FP_TMP_REG_MV.U 177*d91483a6Sfdy csBundle(0).fuType := FuType.i2f.U 178*d91483a6Sfdy csBundle(0).rfWen := false.B 179*d91483a6Sfdy csBundle(0).fpWen := true.B 180*d91483a6Sfdy csBundle(0).vecWen := false.B 181*d91483a6Sfdy csBundle(0).fpu.isAddSub := false.B 182*d91483a6Sfdy csBundle(0).fpu.typeTagIn := FPU.D 183*d91483a6Sfdy csBundle(0).fpu.typeTagOut := FPU.D 184*d91483a6Sfdy csBundle(0).fpu.fromInt := true.B 185*d91483a6Sfdy csBundle(0).fpu.wflags := false.B 186*d91483a6Sfdy csBundle(0).fpu.fpWen := true.B 187*d91483a6Sfdy csBundle(0).fpu.div := false.B 188*d91483a6Sfdy csBundle(0).fpu.sqrt := false.B 189*d91483a6Sfdy csBundle(0).fpu.fcvt := false.B 190*d91483a6Sfdy csBundle(0).flushPipe := false.B 191*d91483a6Sfdy csBundle(1).fuType := FuType.vsetfwf.U 192*d91483a6Sfdy csBundle(1).srcType(0) := SrcType.vp 193*d91483a6Sfdy csBundle(1).lsrc(0) := VECTOR_VCONFIG.U 194*d91483a6Sfdy csBundle(1).srcType(1) := SrcType.fp 195*d91483a6Sfdy csBundle(1).lsrc(1) := FP_TMP_REG_MV.U 196*d91483a6Sfdy csBundle(1).ldest := VECTOR_VCONFIG.U 197*d91483a6Sfdy } 198*d91483a6Sfdy } 199*d91483a6Sfdy } 200*d91483a6Sfdy is(UopDivType.VEC_VVV) { 201*d91483a6Sfdy for (i <- 0 until MAX_VLMUL) { 202*d91483a6Sfdy csBundle(i).lsrc(0) := src1 + i.U 203*d91483a6Sfdy csBundle(i).lsrc(1) := src2 + i.U 204*d91483a6Sfdy csBundle(i).lsrc(2) := dest + i.U 205*d91483a6Sfdy csBundle(i).ldest := dest + i.U 206*d91483a6Sfdy csBundle(i).uopIdx := i.U 207*d91483a6Sfdy } 208*d91483a6Sfdy } 209*d91483a6Sfdy is(UopDivType.VEC_EXT2) { 210*d91483a6Sfdy for (i <- 0 until MAX_VLMUL / 2) { 211*d91483a6Sfdy csBundle(2 * i).lsrc(1) := src2 + i.U 212*d91483a6Sfdy csBundle(2 * i).lsrc(2) := dest + (2 * i).U 213*d91483a6Sfdy csBundle(2 * i).ldest := dest + (2 * i).U 214*d91483a6Sfdy csBundle(2 * i).uopIdx := (2 * i).U 215*d91483a6Sfdy csBundle(2 * i + 1).lsrc(1) := src2 + i.U 216*d91483a6Sfdy csBundle(2 * i + 1).lsrc(2) := dest + (2 * i + 1).U 217*d91483a6Sfdy csBundle(2 * i + 1).ldest := dest + (2 * i + 1).U 218*d91483a6Sfdy csBundle(2 * i + 1).uopIdx := (2 * i + 1).U 219*d91483a6Sfdy } 220*d91483a6Sfdy } 221*d91483a6Sfdy is(UopDivType.VEC_EXT4) { 222*d91483a6Sfdy for (i <- 0 until MAX_VLMUL / 4) { 223*d91483a6Sfdy csBundle(4 * i).lsrc(1) := src2 + i.U 224*d91483a6Sfdy csBundle(4 * i).lsrc(2) := dest + (4 * i).U 225*d91483a6Sfdy csBundle(4 * i).ldest := dest + (4 * i).U 226*d91483a6Sfdy csBundle(4 * i).uopIdx := (4 * i).U 227*d91483a6Sfdy csBundle(4 * i + 1).lsrc(1) := src2 + i.U 228*d91483a6Sfdy csBundle(4 * i + 1).lsrc(2) := dest + (4 * i + 1).U 229*d91483a6Sfdy csBundle(4 * i + 1).ldest := dest + (4 * i + 1).U 230*d91483a6Sfdy csBundle(4 * i + 1).uopIdx := (4 * i + 1).U 231*d91483a6Sfdy csBundle(4 * i + 2).lsrc(1) := src2 + i.U 232*d91483a6Sfdy csBundle(4 * i + 2).lsrc(2) := dest + (4 * i + 2).U 233*d91483a6Sfdy csBundle(4 * i + 2).ldest := dest + (4 * i + 2).U 234*d91483a6Sfdy csBundle(4 * i + 2).uopIdx := (4 * i + 2).U 235*d91483a6Sfdy csBundle(4 * i + 3).lsrc(1) := src2 + i.U 236*d91483a6Sfdy csBundle(4 * i + 3).lsrc(2) := dest + (4 * i + 3).U 237*d91483a6Sfdy csBundle(4 * i + 3).ldest := dest + (4 * i + 3).U 238*d91483a6Sfdy csBundle(4 * i + 3).uopIdx := (4 * i + 3).U 239*d91483a6Sfdy } 240*d91483a6Sfdy } 241*d91483a6Sfdy is(UopDivType.VEC_EXT8) { 242*d91483a6Sfdy for (i <- 0 until MAX_VLMUL) { 243*d91483a6Sfdy csBundle(i).lsrc(1) := src2 244*d91483a6Sfdy csBundle(i).lsrc(2) := dest + i.U 245*d91483a6Sfdy csBundle(i).ldest := dest + i.U 246*d91483a6Sfdy csBundle(i).uopIdx := i.U 247*d91483a6Sfdy } 248*d91483a6Sfdy } 249*d91483a6Sfdy is(UopDivType.VEC_0XV) { 250*d91483a6Sfdy /* 251*d91483a6Sfdy FMV.D.X 252*d91483a6Sfdy */ 253*d91483a6Sfdy csBundle(0).srcType(0) := SrcType.reg 254*d91483a6Sfdy csBundle(0).srcType(1) := SrcType.imm 255*d91483a6Sfdy csBundle(0).lsrc(1) := 0.U 256*d91483a6Sfdy csBundle(0).ldest := FP_TMP_REG_MV.U 257*d91483a6Sfdy csBundle(0).fuType := FuType.i2f.U 258*d91483a6Sfdy csBundle(0).rfWen := false.B 259*d91483a6Sfdy csBundle(0).fpWen := true.B 260*d91483a6Sfdy csBundle(0).vecWen := false.B 261*d91483a6Sfdy csBundle(0).fpu.isAddSub := false.B 262*d91483a6Sfdy csBundle(0).fpu.typeTagIn := FPU.D 263*d91483a6Sfdy csBundle(0).fpu.typeTagOut := FPU.D 264*d91483a6Sfdy csBundle(0).fpu.fromInt := true.B 265*d91483a6Sfdy csBundle(0).fpu.wflags := false.B 266*d91483a6Sfdy csBundle(0).fpu.fpWen := true.B 267*d91483a6Sfdy csBundle(0).fpu.div := false.B 268*d91483a6Sfdy csBundle(0).fpu.sqrt := false.B 269*d91483a6Sfdy csBundle(0).fpu.fcvt := false.B 270*d91483a6Sfdy /* 271*d91483a6Sfdy vfmv.s.f 272*d91483a6Sfdy */ 273*d91483a6Sfdy csBundle(1).srcType(0) := SrcType.fp 274*d91483a6Sfdy csBundle(1).srcType(1) := SrcType.vp 275*d91483a6Sfdy csBundle(1).srcType(2) := SrcType.vp 276*d91483a6Sfdy csBundle(1).lsrc(0) := FP_TMP_REG_MV.U 277*d91483a6Sfdy csBundle(1).lsrc(1) := 0.U 278*d91483a6Sfdy csBundle(1).lsrc(2) := dest 279*d91483a6Sfdy csBundle(1).ldest := dest 280*d91483a6Sfdy csBundle(1).fuType := FuType.vppu.U 281*d91483a6Sfdy csBundle(1).fuOpType := VpermType.vfmv_s_f 282*d91483a6Sfdy csBundle(1).rfWen := false.B 283*d91483a6Sfdy csBundle(1).fpWen := false.B 284*d91483a6Sfdy csBundle(1).vecWen := true.B 285*d91483a6Sfdy } 286*d91483a6Sfdy is(UopDivType.VEC_VXV) { 287*d91483a6Sfdy /* 288*d91483a6Sfdy FMV.D.X 289*d91483a6Sfdy */ 290*d91483a6Sfdy csBundle(0).srcType(0) := SrcType.reg 291*d91483a6Sfdy csBundle(0).srcType(1) := SrcType.imm 292*d91483a6Sfdy csBundle(0).lsrc(1) := 0.U 293*d91483a6Sfdy csBundle(0).ldest := FP_TMP_REG_MV.U 294*d91483a6Sfdy csBundle(0).fuType := FuType.i2f.U 295*d91483a6Sfdy csBundle(0).rfWen := false.B 296*d91483a6Sfdy csBundle(0).fpWen := true.B 297*d91483a6Sfdy csBundle(0).vecWen := false.B 298*d91483a6Sfdy csBundle(0).fpu.isAddSub := false.B 299*d91483a6Sfdy csBundle(0).fpu.typeTagIn := FPU.D 300*d91483a6Sfdy csBundle(0).fpu.typeTagOut := FPU.D 301*d91483a6Sfdy csBundle(0).fpu.fromInt := true.B 302*d91483a6Sfdy csBundle(0).fpu.wflags := false.B 303*d91483a6Sfdy csBundle(0).fpu.fpWen := true.B 304*d91483a6Sfdy csBundle(0).fpu.div := false.B 305*d91483a6Sfdy csBundle(0).fpu.sqrt := false.B 306*d91483a6Sfdy csBundle(0).fpu.fcvt := false.B 307*d91483a6Sfdy /* 308*d91483a6Sfdy LMUL 309*d91483a6Sfdy */ 310*d91483a6Sfdy for (i <- 0 until MAX_VLMUL) { 311*d91483a6Sfdy csBundle(i + 1).srcType(0) := SrcType.fp 312*d91483a6Sfdy csBundle(i + 1).lsrc(0) := FP_TMP_REG_MV.U 313*d91483a6Sfdy csBundle(i + 1).lsrc(1) := src2 + i.U 314*d91483a6Sfdy csBundle(i + 1).lsrc(2) := dest + i.U 315*d91483a6Sfdy csBundle(i + 1).ldest := dest + i.U 316*d91483a6Sfdy csBundle(i + 1).uopIdx := i.U 317*d91483a6Sfdy } 318*d91483a6Sfdy } 319*d91483a6Sfdy is(UopDivType.VEC_VVW) { 320*d91483a6Sfdy for (i <- 0 until MAX_VLMUL / 2) { 321*d91483a6Sfdy csBundle(2 * i).lsrc(0) := src1 + i.U 322*d91483a6Sfdy csBundle(2 * i).lsrc(1) := src2 + i.U 323*d91483a6Sfdy csBundle(2 * i).lsrc(2) := dest + (2 * i).U 324*d91483a6Sfdy csBundle(2 * i).ldest := dest + (2 * i).U 325*d91483a6Sfdy csBundle(2 * i).uopIdx := (2 * i).U 326*d91483a6Sfdy csBundle(2 * i + 1).lsrc(0) := src1 + i.U 327*d91483a6Sfdy csBundle(2 * i + 1).lsrc(1) := src2 + i.U 328*d91483a6Sfdy csBundle(2 * i + 1).lsrc(2) := dest + (2 * i + 1).U 329*d91483a6Sfdy csBundle(2 * i + 1).ldest := dest + (2 * i + 1).U 330*d91483a6Sfdy csBundle(2 * i + 1).uopIdx := (2 * i + 1).U 331*d91483a6Sfdy } 332*d91483a6Sfdy } 333*d91483a6Sfdy is(UopDivType.VEC_WVW) { 334*d91483a6Sfdy for (i <- 0 until MAX_VLMUL / 2) { 335*d91483a6Sfdy csBundle(2 * i).lsrc(0) := src1 + i.U 336*d91483a6Sfdy csBundle(2 * i).lsrc(1) := src2 + (2 * i).U 337*d91483a6Sfdy csBundle(2 * i).lsrc(2) := dest + (2 * i).U 338*d91483a6Sfdy csBundle(2 * i).ldest := dest + (2 * i).U 339*d91483a6Sfdy csBundle(2 * i).uopIdx := (2 * i).U 340*d91483a6Sfdy csBundle(2 * i + 1).lsrc(0) := src1 + i.U 341*d91483a6Sfdy csBundle(2 * i + 1).lsrc(1) := src2 + (2 * i + 1).U 342*d91483a6Sfdy csBundle(2 * i + 1).lsrc(2) := dest + (2 * i + 1).U 343*d91483a6Sfdy csBundle(2 * i + 1).ldest := dest + (2 * i + 1).U 344*d91483a6Sfdy csBundle(2 * i + 1).uopIdx := (2 * i + 1).U 345*d91483a6Sfdy } 346*d91483a6Sfdy } 347*d91483a6Sfdy is(UopDivType.VEC_VXW) { 348*d91483a6Sfdy /* 349*d91483a6Sfdy FMV.D.X 350*d91483a6Sfdy */ 351*d91483a6Sfdy csBundle(0).srcType(0) := SrcType.reg 352*d91483a6Sfdy csBundle(0).srcType(1) := SrcType.imm 353*d91483a6Sfdy csBundle(0).lsrc(1) := 0.U 354*d91483a6Sfdy csBundle(0).ldest := FP_TMP_REG_MV.U 355*d91483a6Sfdy csBundle(0).fuType := FuType.i2f.U 356*d91483a6Sfdy csBundle(0).rfWen := false.B 357*d91483a6Sfdy csBundle(0).fpWen := true.B 358*d91483a6Sfdy csBundle(0).vecWen := false.B 359*d91483a6Sfdy csBundle(0).fpu.isAddSub := false.B 360*d91483a6Sfdy csBundle(0).fpu.typeTagIn := FPU.D 361*d91483a6Sfdy csBundle(0).fpu.typeTagOut := FPU.D 362*d91483a6Sfdy csBundle(0).fpu.fromInt := true.B 363*d91483a6Sfdy csBundle(0).fpu.wflags := false.B 364*d91483a6Sfdy csBundle(0).fpu.fpWen := true.B 365*d91483a6Sfdy csBundle(0).fpu.div := false.B 366*d91483a6Sfdy csBundle(0).fpu.sqrt := false.B 367*d91483a6Sfdy csBundle(0).fpu.fcvt := false.B 368*d91483a6Sfdy 369*d91483a6Sfdy for (i <- 0 until MAX_VLMUL / 2) { 370*d91483a6Sfdy csBundle(2 * i + 1).srcType(0) := SrcType.fp 371*d91483a6Sfdy csBundle(2 * i + 1).lsrc(0) := FP_TMP_REG_MV.U 372*d91483a6Sfdy csBundle(2 * i + 1).lsrc(1) := src2 + i.U 373*d91483a6Sfdy csBundle(2 * i + 1).lsrc(2) := dest + (2 * i).U 374*d91483a6Sfdy csBundle(2 * i + 1).ldest := dest + (2 * i).U 375*d91483a6Sfdy csBundle(2 * i + 1).uopIdx := (2 * i).U 376*d91483a6Sfdy csBundle(2 * i + 2).srcType(0) := SrcType.fp 377*d91483a6Sfdy csBundle(2 * i + 2).lsrc(0) := FP_TMP_REG_MV.U 378*d91483a6Sfdy csBundle(2 * i + 2).lsrc(1) := src2 + i.U 379*d91483a6Sfdy csBundle(2 * i + 2).lsrc(2) := dest + (2 * i + 1).U 380*d91483a6Sfdy csBundle(2 * i + 2).ldest := dest + (2 * i + 1).U 381*d91483a6Sfdy csBundle(2 * i + 2).uopIdx := (2 * i + 1).U 382*d91483a6Sfdy } 383*d91483a6Sfdy } 384*d91483a6Sfdy is(UopDivType.VEC_WXW) { 385*d91483a6Sfdy /* 386*d91483a6Sfdy FMV.D.X 387*d91483a6Sfdy */ 388*d91483a6Sfdy csBundle(0).srcType(0) := SrcType.reg 389*d91483a6Sfdy csBundle(0).srcType(1) := SrcType.imm 390*d91483a6Sfdy csBundle(0).lsrc(1) := 0.U 391*d91483a6Sfdy csBundle(0).ldest := FP_TMP_REG_MV.U 392*d91483a6Sfdy csBundle(0).fuType := FuType.i2f.U 393*d91483a6Sfdy csBundle(0).rfWen := false.B 394*d91483a6Sfdy csBundle(0).fpWen := true.B 395*d91483a6Sfdy csBundle(0).vecWen := false.B 396*d91483a6Sfdy csBundle(0).fpu.isAddSub := false.B 397*d91483a6Sfdy csBundle(0).fpu.typeTagIn := FPU.D 398*d91483a6Sfdy csBundle(0).fpu.typeTagOut := FPU.D 399*d91483a6Sfdy csBundle(0).fpu.fromInt := true.B 400*d91483a6Sfdy csBundle(0).fpu.wflags := false.B 401*d91483a6Sfdy csBundle(0).fpu.fpWen := true.B 402*d91483a6Sfdy csBundle(0).fpu.div := false.B 403*d91483a6Sfdy csBundle(0).fpu.sqrt := false.B 404*d91483a6Sfdy csBundle(0).fpu.fcvt := false.B 405*d91483a6Sfdy 406*d91483a6Sfdy for (i <- 0 until MAX_VLMUL / 2) { 407*d91483a6Sfdy csBundle(2 * i + 1).srcType(0) := SrcType.fp 408*d91483a6Sfdy csBundle(2 * i + 1).lsrc(0) := FP_TMP_REG_MV.U 409*d91483a6Sfdy csBundle(2 * i + 1).lsrc(1) := src2 + (2 * i).U 410*d91483a6Sfdy csBundle(2 * i + 1).lsrc(2) := dest + (2 * i).U 411*d91483a6Sfdy csBundle(2 * i + 1).ldest := dest + (2 * i).U 412*d91483a6Sfdy csBundle(2 * i + 1).uopIdx := (2 * i).U 413*d91483a6Sfdy csBundle(2 * i + 2).srcType(0) := SrcType.fp 414*d91483a6Sfdy csBundle(2 * i + 2).lsrc(0) := FP_TMP_REG_MV.U 415*d91483a6Sfdy csBundle(2 * i + 2).lsrc(1) := src2 + (2 * i + 1).U 416*d91483a6Sfdy csBundle(2 * i + 2).lsrc(2) := dest + (2 * i + 1).U 417*d91483a6Sfdy csBundle(2 * i + 2).ldest := dest + (2 * i + 1).U 418*d91483a6Sfdy csBundle(2 * i + 2).uopIdx := (2 * i + 1).U 419*d91483a6Sfdy } 420*d91483a6Sfdy } 421*d91483a6Sfdy is(UopDivType.VEC_WVV) { 422*d91483a6Sfdy for (i <- 0 until MAX_VLMUL / 2) { 423*d91483a6Sfdy 424*d91483a6Sfdy csBundle(2 * i).lsrc(0) := src1 + i.U 425*d91483a6Sfdy csBundle(2 * i).lsrc(1) := src2 + (2 * i).U 426*d91483a6Sfdy csBundle(2 * i).lsrc(2) := dest + i.U 427*d91483a6Sfdy csBundle(2 * i).ldest := VECTOR_TMP_REG_LMUL.U 428*d91483a6Sfdy csBundle(2 * i).uopIdx := (2 * i).U 429*d91483a6Sfdy csBundle(2 * i + 1).lsrc(0) := src1 + i.U 430*d91483a6Sfdy csBundle(2 * i + 1).lsrc(1) := src2 + (2 * i + 1).U 431*d91483a6Sfdy csBundle(2 * i + 1).lsrc(2) := VECTOR_TMP_REG_LMUL.U 432*d91483a6Sfdy csBundle(2 * i + 1).ldest := dest + i.U 433*d91483a6Sfdy csBundle(2 * i + 1).uopIdx := (2 * i + 1).U 434*d91483a6Sfdy } 435*d91483a6Sfdy } 436*d91483a6Sfdy is(UopDivType.VEC_WXV) { 437*d91483a6Sfdy /* 438*d91483a6Sfdy FMV.D.X 439*d91483a6Sfdy */ 440*d91483a6Sfdy csBundle(0).srcType(0) := SrcType.reg 441*d91483a6Sfdy csBundle(0).srcType(1) := SrcType.imm 442*d91483a6Sfdy csBundle(0).lsrc(1) := 0.U 443*d91483a6Sfdy csBundle(0).ldest := FP_TMP_REG_MV.U 444*d91483a6Sfdy csBundle(0).fuType := FuType.i2f.U 445*d91483a6Sfdy csBundle(0).rfWen := false.B 446*d91483a6Sfdy csBundle(0).fpWen := true.B 447*d91483a6Sfdy csBundle(0).vecWen := false.B 448*d91483a6Sfdy csBundle(0).fpu.isAddSub := false.B 449*d91483a6Sfdy csBundle(0).fpu.typeTagIn := FPU.D 450*d91483a6Sfdy csBundle(0).fpu.typeTagOut := FPU.D 451*d91483a6Sfdy csBundle(0).fpu.fromInt := true.B 452*d91483a6Sfdy csBundle(0).fpu.wflags := false.B 453*d91483a6Sfdy csBundle(0).fpu.fpWen := true.B 454*d91483a6Sfdy csBundle(0).fpu.div := false.B 455*d91483a6Sfdy csBundle(0).fpu.sqrt := false.B 456*d91483a6Sfdy csBundle(0).fpu.fcvt := false.B 457*d91483a6Sfdy 458*d91483a6Sfdy for (i <- 0 until MAX_VLMUL / 2) { 459*d91483a6Sfdy csBundle(2 * i + 1).srcType(0) := SrcType.fp 460*d91483a6Sfdy csBundle(2 * i + 1).lsrc(0) := FP_TMP_REG_MV.U 461*d91483a6Sfdy csBundle(2 * i + 1).lsrc(1) := src2 + (2 * i).U 462*d91483a6Sfdy csBundle(2 * i + 1).lsrc(2) := dest + i.U 463*d91483a6Sfdy csBundle(2 * i + 1).ldest := VECTOR_TMP_REG_LMUL.U 464*d91483a6Sfdy csBundle(2 * i + 1).uopIdx := (2 * i).U 465*d91483a6Sfdy csBundle(2 * i + 2).srcType(0) := SrcType.fp 466*d91483a6Sfdy csBundle(2 * i + 2).lsrc(0) := FP_TMP_REG_MV.U 467*d91483a6Sfdy csBundle(2 * i + 2).lsrc(1) := src2 + (2 * i + 1).U 468*d91483a6Sfdy csBundle(2 * i + 2).lsrc(2) := VECTOR_TMP_REG_LMUL.U 469*d91483a6Sfdy csBundle(2 * i + 2).ldest := dest + i.U 470*d91483a6Sfdy csBundle(2 * i + 2).uopIdx := (2 * i + 1).U 471*d91483a6Sfdy } 472*d91483a6Sfdy } 473*d91483a6Sfdy is(UopDivType.VEC_VVM) { 474*d91483a6Sfdy csBundle(0).lsrc(2) := dest 475*d91483a6Sfdy csBundle(0).ldest := VECTOR_TMP_REG_LMUL.U 476*d91483a6Sfdy csBundle(0).uopIdx := 0.U 477*d91483a6Sfdy for(i <- 1 until MAX_VLMUL) { 478*d91483a6Sfdy csBundle(i).lsrc(0) := src1 + i.U 479*d91483a6Sfdy csBundle(i).lsrc(1) := src2 + i.U 480*d91483a6Sfdy csBundle(i).lsrc(2) := VECTOR_TMP_REG_LMUL.U 481*d91483a6Sfdy csBundle(i).ldest := VECTOR_TMP_REG_LMUL.U 482*d91483a6Sfdy csBundle(i).uopIdx := i.U 483*d91483a6Sfdy } 484*d91483a6Sfdy csBundle(numOfUop - 1.U).ldest := dest 485*d91483a6Sfdy } 486*d91483a6Sfdy is(UopDivType.VEC_VXM) { 487*d91483a6Sfdy /* 488*d91483a6Sfdy FMV.D.X 489*d91483a6Sfdy */ 490*d91483a6Sfdy csBundle(0).srcType(0) := SrcType.reg 491*d91483a6Sfdy csBundle(0).srcType(1) := SrcType.imm 492*d91483a6Sfdy csBundle(0).lsrc(1) := 0.U 493*d91483a6Sfdy csBundle(0).ldest := FP_TMP_REG_MV.U 494*d91483a6Sfdy csBundle(0).fuType := FuType.i2f.U 495*d91483a6Sfdy csBundle(0).rfWen := false.B 496*d91483a6Sfdy csBundle(0).fpWen := true.B 497*d91483a6Sfdy csBundle(0).vecWen := false.B 498*d91483a6Sfdy csBundle(0).fpu.isAddSub := false.B 499*d91483a6Sfdy csBundle(0).fpu.typeTagIn := FPU.D 500*d91483a6Sfdy csBundle(0).fpu.typeTagOut := FPU.D 501*d91483a6Sfdy csBundle(0).fpu.fromInt := true.B 502*d91483a6Sfdy csBundle(0).fpu.wflags := false.B 503*d91483a6Sfdy csBundle(0).fpu.fpWen := true.B 504*d91483a6Sfdy csBundle(0).fpu.div := false.B 505*d91483a6Sfdy csBundle(0).fpu.sqrt := false.B 506*d91483a6Sfdy csBundle(0).fpu.fcvt := false.B 507*d91483a6Sfdy //LMUL 508*d91483a6Sfdy csBundle(1).srcType(0) := SrcType.fp 509*d91483a6Sfdy csBundle(1).lsrc(0) := FP_TMP_REG_MV.U 510*d91483a6Sfdy csBundle(1).lsrc(2) := dest 511*d91483a6Sfdy csBundle(1).ldest := VECTOR_TMP_REG_LMUL.U 512*d91483a6Sfdy csBundle(1).uopIdx := 0.U 513*d91483a6Sfdy for (i <- 1 until MAX_VLMUL) { 514*d91483a6Sfdy csBundle(i + 1).srcType(0) := SrcType.fp 515*d91483a6Sfdy csBundle(i + 1).lsrc(0) := FP_TMP_REG_MV.U 516*d91483a6Sfdy csBundle(i + 1).lsrc(1) := src2 + i.U 517*d91483a6Sfdy csBundle(i + 1).lsrc(2) := VECTOR_TMP_REG_LMUL.U 518*d91483a6Sfdy csBundle(i + 1).ldest := VECTOR_TMP_REG_LMUL.U 519*d91483a6Sfdy csBundle(i + 1).uopIdx := i.U 520*d91483a6Sfdy } 521*d91483a6Sfdy csBundle(numOfUop - 1.U).ldest := dest 522*d91483a6Sfdy } 523*d91483a6Sfdy is(UopDivType.VEC_SLIDE1UP) { 524*d91483a6Sfdy /* 525*d91483a6Sfdy FMV.D.X 526*d91483a6Sfdy */ 527*d91483a6Sfdy csBundle(0).srcType(0) := SrcType.reg 528*d91483a6Sfdy csBundle(0).srcType(1) := SrcType.imm 529*d91483a6Sfdy csBundle(0).lsrc(1) := 0.U 530*d91483a6Sfdy csBundle(0).ldest := FP_TMP_REG_MV.U 531*d91483a6Sfdy csBundle(0).fuType := FuType.i2f.U 532*d91483a6Sfdy csBundle(0).rfWen := false.B 533*d91483a6Sfdy csBundle(0).fpWen := true.B 534*d91483a6Sfdy csBundle(0).vecWen := false.B 535*d91483a6Sfdy csBundle(0).fpu.isAddSub := false.B 536*d91483a6Sfdy csBundle(0).fpu.typeTagIn := FPU.D 537*d91483a6Sfdy csBundle(0).fpu.typeTagOut := FPU.D 538*d91483a6Sfdy csBundle(0).fpu.fromInt := true.B 539*d91483a6Sfdy csBundle(0).fpu.wflags := false.B 540*d91483a6Sfdy csBundle(0).fpu.fpWen := true.B 541*d91483a6Sfdy csBundle(0).fpu.div := false.B 542*d91483a6Sfdy csBundle(0).fpu.sqrt := false.B 543*d91483a6Sfdy csBundle(0).fpu.fcvt := false.B 544*d91483a6Sfdy //LMUL 545*d91483a6Sfdy csBundle(1).srcType(0) := SrcType.fp 546*d91483a6Sfdy csBundle(1).lsrc(0) := FP_TMP_REG_MV.U 547*d91483a6Sfdy csBundle(1).lsrc(2) := dest 548*d91483a6Sfdy csBundle(1).ldest := dest 549*d91483a6Sfdy csBundle(1).uopIdx := 0.U 550*d91483a6Sfdy for (i <- 1 until MAX_VLMUL) { 551*d91483a6Sfdy csBundle(i + 1).srcType(0) := SrcType.vp 552*d91483a6Sfdy csBundle(i + 1).lsrc(0) := src2 + (i - 1).U 553*d91483a6Sfdy csBundle(i + 1).lsrc(1) := src2 + i.U 554*d91483a6Sfdy csBundle(i + 1).lsrc(2) := dest + i.U 555*d91483a6Sfdy csBundle(i + 1).ldest := dest + i.U 556*d91483a6Sfdy csBundle(i + 1).uopIdx := i.U 557*d91483a6Sfdy } 558*d91483a6Sfdy } 559*d91483a6Sfdy is(UopDivType.VEC_FSLIDE1UP) { 560*d91483a6Sfdy //LMUL 561*d91483a6Sfdy csBundle(0).srcType(0) := SrcType.fp 562*d91483a6Sfdy csBundle(0).lsrc(0) := src1 563*d91483a6Sfdy csBundle(0).lsrc(1) := src2 564*d91483a6Sfdy csBundle(0).lsrc(2) := dest 565*d91483a6Sfdy csBundle(0).ldest := dest 566*d91483a6Sfdy csBundle(0).uopIdx := 0.U 567*d91483a6Sfdy for (i <- 1 until MAX_VLMUL) { 568*d91483a6Sfdy csBundle(i).srcType(0) := SrcType.vp 569*d91483a6Sfdy csBundle(i).lsrc(0) := src2 + (i - 1).U 570*d91483a6Sfdy csBundle(i).lsrc(1) := src2 + i.U 571*d91483a6Sfdy csBundle(i).lsrc(2) := dest + i.U 572*d91483a6Sfdy csBundle(i).ldest := dest + i.U 573*d91483a6Sfdy csBundle(i).uopIdx := i.U 574*d91483a6Sfdy } 575*d91483a6Sfdy } 576*d91483a6Sfdy is(UopDivType.VEC_SLIDE1DOWN) { // lmul+lmul = 16 577*d91483a6Sfdy /* 578*d91483a6Sfdy FMV.D.X 579*d91483a6Sfdy */ 580*d91483a6Sfdy csBundle(0).srcType(0) := SrcType.reg 581*d91483a6Sfdy csBundle(0).srcType(1) := SrcType.imm 582*d91483a6Sfdy csBundle(0).lsrc(1) := 0.U 583*d91483a6Sfdy csBundle(0).ldest := FP_TMP_REG_MV.U 584*d91483a6Sfdy csBundle(0).fuType := FuType.i2f.U 585*d91483a6Sfdy csBundle(0).rfWen := false.B 586*d91483a6Sfdy csBundle(0).fpWen := true.B 587*d91483a6Sfdy csBundle(0).vecWen := false.B 588*d91483a6Sfdy csBundle(0).fpu.isAddSub := false.B 589*d91483a6Sfdy csBundle(0).fpu.typeTagIn := FPU.D 590*d91483a6Sfdy csBundle(0).fpu.typeTagOut := FPU.D 591*d91483a6Sfdy csBundle(0).fpu.fromInt := true.B 592*d91483a6Sfdy csBundle(0).fpu.wflags := false.B 593*d91483a6Sfdy csBundle(0).fpu.fpWen := true.B 594*d91483a6Sfdy csBundle(0).fpu.div := false.B 595*d91483a6Sfdy csBundle(0).fpu.sqrt := false.B 596*d91483a6Sfdy csBundle(0).fpu.fcvt := false.B 597*d91483a6Sfdy //LMUL 598*d91483a6Sfdy for (i <- 0 until MAX_VLMUL) { 599*d91483a6Sfdy csBundle(2 * i + 1).srcType(0) := SrcType.vp 600*d91483a6Sfdy csBundle(2 * i + 1).srcType(1) := SrcType.vp 601*d91483a6Sfdy csBundle(2 * i + 1).lsrc(0) := src2 + (i+1).U 602*d91483a6Sfdy csBundle(2 * i + 1).lsrc(1) := src2 + i.U 603*d91483a6Sfdy csBundle(2 * i + 1).lsrc(2) := dest + i.U 604*d91483a6Sfdy csBundle(2 * i + 1).ldest := VECTOR_TMP_REG_LMUL.U 605*d91483a6Sfdy csBundle(2 * i + 1).uopIdx := (2 * i).U 606*d91483a6Sfdy if (2 * i + 2 < MAX_VLMUL * 2 ){ 607*d91483a6Sfdy csBundle(2 * i + 2).srcType(0) := SrcType.fp 608*d91483a6Sfdy csBundle(2 * i + 2).lsrc(0) := FP_TMP_REG_MV.U 609*d91483a6Sfdy // csBundle(2 * i + 2).lsrc(1) := src2 + i.U // DontCare 610*d91483a6Sfdy csBundle(2 * i + 2).lsrc(2) := VECTOR_TMP_REG_LMUL.U 611*d91483a6Sfdy csBundle(2 * i + 2).ldest := dest + i.U 612*d91483a6Sfdy csBundle(2 * i + 2).uopIdx := (2 * i + 1).U 613*d91483a6Sfdy } 614*d91483a6Sfdy } 615*d91483a6Sfdy csBundle(numOfUop - 1.U).srcType(0) := SrcType.fp 616*d91483a6Sfdy csBundle(numOfUop - 1.U).lsrc(0) := FP_TMP_REG_MV.U 617*d91483a6Sfdy csBundle(numOfUop - 1.U).ldest := dest + lmul - 1.U 618*d91483a6Sfdy } 619*d91483a6Sfdy is(UopDivType.VEC_FSLIDE1DOWN) { 620*d91483a6Sfdy //LMUL 621*d91483a6Sfdy for (i <- 0 until MAX_VLMUL) { 622*d91483a6Sfdy csBundle(2 * i).srcType(0) := SrcType.vp 623*d91483a6Sfdy csBundle(2 * i).srcType(1) := SrcType.vp 624*d91483a6Sfdy csBundle(2 * i).lsrc(0) := src2 + (i+1).U 625*d91483a6Sfdy csBundle(2 * i).lsrc(1) := src2 + i.U 626*d91483a6Sfdy csBundle(2 * i).lsrc(2) := dest + i.U 627*d91483a6Sfdy csBundle(2 * i).ldest := VECTOR_TMP_REG_LMUL.U 628*d91483a6Sfdy csBundle(2 * i).uopIdx := (2 * i).U 629*d91483a6Sfdy csBundle(2 * i + 1).srcType(0) := SrcType.fp 630*d91483a6Sfdy csBundle(2 * i + 1).lsrc(0) := src1 631*d91483a6Sfdy csBundle(2 * i + 1).lsrc(2) := VECTOR_TMP_REG_LMUL.U 632*d91483a6Sfdy csBundle(2 * i + 1).ldest := dest + i.U 633*d91483a6Sfdy csBundle(2 * i + 1).uopIdx := (2 * i + 1).U 634*d91483a6Sfdy } 635*d91483a6Sfdy csBundle(numOfUop - 1.U).srcType(0) := SrcType.fp 636*d91483a6Sfdy csBundle(numOfUop - 1.U).lsrc(0) := src1 637*d91483a6Sfdy csBundle(numOfUop - 1.U).ldest := dest + lmul - 1.U 638*d91483a6Sfdy } 639*d91483a6Sfdy is(UopDivType.VEC_VRED) { 640*d91483a6Sfdy when(simple.io.enq.vtype.vlmul === "b001".U){ 641*d91483a6Sfdy csBundle(0).srcType(2) := SrcType.DC 642*d91483a6Sfdy csBundle(0).lsrc(0) := src2 + 1.U 643*d91483a6Sfdy csBundle(0).lsrc(1) := src2 644*d91483a6Sfdy csBundle(0).ldest := VECTOR_TMP_REG_LMUL.U 645*d91483a6Sfdy csBundle(0).uopIdx := 0.U 646*d91483a6Sfdy } 647*d91483a6Sfdy when(simple.io.enq.vtype.vlmul === "b010".U) { 648*d91483a6Sfdy csBundle(0).srcType(2) := SrcType.DC 649*d91483a6Sfdy csBundle(0).lsrc(0) := src2 + 1.U 650*d91483a6Sfdy csBundle(0).lsrc(1) := src2 651*d91483a6Sfdy csBundle(0).ldest := VECTOR_TMP_REG_LMUL.U 652*d91483a6Sfdy csBundle(0).uopIdx := 0.U 653*d91483a6Sfdy 654*d91483a6Sfdy csBundle(1).srcType(2) := SrcType.DC 655*d91483a6Sfdy csBundle(1).lsrc(0) := src2 + 3.U 656*d91483a6Sfdy csBundle(1).lsrc(1) := src2 + 2.U 657*d91483a6Sfdy csBundle(1).ldest := (VECTOR_TMP_REG_LMUL+1).U 658*d91483a6Sfdy csBundle(1).uopIdx := 1.U 659*d91483a6Sfdy 660*d91483a6Sfdy csBundle(2).srcType(2) := SrcType.DC 661*d91483a6Sfdy csBundle(2).lsrc(0) := (VECTOR_TMP_REG_LMUL+1).U 662*d91483a6Sfdy csBundle(2).lsrc(1) := VECTOR_TMP_REG_LMUL.U 663*d91483a6Sfdy csBundle(2).ldest := (VECTOR_TMP_REG_LMUL+2).U 664*d91483a6Sfdy csBundle(2).uopIdx := 2.U 665*d91483a6Sfdy } 666*d91483a6Sfdy when(simple.io.enq.vtype.vlmul === "b011".U) { 667*d91483a6Sfdy for(i <- 0 until MAX_VLMUL){ 668*d91483a6Sfdy if(i < MAX_VLMUL - MAX_VLMUL/2){ 669*d91483a6Sfdy csBundle(i).lsrc(0) := src2 + (i * 2 + 1).U 670*d91483a6Sfdy csBundle(i).lsrc(1) := src2 + (i * 2).U 671*d91483a6Sfdy csBundle(i).ldest := (VECTOR_TMP_REG_LMUL + i).U 672*d91483a6Sfdy } else if (i < MAX_VLMUL - MAX_VLMUL/4) { 673*d91483a6Sfdy csBundle(i).lsrc(0) := (VECTOR_TMP_REG_LMUL + (i - MAX_VLMUL/2)*2 + 1).U 674*d91483a6Sfdy csBundle(i).lsrc(1) := (VECTOR_TMP_REG_LMUL + (i - MAX_VLMUL/2)*2).U 675*d91483a6Sfdy csBundle(i).ldest := (VECTOR_TMP_REG_LMUL + i).U 676*d91483a6Sfdy }else if (i < MAX_VLMUL - MAX_VLMUL/8) { 677*d91483a6Sfdy csBundle(6).lsrc(0) := (VECTOR_TMP_REG_LMUL + 5).U 678*d91483a6Sfdy csBundle(6).lsrc(1) := (VECTOR_TMP_REG_LMUL + 4).U 679*d91483a6Sfdy csBundle(6).ldest := (VECTOR_TMP_REG_LMUL + 6).U 680*d91483a6Sfdy } 681*d91483a6Sfdy csBundle(i).srcType(2) := SrcType.DC 682*d91483a6Sfdy csBundle(i).uopIdx := i.U 683*d91483a6Sfdy } 684*d91483a6Sfdy } 685*d91483a6Sfdy when (simple.io.enq.vtype.vlmul.orR()){ 686*d91483a6Sfdy csBundle(numOfUop - 1.U).srcType(2) := SrcType.vp 687*d91483a6Sfdy csBundle(numOfUop - 1.U).lsrc(0) := src1 688*d91483a6Sfdy csBundle(numOfUop - 1.U).lsrc(1) := VECTOR_TMP_REG_LMUL.U + numOfUop - 2.U 689*d91483a6Sfdy csBundle(numOfUop - 1.U).lsrc(2) := dest 690*d91483a6Sfdy csBundle(numOfUop - 1.U).ldest := dest 691*d91483a6Sfdy csBundle(numOfUop - 1.U).uopIdx := numOfUop - 1.U 692*d91483a6Sfdy } 693*d91483a6Sfdy } 694*d91483a6Sfdy 695*d91483a6Sfdy is(UopDivType.VEC_SLIDEUP) { 696*d91483a6Sfdy // FMV.D.X 697*d91483a6Sfdy csBundle(0).srcType(0) := SrcType.reg 698*d91483a6Sfdy csBundle(0).srcType(1) := SrcType.imm 699*d91483a6Sfdy csBundle(0).lsrc(1) := 0.U 700*d91483a6Sfdy csBundle(0).ldest := FP_TMP_REG_MV.U 701*d91483a6Sfdy csBundle(0).fuType := FuType.i2f.U 702*d91483a6Sfdy csBundle(0).rfWen := false.B 703*d91483a6Sfdy csBundle(0).fpWen := true.B 704*d91483a6Sfdy csBundle(0).vecWen := false.B 705*d91483a6Sfdy csBundle(0).fpu.isAddSub := false.B 706*d91483a6Sfdy csBundle(0).fpu.typeTagIn := FPU.D 707*d91483a6Sfdy csBundle(0).fpu.typeTagOut := FPU.D 708*d91483a6Sfdy csBundle(0).fpu.fromInt := true.B 709*d91483a6Sfdy csBundle(0).fpu.wflags := false.B 710*d91483a6Sfdy csBundle(0).fpu.fpWen := true.B 711*d91483a6Sfdy csBundle(0).fpu.div := false.B 712*d91483a6Sfdy csBundle(0).fpu.sqrt := false.B 713*d91483a6Sfdy csBundle(0).fpu.fcvt := false.B 714*d91483a6Sfdy // LMUL 715*d91483a6Sfdy for(i <- 0 until MAX_VLMUL) 716*d91483a6Sfdy for(j <- 0 to i){ 717*d91483a6Sfdy val old_vd = if (j==0) {dest + i.U} else (VECTOR_TMP_REG_LMUL+j-1).U 718*d91483a6Sfdy val vd = if (j==i) {dest + i.U} else (VECTOR_TMP_REG_LMUL+j).U 719*d91483a6Sfdy csBundle(i*(i+1)/2+j+1).srcType(0) := SrcType.fp 720*d91483a6Sfdy csBundle(i*(i+1)/2+j+1).lsrc(0) := FP_TMP_REG_MV.U 721*d91483a6Sfdy csBundle(i*(i+1)/2+j+1).lsrc(1) := src2 + j.U 722*d91483a6Sfdy csBundle(i*(i+1)/2+j+1).lsrc(2) := old_vd 723*d91483a6Sfdy csBundle(i*(i+1)/2+j+1).ldest := vd 724*d91483a6Sfdy csBundle(i*(i+1)/2+j+1).uopIdx := (i*(i+1)/2+j).U 725*d91483a6Sfdy } 726*d91483a6Sfdy } 727*d91483a6Sfdy 728*d91483a6Sfdy is(UopDivType.VEC_ISLIDEUP) { 729*d91483a6Sfdy // LMUL 730*d91483a6Sfdy for(i <- 0 until MAX_VLMUL) 731*d91483a6Sfdy for(j <- 0 to i){ 732*d91483a6Sfdy val old_vd = if (j==0) {dest + i.U} else (VECTOR_TMP_REG_LMUL+j-1).U 733*d91483a6Sfdy val vd = if (j==i) {dest + i.U} else (VECTOR_TMP_REG_LMUL+j).U 734*d91483a6Sfdy csBundle(i*(i+1)/2+j).lsrc(1) := src2 + j.U 735*d91483a6Sfdy csBundle(i*(i+1)/2+j).lsrc(2) := old_vd 736*d91483a6Sfdy csBundle(i*(i+1)/2+j).ldest := vd 737*d91483a6Sfdy csBundle(i*(i+1)/2+j).uopIdx := (i*(i+1)/2+j).U 738*d91483a6Sfdy } 739*d91483a6Sfdy } 740*d91483a6Sfdy 741*d91483a6Sfdy is(UopDivType.VEC_SLIDEDOWN) { 742*d91483a6Sfdy // FMV.D.X 743*d91483a6Sfdy csBundle(0).srcType(0) := SrcType.reg 744*d91483a6Sfdy csBundle(0).srcType(1) := SrcType.imm 745*d91483a6Sfdy csBundle(0).lsrc(1) := 0.U 746*d91483a6Sfdy csBundle(0).ldest := FP_TMP_REG_MV.U 747*d91483a6Sfdy csBundle(0).fuType := FuType.i2f.U 748*d91483a6Sfdy csBundle(0).rfWen := false.B 749*d91483a6Sfdy csBundle(0).fpWen := true.B 750*d91483a6Sfdy csBundle(0).vecWen := false.B 751*d91483a6Sfdy csBundle(0).fpu.isAddSub := false.B 752*d91483a6Sfdy csBundle(0).fpu.typeTagIn := FPU.D 753*d91483a6Sfdy csBundle(0).fpu.typeTagOut := FPU.D 754*d91483a6Sfdy csBundle(0).fpu.fromInt := true.B 755*d91483a6Sfdy csBundle(0).fpu.wflags := false.B 756*d91483a6Sfdy csBundle(0).fpu.fpWen := true.B 757*d91483a6Sfdy csBundle(0).fpu.div := false.B 758*d91483a6Sfdy csBundle(0).fpu.sqrt := false.B 759*d91483a6Sfdy csBundle(0).fpu.fcvt := false.B 760*d91483a6Sfdy // LMUL 761*d91483a6Sfdy for(i <- 0 until MAX_VLMUL) 762*d91483a6Sfdy for(j <- (0 to i).reverse){ 763*d91483a6Sfdy when(i.U < lmul){ 764*d91483a6Sfdy val old_vd = if (j==0) {dest + lmul -1.U - i.U} else (VECTOR_TMP_REG_LMUL+j-1).U 765*d91483a6Sfdy val vd = if (j==i) {dest + lmul - 1.U - i.U} else (VECTOR_TMP_REG_LMUL+j).U 766*d91483a6Sfdy csBundle(numOfUop-(i*(i+1)/2+i-j+1).U).srcType(0) := SrcType.fp 767*d91483a6Sfdy csBundle(numOfUop-(i*(i+1)/2+i-j+1).U).lsrc(0) := FP_TMP_REG_MV.U 768*d91483a6Sfdy csBundle(numOfUop-(i*(i+1)/2+i-j+1).U).lsrc(1) := src2 + lmul - 1.U - j.U 769*d91483a6Sfdy csBundle(numOfUop-(i*(i+1)/2+i-j+1).U).lsrc(2) := old_vd 770*d91483a6Sfdy csBundle(numOfUop-(i*(i+1)/2+i-j+1).U).ldest := vd 771*d91483a6Sfdy csBundle(numOfUop-(i*(i+1)/2+i-j+1).U).uopIdx := numOfUop-(i*(i+1)/2+i-j+2).U 772*d91483a6Sfdy } 773*d91483a6Sfdy } 774*d91483a6Sfdy } 775*d91483a6Sfdy 776*d91483a6Sfdy is(UopDivType.VEC_ISLIDEDOWN) { 777*d91483a6Sfdy // LMUL 778*d91483a6Sfdy for(i <- 0 until MAX_VLMUL) 779*d91483a6Sfdy for(j <- (0 to i).reverse){ 780*d91483a6Sfdy when(i.U < lmul){ 781*d91483a6Sfdy val old_vd = if (j==0) {dest + lmul -1.U - i.U} else (VECTOR_TMP_REG_LMUL+j-1).U 782*d91483a6Sfdy val vd = if (j==i) {dest + lmul - 1.U - i.U} else (VECTOR_TMP_REG_LMUL+j).U 783*d91483a6Sfdy csBundle(numOfUop-(i*(i+1)/2+i-j+1).U).lsrc(1) := src2 + lmul - 1.U - j.U 784*d91483a6Sfdy csBundle(numOfUop-(i*(i+1)/2+i-j+1).U).lsrc(2) := old_vd 785*d91483a6Sfdy csBundle(numOfUop-(i*(i+1)/2+i-j+1).U).ldest := vd 786*d91483a6Sfdy csBundle(numOfUop-(i*(i+1)/2+i-j+1).U).uopIdx := numOfUop-(i*(i+1)/2+i-j+1).U 787*d91483a6Sfdy } 788*d91483a6Sfdy } 789*d91483a6Sfdy } 790*d91483a6Sfdy 791*d91483a6Sfdy is(UopDivType.VEC_M0X) { 792*d91483a6Sfdy // LMUL 793*d91483a6Sfdy for (i <- 0 until MAX_VLMUL) { 794*d91483a6Sfdy val srcType0 = if (i==0) SrcType.DC else SrcType.vp 795*d91483a6Sfdy val ldest = (VECTOR_TMP_REG_LMUL + i).U 796*d91483a6Sfdy csBundle(i).srcType(0) := srcType0 797*d91483a6Sfdy csBundle(i).srcType(1) := SrcType.vp 798*d91483a6Sfdy csBundle(i).rfWen := false.B 799*d91483a6Sfdy csBundle(i).vecWen := true.B 800*d91483a6Sfdy csBundle(i).lsrc(0) := (VECTOR_TMP_REG_LMUL + i - 1).U 801*d91483a6Sfdy csBundle(i).lsrc(1) := src2 802*d91483a6Sfdy // csBundle(i).lsrc(2) := dest + i.U DontCare 803*d91483a6Sfdy csBundle(i).ldest := ldest 804*d91483a6Sfdy csBundle(i).uopIdx := i.U 805*d91483a6Sfdy } 806*d91483a6Sfdy csBundle(lmul-1.U).vecWen := false.B 807*d91483a6Sfdy csBundle(lmul-1.U).fpWen := true.B 808*d91483a6Sfdy csBundle(lmul-1.U).ldest := FP_TMP_REG_MV.U 809*d91483a6Sfdy // FMV_X_D 810*d91483a6Sfdy csBundle(lmul).srcType(0) := SrcType.fp 811*d91483a6Sfdy csBundle(lmul).srcType(1) := SrcType.imm 812*d91483a6Sfdy csBundle(lmul).lsrc(0) := FP_TMP_REG_MV.U 813*d91483a6Sfdy csBundle(lmul).lsrc(1) := 0.U 814*d91483a6Sfdy csBundle(lmul).ldest := dest 815*d91483a6Sfdy csBundle(lmul).fuType := FuType.fmisc.U 816*d91483a6Sfdy csBundle(lmul).rfWen := true.B 817*d91483a6Sfdy csBundle(lmul).fpWen := false.B 818*d91483a6Sfdy csBundle(lmul).vecWen := false.B 819*d91483a6Sfdy csBundle(lmul).fpu.isAddSub := false.B 820*d91483a6Sfdy csBundle(lmul).fpu.typeTagIn := FPU.D 821*d91483a6Sfdy csBundle(lmul).fpu.typeTagOut := FPU.D 822*d91483a6Sfdy csBundle(lmul).fpu.fromInt := false.B 823*d91483a6Sfdy csBundle(lmul).fpu.wflags := false.B 824*d91483a6Sfdy csBundle(lmul).fpu.fpWen := false.B 825*d91483a6Sfdy csBundle(lmul).fpu.div := false.B 826*d91483a6Sfdy csBundle(lmul).fpu.sqrt := false.B 827*d91483a6Sfdy csBundle(lmul).fpu.fcvt := false.B 828*d91483a6Sfdy } 829*d91483a6Sfdy 830*d91483a6Sfdy is(UopDivType.VEC_MVV) { 831*d91483a6Sfdy // LMUL 832*d91483a6Sfdy for (i <- 0 until MAX_VLMUL) { 833*d91483a6Sfdy val srcType0 = if (i==0) SrcType.DC else SrcType.vp 834*d91483a6Sfdy csBundle(i*2+0).srcType(0) := srcType0 835*d91483a6Sfdy csBundle(i*2+0).srcType(1) := SrcType.vp 836*d91483a6Sfdy csBundle(i*2+0).lsrc(0) := (VECTOR_TMP_REG_LMUL + i - 1).U 837*d91483a6Sfdy csBundle(i*2+0).lsrc(1) := src2 838*d91483a6Sfdy csBundle(i*2+0).lsrc(2) := dest + i.U 839*d91483a6Sfdy csBundle(i*2+0).ldest := dest + i.U 840*d91483a6Sfdy csBundle(i*2+0).uopIdx := (i*2+0).U 841*d91483a6Sfdy 842*d91483a6Sfdy csBundle(i*2+1).srcType(0) := srcType0 843*d91483a6Sfdy csBundle(i*2+1).srcType(1) := SrcType.vp 844*d91483a6Sfdy csBundle(i*2+1).lsrc(0) := (VECTOR_TMP_REG_LMUL + i - 1).U 845*d91483a6Sfdy csBundle(i*2+1).lsrc(1) := src2 846*d91483a6Sfdy // csBundle(i).lsrc(2) := dest + i.U DontCare 847*d91483a6Sfdy csBundle(i*2+1).ldest := (VECTOR_TMP_REG_LMUL + i).U 848*d91483a6Sfdy csBundle(i*2+1).uopIdx := (i*2+1).U 849*d91483a6Sfdy } 850*d91483a6Sfdy } 851*d91483a6Sfdy 852*d91483a6Sfdy is(UopDivType.VEC_M0X_VFIRST) { 853*d91483a6Sfdy // LMUL 854*d91483a6Sfdy csBundle(0).rfWen := false.B 855*d91483a6Sfdy csBundle(0).fpWen := true.B 856*d91483a6Sfdy csBundle(0).ldest := FP_TMP_REG_MV.U 857*d91483a6Sfdy // FMV_X_D 858*d91483a6Sfdy csBundle(1).srcType(0) := SrcType.fp 859*d91483a6Sfdy csBundle(1).srcType(1) := SrcType.imm 860*d91483a6Sfdy csBundle(1).lsrc(0) := FP_TMP_REG_MV.U 861*d91483a6Sfdy csBundle(1).lsrc(1) := 0.U 862*d91483a6Sfdy csBundle(1).ldest := dest 863*d91483a6Sfdy csBundle(1).fuType := FuType.fmisc.U 864*d91483a6Sfdy csBundle(1).rfWen := true.B 865*d91483a6Sfdy csBundle(1).fpWen := false.B 866*d91483a6Sfdy csBundle(1).vecWen := false.B 867*d91483a6Sfdy csBundle(1).fpu.isAddSub := false.B 868*d91483a6Sfdy csBundle(1).fpu.typeTagIn := FPU.D 869*d91483a6Sfdy csBundle(1).fpu.typeTagOut := FPU.D 870*d91483a6Sfdy csBundle(1).fpu.fromInt := false.B 871*d91483a6Sfdy csBundle(1).fpu.wflags := false.B 872*d91483a6Sfdy csBundle(1).fpu.fpWen := false.B 873*d91483a6Sfdy csBundle(1).fpu.div := false.B 874*d91483a6Sfdy csBundle(1).fpu.sqrt := false.B 875*d91483a6Sfdy csBundle(1).fpu.fcvt := false.B 876*d91483a6Sfdy } 877*d91483a6Sfdy } 878*d91483a6Sfdy 879*d91483a6Sfdy //uops dispatch 880*d91483a6Sfdy val normal :: ext :: Nil = Enum(2) 881*d91483a6Sfdy val stateReg = RegInit(normal) 882*d91483a6Sfdy val uopRes = RegInit(0.U) 883*d91483a6Sfdy 884*d91483a6Sfdy //readyFromRename Counter 885*d91483a6Sfdy val readyCounter = PriorityMuxDefault(io.readyFromRename.map(x => !x).zip((0 to (RenameWidth - 1)).map(_.U)), RenameWidth.U) 886*d91483a6Sfdy 887*d91483a6Sfdy switch(stateReg) { 888*d91483a6Sfdy is(normal) { 889*d91483a6Sfdy stateReg := Mux(io.validFromIBuf(0) && (numOfUop > readyCounter) && (readyCounter =/= 0.U), ext, normal) 890*d91483a6Sfdy } 891*d91483a6Sfdy is(ext) { 892*d91483a6Sfdy stateReg := Mux(io.validFromIBuf(0) && (uopRes > readyCounter), ext, normal) 893*d91483a6Sfdy } 894*d91483a6Sfdy } 895*d91483a6Sfdy 896*d91483a6Sfdy val uopRes0 = Mux(stateReg === normal, numOfUop, uopRes) 897*d91483a6Sfdy val uopResJudge = Mux(stateReg === normal, 898*d91483a6Sfdy io.validFromIBuf(0) && (readyCounter =/= 0.U) && (uopRes0 > readyCounter), 899*d91483a6Sfdy io.validFromIBuf(0) && (uopRes0 > readyCounter)) 900*d91483a6Sfdy uopRes := Mux(uopResJudge, uopRes0 - readyCounter, 0.U) 901*d91483a6Sfdy 902*d91483a6Sfdy for(i <- 0 until RenameWidth) { 903*d91483a6Sfdy decodedInsts(i) := MuxCase(csBundle(i), Seq( 904*d91483a6Sfdy (stateReg === normal) -> csBundle(i), 905*d91483a6Sfdy (stateReg === ext) -> Mux((i.U + numOfUop -uopRes) < maxUopSize.U, csBundle(i.U + numOfUop - uopRes), csBundle(maxUopSize - 1)) 906*d91483a6Sfdy )) 907*d91483a6Sfdy } 908*d91483a6Sfdy 909*d91483a6Sfdy 910*d91483a6Sfdy val validSimple = Wire(Vec(DecodeWidth - 1, Bool())) 911*d91483a6Sfdy validSimple.zip(io.validFromIBuf.drop(1).zip(io.isComplex)).map{ case (dst, (src1, src2)) => dst := src1 && !src2 } 912*d91483a6Sfdy val notInf = Wire(Vec(DecodeWidth - 1, Bool())) 913*d91483a6Sfdy notInf.zip(io.validFromIBuf.drop(1).zip(validSimple)).map{ case (dst, (src1, src2)) => dst := !src1 || src2 } 914*d91483a6Sfdy val notInfVec = Wire(Vec(DecodeWidth, Bool())) 915*d91483a6Sfdy notInfVec.drop(1).zip(0 until DecodeWidth - 1).map{ case (dst, i) => dst := Cat(notInf.take(i + 1)).andR} 916*d91483a6Sfdy notInfVec(0) := true.B 917*d91483a6Sfdy 918*d91483a6Sfdy complexNum := Mux(io.validFromIBuf(0) && readyCounter.orR , 919*d91483a6Sfdy Mux(uopRes0 > readyCounter, readyCounter, uopRes0), 920*d91483a6Sfdy 1.U) 921*d91483a6Sfdy validToRename.zipWithIndex.foreach{ 922*d91483a6Sfdy case(dst, i) => 923*d91483a6Sfdy dst := MuxCase(false.B, Seq( 924*d91483a6Sfdy (io.validFromIBuf(0) && uopRes0 > readyCounter ) -> Mux(readyCounter > i.U, true.B, false.B), 925*d91483a6Sfdy (io.validFromIBuf(0) && !(uopRes0 > readyCounter)) -> Mux(complexNum > i.U, true.B, validSimple(i.U - complexNum) && notInfVec(i.U - complexNum) && io.readyFromRename(i)), 926*d91483a6Sfdy )) 927*d91483a6Sfdy } 928*d91483a6Sfdy 929*d91483a6Sfdy readyToIBuf.zipWithIndex.foreach { 930*d91483a6Sfdy case (dst, i) => 931*d91483a6Sfdy dst := MuxCase(true.B, Seq( 932*d91483a6Sfdy (io.validFromIBuf(0) && uopRes0 > readyCounter) -> false.B, 933*d91483a6Sfdy (io.validFromIBuf(0) && !(uopRes0 > readyCounter)) -> (if (i==0) true.B else Mux(RenameWidth.U - complexNum >= i.U, notInfVec(i - 1) && validSimple(i - 1) && io.readyFromRename(i), false.B)), 934*d91483a6Sfdy )) 935*d91483a6Sfdy } 936*d91483a6Sfdy 937*d91483a6Sfdy io.deq.decodedInsts := decodedInsts 938*d91483a6Sfdy io.deq.isVset := isVset_u 939*d91483a6Sfdy io.deq.complexNum := complexNum 940*d91483a6Sfdy io.deq.validToRename := validToRename 941*d91483a6Sfdy io.deq.readyToIBuf := readyToIBuf 942*d91483a6Sfdy 943*d91483a6Sfdy} 944*d91483a6Sfdy 945