1d91483a6Sfdy/*************************************************************************************** 2d91483a6Sfdy * Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences 3d91483a6Sfdy * Copyright (c) 2020-2021 Peng Cheng Laboratory 4d91483a6Sfdy * 5d91483a6Sfdy * XiangShan is licensed under Mulan PSL v2. 6d91483a6Sfdy * You can use this software according to the terms and conditions of the Mulan PSL v2. 7d91483a6Sfdy * You may obtain a copy of Mulan PSL v2 at: 8d91483a6Sfdy * http://license.coscl.org.cn/MulanPSL2 9d91483a6Sfdy * 10d91483a6Sfdy * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, 11d91483a6Sfdy * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, 12d91483a6Sfdy * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. 13d91483a6Sfdy * 14d91483a6Sfdy * See the Mulan PSL v2 for more details. 15d91483a6Sfdy ***************************************************************************************/ 16d91483a6Sfdy 17d91483a6Sfdypackage xiangshan.backend.decode 18d91483a6Sfdy 19d91483a6Sfdyimport chipsalliance.rocketchip.config.Parameters 20d91483a6Sfdyimport chisel3._ 21d91483a6Sfdyimport chisel3.util._ 22d91483a6Sfdyimport freechips.rocketchip.rocket.Instructions 23d91483a6Sfdyimport freechips.rocketchip.util.uintToBitPat 24d91483a6Sfdyimport utils._ 25d91483a6Sfdyimport utility._ 26d91483a6Sfdyimport xiangshan.ExceptionNO.illegalInstr 27d91483a6Sfdyimport xiangshan._ 28d91483a6Sfdyimport xiangshan.backend.fu.fpu.FPU 29d91483a6Sfdyimport xiangshan.backend.fu.FuType 30d91483a6Sfdyimport freechips.rocketchip.rocket.Instructions._ 31d91483a6Sfdyimport xiangshan.backend.Bundles.{DecodedInst, StaticInst} 3298cfe81bSxgkiriimport xiangshan.backend.decode.isa.bitfield.XSInstBitFields 33*582849ffSxiaofeibao-xjtuimport xiangshan.backend.fu.vector.Bundles.{VSew, VType, VLmul} 34d91483a6Sfdyimport yunsuan.VpermType 35d91483a6Sfdy 36d91483a6Sfdyimport scala.collection.Seq 37d91483a6Sfdy 38d91483a6Sfdytrait VectorConstants { 39d91483a6Sfdy val MAX_VLMUL = 8 40d91483a6Sfdy val FP_TMP_REG_MV = 32 41189ec863SzhanglyGit val VECTOR_TMP_REG_LMUL = 33 // 33~47 -> 15 42d91483a6Sfdy} 43d91483a6Sfdy 44d91483a6Sfdyclass DecodeUnitCompIO(implicit p: Parameters) extends XSBundle { 45d91483a6Sfdy val enq = new Bundle { val staticInst = Input(new StaticInst) } 46d91483a6Sfdy val vtype = Input(new VType) 47d91483a6Sfdy val isComplex = Input(Vec(DecodeWidth - 1, Bool())) 48d91483a6Sfdy val validFromIBuf = Input(Vec(DecodeWidth, Bool())) 49d91483a6Sfdy val readyFromRename = Input(Vec(RenameWidth, Bool())) 50d91483a6Sfdy val deq = new Bundle { 51d91483a6Sfdy val decodedInsts = Output(Vec(RenameWidth, new DecodedInst)) 52d91483a6Sfdy val isVset = Output(Bool()) 53d91483a6Sfdy val readyToIBuf = Output(Vec(DecodeWidth, Bool())) 54d91483a6Sfdy val validToRename = Output(Vec(RenameWidth, Bool())) 55d91483a6Sfdy val complexNum = Output(UInt(3.W)) 56d91483a6Sfdy } 57d91483a6Sfdy val csrCtrl = Input(new CustomCSRCtrlIO) 58d91483a6Sfdy} 5917ec87f2SXuan Hu 60d91483a6Sfdy/** 61d91483a6Sfdy * @author zly 62d91483a6Sfdy */ 63d91483a6Sfdyclass DecodeUnitComp()(implicit p : Parameters) extends XSModule with DecodeUnitConstants with VectorConstants { 64d91483a6Sfdy val io = IO(new DecodeUnitCompIO) 65d91483a6Sfdy 66d91483a6Sfdy val maxUopSize = MaxUopSize 67d91483a6Sfdy //input bits 68d91483a6Sfdy val staticInst = Wire(new StaticInst) 6987dd4e0dSzhanglyGit 70d91483a6Sfdy 71d91483a6Sfdy staticInst := io.enq.staticInst 7287dd4e0dSzhanglyGit private val inst: XSInstBitFields = staticInst.instr.asTypeOf(new XSInstBitFields) 73d91483a6Sfdy 7498cfe81bSxgkiri val src1 = Cat(0.U(1.W), inst.RS1) 7598cfe81bSxgkiri val src2 = Cat(0.U(1.W), inst.RS2) 7698cfe81bSxgkiri val dest = Cat(0.U(1.W), inst.RD) 777f9f0a79SzhanglyGit 78d91483a6Sfdy 79d91483a6Sfdy //output bits 80d91483a6Sfdy val decodedInsts = Wire(Vec(RenameWidth, new DecodedInst)) 81d91483a6Sfdy val validToRename = Wire(Vec(RenameWidth, Bool())) 82d91483a6Sfdy val readyToIBuf = Wire(Vec(DecodeWidth, Bool())) 83d91483a6Sfdy val complexNum = Wire(UInt(3.W)) 84d91483a6Sfdy 85d91483a6Sfdy //output of DecodeUnit 86189ec863SzhanglyGit val decodedInstsSimple = Wire(new DecodedInst) 877f9f0a79SzhanglyGit val numOfUop = Wire(UInt(log2Up(maxUopSize+1).W)) 887f9f0a79SzhanglyGit val lmul = Wire(UInt(4.W)) 89189ec863SzhanglyGit val isVsetSimple = Wire(Bool()) 90d91483a6Sfdy 91d91483a6Sfdy //pre decode 92d91483a6Sfdy val simple = Module(new DecodeUnit) 93d91483a6Sfdy simple.io.enq.ctrlFlow := staticInst 94d91483a6Sfdy simple.io.enq.vtype := io.vtype 95d91483a6Sfdy simple.io.csrCtrl := io.csrCtrl 96189ec863SzhanglyGit decodedInstsSimple := simple.io.deq.decodedInst 977f9f0a79SzhanglyGit lmul := simple.io.deq.uopInfo.lmul 98189ec863SzhanglyGit isVsetSimple := simple.io.deq.decodedInst.isVset 99189ec863SzhanglyGit when(isVsetSimple) { 100d91483a6Sfdy when(dest === 0.U && src1 === 0.U) { 101189ec863SzhanglyGit decodedInstsSimple.fuOpType := VSETOpType.keepVl(simple.io.deq.decodedInst.fuOpType) 102d91483a6Sfdy }.elsewhen(src1 === 0.U) { 103189ec863SzhanglyGit decodedInstsSimple.fuOpType := VSETOpType.setVlmax(simple.io.deq.decodedInst.fuOpType) 104a8db15d8Sfdy } 105a8db15d8Sfdy when(io.vtype.illegal){ 106189ec863SzhanglyGit decodedInstsSimple.flushPipe := true.B 107d91483a6Sfdy } 108d91483a6Sfdy } 109d91483a6Sfdy //Type of uop Div 110189ec863SzhanglyGit val typeOfSplit = decodedInstsSimple.uopSplitType 111d91483a6Sfdy 1127f9f0a79SzhanglyGit when(typeOfSplit === UopSplitType.DIR) { 1137f9f0a79SzhanglyGit numOfUop := Mux(dest =/= 0.U, 2.U, 114d91483a6Sfdy Mux(src1 =/= 0.U, 1.U, 1157f9f0a79SzhanglyGit Mux(VSETOpType.isVsetvl(decodedInstsSimple.fuOpType), 2.U, 1.U))) 1167f9f0a79SzhanglyGit } .otherwise { 1177f9f0a79SzhanglyGit numOfUop := simple.io.deq.uopInfo.numOfUop 1187f9f0a79SzhanglyGit } 1197f9f0a79SzhanglyGit 120d91483a6Sfdy 121d91483a6Sfdy //uop div up to maxUopSize 122d91483a6Sfdy val csBundle = Wire(Vec(maxUopSize, new DecodedInst)) 123d91483a6Sfdy csBundle.map { case dst => 124189ec863SzhanglyGit dst := decodedInstsSimple 125d91483a6Sfdy dst.firstUop := false.B 126d91483a6Sfdy dst.lastUop := false.B 127d91483a6Sfdy } 128d91483a6Sfdy 129f1e8fcb2SXuan Hu csBundle(0).numUops := numOfUop 130d91483a6Sfdy csBundle(0).firstUop := true.B 131d91483a6Sfdy csBundle(numOfUop - 1.U).lastUop := true.B 132d91483a6Sfdy 133189ec863SzhanglyGit switch(typeOfSplit) { 13417ec87f2SXuan Hu is(UopSplitType.DIR) { 135189ec863SzhanglyGit when(isVsetSimple) { 136d91483a6Sfdy when(dest =/= 0.U) { 137d91483a6Sfdy csBundle(0).fuType := FuType.vsetiwi.U 138189ec863SzhanglyGit csBundle(0).fuOpType := VSETOpType.switchDest(decodedInstsSimple.fuOpType) 139d91483a6Sfdy csBundle(0).flushPipe := false.B 140d91483a6Sfdy csBundle(0).rfWen := true.B 141d91483a6Sfdy csBundle(0).vecWen := false.B 142cb10a55bSXuan Hu csBundle(1).ldest := VCONFIG_IDX.U 143fe60541bSXuan Hu csBundle(1).rfWen := false.B 144fe60541bSXuan Hu csBundle(1).vecWen := true.B 145d91483a6Sfdy }.elsewhen(src1 =/= 0.U) { 146cb10a55bSXuan Hu csBundle(0).ldest := VCONFIG_IDX.U 147189ec863SzhanglyGit }.elsewhen(VSETOpType.isVsetvli(decodedInstsSimple.fuOpType)) { 148d91483a6Sfdy csBundle(0).fuType := FuType.vsetfwf.U 149d91483a6Sfdy csBundle(0).srcType(0) := SrcType.vp 150cb10a55bSXuan Hu csBundle(0).lsrc(0) := VCONFIG_IDX.U 151189ec863SzhanglyGit }.elsewhen(VSETOpType.isVsetvl(decodedInstsSimple.fuOpType)) { 152d91483a6Sfdy csBundle(0).srcType(0) := SrcType.reg 153d91483a6Sfdy csBundle(0).srcType(1) := SrcType.imm 154d91483a6Sfdy csBundle(0).lsrc(1) := 0.U 155d91483a6Sfdy csBundle(0).ldest := FP_TMP_REG_MV.U 156d91483a6Sfdy csBundle(0).fuType := FuType.i2f.U 157d91483a6Sfdy csBundle(0).rfWen := false.B 158d91483a6Sfdy csBundle(0).fpWen := true.B 159d91483a6Sfdy csBundle(0).vecWen := false.B 160d91483a6Sfdy csBundle(0).fpu.isAddSub := false.B 161d91483a6Sfdy csBundle(0).fpu.typeTagIn := FPU.D 162d91483a6Sfdy csBundle(0).fpu.typeTagOut := FPU.D 163d91483a6Sfdy csBundle(0).fpu.fromInt := true.B 164d91483a6Sfdy csBundle(0).fpu.wflags := false.B 165d91483a6Sfdy csBundle(0).fpu.fpWen := true.B 166d91483a6Sfdy csBundle(0).fpu.div := false.B 167d91483a6Sfdy csBundle(0).fpu.sqrt := false.B 168d91483a6Sfdy csBundle(0).fpu.fcvt := false.B 169d91483a6Sfdy csBundle(0).flushPipe := false.B 170d91483a6Sfdy csBundle(1).fuType := FuType.vsetfwf.U 171d91483a6Sfdy csBundle(1).srcType(0) := SrcType.vp 172cb10a55bSXuan Hu csBundle(1).lsrc(0) := VCONFIG_IDX.U 173d91483a6Sfdy csBundle(1).srcType(1) := SrcType.fp 174d91483a6Sfdy csBundle(1).lsrc(1) := FP_TMP_REG_MV.U 175cb10a55bSXuan Hu csBundle(1).ldest := VCONFIG_IDX.U 176d91483a6Sfdy } 177d91483a6Sfdy } 178d91483a6Sfdy } 17917ec87f2SXuan Hu is(UopSplitType.VEC_VVV) { 180d91483a6Sfdy for (i <- 0 until MAX_VLMUL) { 181d91483a6Sfdy csBundle(i).lsrc(0) := src1 + i.U 182d91483a6Sfdy csBundle(i).lsrc(1) := src2 + i.U 183d91483a6Sfdy csBundle(i).lsrc(2) := dest + i.U 184d91483a6Sfdy csBundle(i).ldest := dest + i.U 185d91483a6Sfdy csBundle(i).uopIdx := i.U 186d91483a6Sfdy } 187d91483a6Sfdy } 188684d7aceSxiaofeibao-xjtu is(UopSplitType.VEC_VFV) { 189684d7aceSxiaofeibao-xjtu for (i <- 0 until MAX_VLMUL) { 190684d7aceSxiaofeibao-xjtu csBundle(i).lsrc(1) := src2 + i.U 191684d7aceSxiaofeibao-xjtu csBundle(i).lsrc(2) := dest + i.U 192684d7aceSxiaofeibao-xjtu csBundle(i).ldest := dest + i.U 193684d7aceSxiaofeibao-xjtu csBundle(i).uopIdx := i.U 194684d7aceSxiaofeibao-xjtu } 195684d7aceSxiaofeibao-xjtu } 19617ec87f2SXuan Hu is(UopSplitType.VEC_EXT2) { 197d91483a6Sfdy for (i <- 0 until MAX_VLMUL / 2) { 198d91483a6Sfdy csBundle(2 * i).lsrc(1) := src2 + i.U 199d91483a6Sfdy csBundle(2 * i).lsrc(2) := dest + (2 * i).U 200d91483a6Sfdy csBundle(2 * i).ldest := dest + (2 * i).U 201d91483a6Sfdy csBundle(2 * i).uopIdx := (2 * i).U 202d91483a6Sfdy csBundle(2 * i + 1).lsrc(1) := src2 + i.U 203d91483a6Sfdy csBundle(2 * i + 1).lsrc(2) := dest + (2 * i + 1).U 204d91483a6Sfdy csBundle(2 * i + 1).ldest := dest + (2 * i + 1).U 205d91483a6Sfdy csBundle(2 * i + 1).uopIdx := (2 * i + 1).U 206d91483a6Sfdy } 207d91483a6Sfdy } 20817ec87f2SXuan Hu is(UopSplitType.VEC_EXT4) { 209d91483a6Sfdy for (i <- 0 until MAX_VLMUL / 4) { 210d91483a6Sfdy csBundle(4 * i).lsrc(1) := src2 + i.U 211d91483a6Sfdy csBundle(4 * i).lsrc(2) := dest + (4 * i).U 212d91483a6Sfdy csBundle(4 * i).ldest := dest + (4 * i).U 213d91483a6Sfdy csBundle(4 * i).uopIdx := (4 * i).U 214d91483a6Sfdy csBundle(4 * i + 1).lsrc(1) := src2 + i.U 215d91483a6Sfdy csBundle(4 * i + 1).lsrc(2) := dest + (4 * i + 1).U 216d91483a6Sfdy csBundle(4 * i + 1).ldest := dest + (4 * i + 1).U 217d91483a6Sfdy csBundle(4 * i + 1).uopIdx := (4 * i + 1).U 218d91483a6Sfdy csBundle(4 * i + 2).lsrc(1) := src2 + i.U 219d91483a6Sfdy csBundle(4 * i + 2).lsrc(2) := dest + (4 * i + 2).U 220d91483a6Sfdy csBundle(4 * i + 2).ldest := dest + (4 * i + 2).U 221d91483a6Sfdy csBundle(4 * i + 2).uopIdx := (4 * i + 2).U 222d91483a6Sfdy csBundle(4 * i + 3).lsrc(1) := src2 + i.U 223d91483a6Sfdy csBundle(4 * i + 3).lsrc(2) := dest + (4 * i + 3).U 224d91483a6Sfdy csBundle(4 * i + 3).ldest := dest + (4 * i + 3).U 225d91483a6Sfdy csBundle(4 * i + 3).uopIdx := (4 * i + 3).U 226d91483a6Sfdy } 227d91483a6Sfdy } 22817ec87f2SXuan Hu is(UopSplitType.VEC_EXT8) { 229d91483a6Sfdy for (i <- 0 until MAX_VLMUL) { 230d91483a6Sfdy csBundle(i).lsrc(1) := src2 231d91483a6Sfdy csBundle(i).lsrc(2) := dest + i.U 232d91483a6Sfdy csBundle(i).ldest := dest + i.U 233d91483a6Sfdy csBundle(i).uopIdx := i.U 234d91483a6Sfdy } 235d91483a6Sfdy } 23617ec87f2SXuan Hu is(UopSplitType.VEC_0XV) { 237d91483a6Sfdy /* 238d91483a6Sfdy FMV.D.X 239d91483a6Sfdy */ 240d91483a6Sfdy csBundle(0).srcType(0) := SrcType.reg 241d91483a6Sfdy csBundle(0).srcType(1) := SrcType.imm 242d91483a6Sfdy csBundle(0).lsrc(1) := 0.U 243d91483a6Sfdy csBundle(0).ldest := FP_TMP_REG_MV.U 244d91483a6Sfdy csBundle(0).fuType := FuType.i2f.U 245d91483a6Sfdy csBundle(0).rfWen := false.B 246d91483a6Sfdy csBundle(0).fpWen := true.B 247d91483a6Sfdy csBundle(0).vecWen := false.B 248d91483a6Sfdy csBundle(0).fpu.isAddSub := false.B 249d91483a6Sfdy csBundle(0).fpu.typeTagIn := FPU.D 250d91483a6Sfdy csBundle(0).fpu.typeTagOut := FPU.D 251d91483a6Sfdy csBundle(0).fpu.fromInt := true.B 252d91483a6Sfdy csBundle(0).fpu.wflags := false.B 253d91483a6Sfdy csBundle(0).fpu.fpWen := true.B 254d91483a6Sfdy csBundle(0).fpu.div := false.B 255d91483a6Sfdy csBundle(0).fpu.sqrt := false.B 256d91483a6Sfdy csBundle(0).fpu.fcvt := false.B 257d91483a6Sfdy /* 258d91483a6Sfdy vfmv.s.f 259d91483a6Sfdy */ 260d91483a6Sfdy csBundle(1).srcType(0) := SrcType.fp 261d91483a6Sfdy csBundle(1).srcType(1) := SrcType.vp 262d91483a6Sfdy csBundle(1).srcType(2) := SrcType.vp 263d91483a6Sfdy csBundle(1).lsrc(0) := FP_TMP_REG_MV.U 264d91483a6Sfdy csBundle(1).lsrc(1) := 0.U 265d91483a6Sfdy csBundle(1).lsrc(2) := dest 266d91483a6Sfdy csBundle(1).ldest := dest 267d91483a6Sfdy csBundle(1).fuType := FuType.vppu.U 26817ec87f2SXuan Hu csBundle(1).fuOpType := VpermType.dummy 269d91483a6Sfdy csBundle(1).rfWen := false.B 270d91483a6Sfdy csBundle(1).fpWen := false.B 271d91483a6Sfdy csBundle(1).vecWen := true.B 272d91483a6Sfdy } 27317ec87f2SXuan Hu is(UopSplitType.VEC_VXV) { 274d91483a6Sfdy /* 275d91483a6Sfdy FMV.D.X 276d91483a6Sfdy */ 277d91483a6Sfdy csBundle(0).srcType(0) := SrcType.reg 278d91483a6Sfdy csBundle(0).srcType(1) := SrcType.imm 279d91483a6Sfdy csBundle(0).lsrc(1) := 0.U 280d91483a6Sfdy csBundle(0).ldest := FP_TMP_REG_MV.U 281d91483a6Sfdy csBundle(0).fuType := FuType.i2f.U 282d91483a6Sfdy csBundle(0).rfWen := false.B 283d91483a6Sfdy csBundle(0).fpWen := true.B 284d91483a6Sfdy csBundle(0).vecWen := false.B 285d91483a6Sfdy csBundle(0).fpu.isAddSub := false.B 286d91483a6Sfdy csBundle(0).fpu.typeTagIn := FPU.D 287d91483a6Sfdy csBundle(0).fpu.typeTagOut := FPU.D 288d91483a6Sfdy csBundle(0).fpu.fromInt := true.B 289d91483a6Sfdy csBundle(0).fpu.wflags := false.B 290d91483a6Sfdy csBundle(0).fpu.fpWen := true.B 291d91483a6Sfdy csBundle(0).fpu.div := false.B 292d91483a6Sfdy csBundle(0).fpu.sqrt := false.B 293d91483a6Sfdy csBundle(0).fpu.fcvt := false.B 294d91483a6Sfdy /* 295d91483a6Sfdy LMUL 296d91483a6Sfdy */ 297d91483a6Sfdy for (i <- 0 until MAX_VLMUL) { 298d91483a6Sfdy csBundle(i + 1).srcType(0) := SrcType.fp 299d91483a6Sfdy csBundle(i + 1).lsrc(0) := FP_TMP_REG_MV.U 300d91483a6Sfdy csBundle(i + 1).lsrc(1) := src2 + i.U 301d91483a6Sfdy csBundle(i + 1).lsrc(2) := dest + i.U 302d91483a6Sfdy csBundle(i + 1).ldest := dest + i.U 303d91483a6Sfdy csBundle(i + 1).uopIdx := i.U 304d91483a6Sfdy } 305d91483a6Sfdy } 30617ec87f2SXuan Hu is(UopSplitType.VEC_VVW) { 307d91483a6Sfdy for (i <- 0 until MAX_VLMUL / 2) { 308d91483a6Sfdy csBundle(2 * i).lsrc(0) := src1 + i.U 309d91483a6Sfdy csBundle(2 * i).lsrc(1) := src2 + i.U 310d91483a6Sfdy csBundle(2 * i).lsrc(2) := dest + (2 * i).U 311d91483a6Sfdy csBundle(2 * i).ldest := dest + (2 * i).U 312d91483a6Sfdy csBundle(2 * i).uopIdx := (2 * i).U 313d91483a6Sfdy csBundle(2 * i + 1).lsrc(0) := src1 + i.U 314d91483a6Sfdy csBundle(2 * i + 1).lsrc(1) := src2 + i.U 315d91483a6Sfdy csBundle(2 * i + 1).lsrc(2) := dest + (2 * i + 1).U 316d91483a6Sfdy csBundle(2 * i + 1).ldest := dest + (2 * i + 1).U 317d91483a6Sfdy csBundle(2 * i + 1).uopIdx := (2 * i + 1).U 318d91483a6Sfdy } 319d91483a6Sfdy } 3203748ec56Sxiaofeibao-xjtu is(UopSplitType.VEC_VFW) { 3213748ec56Sxiaofeibao-xjtu for (i <- 0 until MAX_VLMUL / 2) { 3223748ec56Sxiaofeibao-xjtu csBundle(2 * i).lsrc(0) := src1 3233748ec56Sxiaofeibao-xjtu csBundle(2 * i).lsrc(1) := src2 + i.U 3243748ec56Sxiaofeibao-xjtu csBundle(2 * i).lsrc(2) := dest + (2 * i).U 3253748ec56Sxiaofeibao-xjtu csBundle(2 * i).ldest := dest + (2 * i).U 3263748ec56Sxiaofeibao-xjtu csBundle(2 * i).uopIdx := (2 * i).U 3273748ec56Sxiaofeibao-xjtu csBundle(2 * i + 1).lsrc(0) := src1 3283748ec56Sxiaofeibao-xjtu csBundle(2 * i + 1).lsrc(1) := src2 + i.U 3293748ec56Sxiaofeibao-xjtu csBundle(2 * i + 1).lsrc(2) := dest + (2 * i + 1).U 3303748ec56Sxiaofeibao-xjtu csBundle(2 * i + 1).ldest := dest + (2 * i + 1).U 3313748ec56Sxiaofeibao-xjtu csBundle(2 * i + 1).uopIdx := (2 * i + 1).U 3323748ec56Sxiaofeibao-xjtu } 3333748ec56Sxiaofeibao-xjtu } 33417ec87f2SXuan Hu is(UopSplitType.VEC_WVW) { 335d91483a6Sfdy for (i <- 0 until MAX_VLMUL / 2) { 336d91483a6Sfdy csBundle(2 * i).lsrc(0) := src1 + i.U 337d91483a6Sfdy csBundle(2 * i).lsrc(1) := src2 + (2 * i).U 338d91483a6Sfdy csBundle(2 * i).lsrc(2) := dest + (2 * i).U 339d91483a6Sfdy csBundle(2 * i).ldest := dest + (2 * i).U 340d91483a6Sfdy csBundle(2 * i).uopIdx := (2 * i).U 341d91483a6Sfdy csBundle(2 * i + 1).lsrc(0) := src1 + i.U 342d91483a6Sfdy csBundle(2 * i + 1).lsrc(1) := src2 + (2 * i + 1).U 343d91483a6Sfdy csBundle(2 * i + 1).lsrc(2) := dest + (2 * i + 1).U 344d91483a6Sfdy csBundle(2 * i + 1).ldest := dest + (2 * i + 1).U 345d91483a6Sfdy csBundle(2 * i + 1).uopIdx := (2 * i + 1).U 346d91483a6Sfdy } 347d91483a6Sfdy } 34817ec87f2SXuan Hu is(UopSplitType.VEC_VXW) { 349d91483a6Sfdy /* 350d91483a6Sfdy FMV.D.X 351d91483a6Sfdy */ 352d91483a6Sfdy csBundle(0).srcType(0) := SrcType.reg 353d91483a6Sfdy csBundle(0).srcType(1) := SrcType.imm 354d91483a6Sfdy csBundle(0).lsrc(1) := 0.U 355d91483a6Sfdy csBundle(0).ldest := FP_TMP_REG_MV.U 356d91483a6Sfdy csBundle(0).fuType := FuType.i2f.U 357d91483a6Sfdy csBundle(0).rfWen := false.B 358d91483a6Sfdy csBundle(0).fpWen := true.B 359d91483a6Sfdy csBundle(0).vecWen := false.B 360d91483a6Sfdy csBundle(0).fpu.isAddSub := false.B 361d91483a6Sfdy csBundle(0).fpu.typeTagIn := FPU.D 362d91483a6Sfdy csBundle(0).fpu.typeTagOut := FPU.D 363d91483a6Sfdy csBundle(0).fpu.fromInt := true.B 364d91483a6Sfdy csBundle(0).fpu.wflags := false.B 365d91483a6Sfdy csBundle(0).fpu.fpWen := true.B 366d91483a6Sfdy csBundle(0).fpu.div := false.B 367d91483a6Sfdy csBundle(0).fpu.sqrt := false.B 368d91483a6Sfdy csBundle(0).fpu.fcvt := false.B 369d91483a6Sfdy 370d91483a6Sfdy for (i <- 0 until MAX_VLMUL / 2) { 371d91483a6Sfdy csBundle(2 * i + 1).srcType(0) := SrcType.fp 372d91483a6Sfdy csBundle(2 * i + 1).lsrc(0) := FP_TMP_REG_MV.U 373d91483a6Sfdy csBundle(2 * i + 1).lsrc(1) := src2 + i.U 374d91483a6Sfdy csBundle(2 * i + 1).lsrc(2) := dest + (2 * i).U 375d91483a6Sfdy csBundle(2 * i + 1).ldest := dest + (2 * i).U 376d91483a6Sfdy csBundle(2 * i + 1).uopIdx := (2 * i).U 377d91483a6Sfdy csBundle(2 * i + 2).srcType(0) := SrcType.fp 378d91483a6Sfdy csBundle(2 * i + 2).lsrc(0) := FP_TMP_REG_MV.U 379d91483a6Sfdy csBundle(2 * i + 2).lsrc(1) := src2 + i.U 380d91483a6Sfdy csBundle(2 * i + 2).lsrc(2) := dest + (2 * i + 1).U 381d91483a6Sfdy csBundle(2 * i + 2).ldest := dest + (2 * i + 1).U 382d91483a6Sfdy csBundle(2 * i + 2).uopIdx := (2 * i + 1).U 383d91483a6Sfdy } 384d91483a6Sfdy } 38517ec87f2SXuan Hu is(UopSplitType.VEC_WXW) { 386d91483a6Sfdy /* 387d91483a6Sfdy FMV.D.X 388d91483a6Sfdy */ 389d91483a6Sfdy csBundle(0).srcType(0) := SrcType.reg 390d91483a6Sfdy csBundle(0).srcType(1) := SrcType.imm 391d91483a6Sfdy csBundle(0).lsrc(1) := 0.U 392d91483a6Sfdy csBundle(0).ldest := FP_TMP_REG_MV.U 393d91483a6Sfdy csBundle(0).fuType := FuType.i2f.U 394d91483a6Sfdy csBundle(0).rfWen := false.B 395d91483a6Sfdy csBundle(0).fpWen := true.B 396d91483a6Sfdy csBundle(0).vecWen := false.B 397d91483a6Sfdy csBundle(0).fpu.isAddSub := false.B 398d91483a6Sfdy csBundle(0).fpu.typeTagIn := FPU.D 399d91483a6Sfdy csBundle(0).fpu.typeTagOut := FPU.D 400d91483a6Sfdy csBundle(0).fpu.fromInt := true.B 401d91483a6Sfdy csBundle(0).fpu.wflags := false.B 402d91483a6Sfdy csBundle(0).fpu.fpWen := true.B 403d91483a6Sfdy csBundle(0).fpu.div := false.B 404d91483a6Sfdy csBundle(0).fpu.sqrt := false.B 405d91483a6Sfdy csBundle(0).fpu.fcvt := false.B 406d91483a6Sfdy 407d91483a6Sfdy for (i <- 0 until MAX_VLMUL / 2) { 408d91483a6Sfdy csBundle(2 * i + 1).srcType(0) := SrcType.fp 409d91483a6Sfdy csBundle(2 * i + 1).lsrc(0) := FP_TMP_REG_MV.U 410d91483a6Sfdy csBundle(2 * i + 1).lsrc(1) := src2 + (2 * i).U 411d91483a6Sfdy csBundle(2 * i + 1).lsrc(2) := dest + (2 * i).U 412d91483a6Sfdy csBundle(2 * i + 1).ldest := dest + (2 * i).U 413d91483a6Sfdy csBundle(2 * i + 1).uopIdx := (2 * i).U 414d91483a6Sfdy csBundle(2 * i + 2).srcType(0) := SrcType.fp 415d91483a6Sfdy csBundle(2 * i + 2).lsrc(0) := FP_TMP_REG_MV.U 416d91483a6Sfdy csBundle(2 * i + 2).lsrc(1) := src2 + (2 * i + 1).U 417d91483a6Sfdy csBundle(2 * i + 2).lsrc(2) := dest + (2 * i + 1).U 418d91483a6Sfdy csBundle(2 * i + 2).ldest := dest + (2 * i + 1).U 419d91483a6Sfdy csBundle(2 * i + 2).uopIdx := (2 * i + 1).U 420d91483a6Sfdy } 421d91483a6Sfdy } 42217ec87f2SXuan Hu is(UopSplitType.VEC_WVV) { 423d91483a6Sfdy for (i <- 0 until MAX_VLMUL / 2) { 424d91483a6Sfdy 425d91483a6Sfdy csBundle(2 * i).lsrc(0) := src1 + i.U 426d91483a6Sfdy csBundle(2 * i).lsrc(1) := src2 + (2 * i).U 427d91483a6Sfdy csBundle(2 * i).lsrc(2) := dest + i.U 428d6f9198fSXuan Hu csBundle(2 * i).ldest := dest + i.U 429d91483a6Sfdy csBundle(2 * i).uopIdx := (2 * i).U 430d91483a6Sfdy csBundle(2 * i + 1).lsrc(0) := src1 + i.U 431d91483a6Sfdy csBundle(2 * i + 1).lsrc(1) := src2 + (2 * i + 1).U 432d6f9198fSXuan Hu csBundle(2 * i + 1).lsrc(2) := dest + i.U 433d91483a6Sfdy csBundle(2 * i + 1).ldest := dest + i.U 434d91483a6Sfdy csBundle(2 * i + 1).uopIdx := (2 * i + 1).U 435d91483a6Sfdy } 436d91483a6Sfdy } 4373748ec56Sxiaofeibao-xjtu is(UopSplitType.VEC_WFW) { 4383748ec56Sxiaofeibao-xjtu for (i <- 0 until MAX_VLMUL / 2) { 4393748ec56Sxiaofeibao-xjtu csBundle(2 * i).lsrc(0) := src1 4403748ec56Sxiaofeibao-xjtu csBundle(2 * i).lsrc(1) := src2 + (2 * i).U 4413748ec56Sxiaofeibao-xjtu csBundle(2 * i).lsrc(2) := dest + (2 * i).U 4423748ec56Sxiaofeibao-xjtu csBundle(2 * i).ldest := dest + (2 * i).U 4433748ec56Sxiaofeibao-xjtu csBundle(2 * i).uopIdx := (2 * i).U 4443748ec56Sxiaofeibao-xjtu csBundle(2 * i + 1).lsrc(0) := src1 4453748ec56Sxiaofeibao-xjtu csBundle(2 * i + 1).lsrc(1) := src2 + (2 * i + 1).U 4463748ec56Sxiaofeibao-xjtu csBundle(2 * i + 1).lsrc(2) := dest + (2 * i + 1).U 4473748ec56Sxiaofeibao-xjtu csBundle(2 * i + 1).ldest := dest + (2 * i + 1).U 4483748ec56Sxiaofeibao-xjtu csBundle(2 * i + 1).uopIdx := (2 * i + 1).U 4493748ec56Sxiaofeibao-xjtu } 4503748ec56Sxiaofeibao-xjtu } 45117ec87f2SXuan Hu is(UopSplitType.VEC_WXV) { 452d91483a6Sfdy /* 453d91483a6Sfdy FMV.D.X 454d91483a6Sfdy */ 455d91483a6Sfdy csBundle(0).srcType(0) := SrcType.reg 456d91483a6Sfdy csBundle(0).srcType(1) := SrcType.imm 457d91483a6Sfdy csBundle(0).lsrc(1) := 0.U 458d91483a6Sfdy csBundle(0).ldest := FP_TMP_REG_MV.U 459d91483a6Sfdy csBundle(0).fuType := FuType.i2f.U 460d91483a6Sfdy csBundle(0).rfWen := false.B 461d91483a6Sfdy csBundle(0).fpWen := true.B 462d91483a6Sfdy csBundle(0).vecWen := false.B 463d91483a6Sfdy csBundle(0).fpu.isAddSub := false.B 464d91483a6Sfdy csBundle(0).fpu.typeTagIn := FPU.D 465d91483a6Sfdy csBundle(0).fpu.typeTagOut := FPU.D 466d91483a6Sfdy csBundle(0).fpu.fromInt := true.B 467d91483a6Sfdy csBundle(0).fpu.wflags := false.B 468d91483a6Sfdy csBundle(0).fpu.fpWen := true.B 469d91483a6Sfdy csBundle(0).fpu.div := false.B 470d91483a6Sfdy csBundle(0).fpu.sqrt := false.B 471d91483a6Sfdy csBundle(0).fpu.fcvt := false.B 472d91483a6Sfdy 473d91483a6Sfdy for (i <- 0 until MAX_VLMUL / 2) { 474d91483a6Sfdy csBundle(2 * i + 1).srcType(0) := SrcType.fp 475d91483a6Sfdy csBundle(2 * i + 1).lsrc(0) := FP_TMP_REG_MV.U 476d91483a6Sfdy csBundle(2 * i + 1).lsrc(1) := src2 + (2 * i).U 477d91483a6Sfdy csBundle(2 * i + 1).lsrc(2) := dest + i.U 478d6f9198fSXuan Hu csBundle(2 * i + 1).ldest := dest + i.U 479d91483a6Sfdy csBundle(2 * i + 1).uopIdx := (2 * i).U 480d91483a6Sfdy csBundle(2 * i + 2).srcType(0) := SrcType.fp 481d91483a6Sfdy csBundle(2 * i + 2).lsrc(0) := FP_TMP_REG_MV.U 482d91483a6Sfdy csBundle(2 * i + 2).lsrc(1) := src2 + (2 * i + 1).U 483d6f9198fSXuan Hu csBundle(2 * i + 2).lsrc(2) := dest + i.U 484d91483a6Sfdy csBundle(2 * i + 2).ldest := dest + i.U 485d91483a6Sfdy csBundle(2 * i + 2).uopIdx := (2 * i + 1).U 486d91483a6Sfdy } 487d91483a6Sfdy } 48817ec87f2SXuan Hu is(UopSplitType.VEC_VVM) { 489d91483a6Sfdy csBundle(0).lsrc(2) := dest 490d6f9198fSXuan Hu csBundle(0).ldest := dest 491d91483a6Sfdy csBundle(0).uopIdx := 0.U 492d91483a6Sfdy for (i <- 1 until MAX_VLMUL) { 493d91483a6Sfdy csBundle(i).lsrc(0) := src1 + i.U 494d91483a6Sfdy csBundle(i).lsrc(1) := src2 + i.U 495d6f9198fSXuan Hu csBundle(i).lsrc(2) := dest 496d6f9198fSXuan Hu csBundle(i).ldest := dest 497d91483a6Sfdy csBundle(i).uopIdx := i.U 498d91483a6Sfdy } 499d91483a6Sfdy csBundle(numOfUop - 1.U).ldest := dest 500d91483a6Sfdy } 501f06d6d60Sxiaofeibao-xjtu is(UopSplitType.VEC_VFM) { 502f06d6d60Sxiaofeibao-xjtu csBundle(0).lsrc(2) := dest 503f06d6d60Sxiaofeibao-xjtu csBundle(0).ldest := dest 504f06d6d60Sxiaofeibao-xjtu csBundle(0).uopIdx := 0.U 505f06d6d60Sxiaofeibao-xjtu for (i <- 1 until MAX_VLMUL) { 506f06d6d60Sxiaofeibao-xjtu csBundle(i).lsrc(0) := src1 507f06d6d60Sxiaofeibao-xjtu csBundle(i).lsrc(1) := src2 + i.U 508f06d6d60Sxiaofeibao-xjtu csBundle(i).lsrc(2) := dest 509f06d6d60Sxiaofeibao-xjtu csBundle(i).ldest := dest 510f06d6d60Sxiaofeibao-xjtu csBundle(i).uopIdx := i.U 511f06d6d60Sxiaofeibao-xjtu } 512f06d6d60Sxiaofeibao-xjtu csBundle(numOfUop - 1.U).ldest := dest 513f06d6d60Sxiaofeibao-xjtu } 51417ec87f2SXuan Hu is(UopSplitType.VEC_VXM) { 515d91483a6Sfdy /* 516d91483a6Sfdy FMV.D.X 517d91483a6Sfdy */ 518d91483a6Sfdy csBundle(0).srcType(0) := SrcType.reg 519d91483a6Sfdy csBundle(0).srcType(1) := SrcType.imm 520d91483a6Sfdy csBundle(0).lsrc(1) := 0.U 521d91483a6Sfdy csBundle(0).ldest := FP_TMP_REG_MV.U 522d91483a6Sfdy csBundle(0).fuType := FuType.i2f.U 523d91483a6Sfdy csBundle(0).rfWen := false.B 524d91483a6Sfdy csBundle(0).fpWen := true.B 525d91483a6Sfdy csBundle(0).vecWen := false.B 526d91483a6Sfdy csBundle(0).fpu.isAddSub := false.B 527d91483a6Sfdy csBundle(0).fpu.typeTagIn := FPU.D 528d91483a6Sfdy csBundle(0).fpu.typeTagOut := FPU.D 529d91483a6Sfdy csBundle(0).fpu.fromInt := true.B 530d91483a6Sfdy csBundle(0).fpu.wflags := false.B 531d91483a6Sfdy csBundle(0).fpu.fpWen := true.B 532d91483a6Sfdy csBundle(0).fpu.div := false.B 533d91483a6Sfdy csBundle(0).fpu.sqrt := false.B 534d91483a6Sfdy csBundle(0).fpu.fcvt := false.B 535d91483a6Sfdy //LMUL 536d91483a6Sfdy csBundle(1).srcType(0) := SrcType.fp 537d91483a6Sfdy csBundle(1).lsrc(0) := FP_TMP_REG_MV.U 538d91483a6Sfdy csBundle(1).lsrc(2) := dest 539d6f9198fSXuan Hu csBundle(1).ldest := dest 540d91483a6Sfdy csBundle(1).uopIdx := 0.U 541d91483a6Sfdy for (i <- 1 until MAX_VLMUL) { 542d91483a6Sfdy csBundle(i + 1).srcType(0) := SrcType.fp 543d91483a6Sfdy csBundle(i + 1).lsrc(0) := FP_TMP_REG_MV.U 544d91483a6Sfdy csBundle(i + 1).lsrc(1) := src2 + i.U 545d6f9198fSXuan Hu csBundle(i + 1).lsrc(2) := dest 546d6f9198fSXuan Hu csBundle(i + 1).ldest := dest 547d91483a6Sfdy csBundle(i + 1).uopIdx := i.U 548d91483a6Sfdy } 549d91483a6Sfdy csBundle(numOfUop - 1.U).ldest := dest 550d91483a6Sfdy } 55117ec87f2SXuan Hu is(UopSplitType.VEC_SLIDE1UP) { 552d91483a6Sfdy /* 553d91483a6Sfdy FMV.D.X 554d91483a6Sfdy */ 555d91483a6Sfdy csBundle(0).srcType(0) := SrcType.reg 556d91483a6Sfdy csBundle(0).srcType(1) := SrcType.imm 557d91483a6Sfdy csBundle(0).lsrc(1) := 0.U 558d91483a6Sfdy csBundle(0).ldest := FP_TMP_REG_MV.U 559d91483a6Sfdy csBundle(0).fuType := FuType.i2f.U 560d91483a6Sfdy csBundle(0).rfWen := false.B 561d91483a6Sfdy csBundle(0).fpWen := true.B 562d91483a6Sfdy csBundle(0).vecWen := false.B 563d91483a6Sfdy csBundle(0).fpu.isAddSub := false.B 564d91483a6Sfdy csBundle(0).fpu.typeTagIn := FPU.D 565d91483a6Sfdy csBundle(0).fpu.typeTagOut := FPU.D 566d91483a6Sfdy csBundle(0).fpu.fromInt := true.B 567d91483a6Sfdy csBundle(0).fpu.wflags := false.B 568d91483a6Sfdy csBundle(0).fpu.fpWen := true.B 569d91483a6Sfdy csBundle(0).fpu.div := false.B 570d91483a6Sfdy csBundle(0).fpu.sqrt := false.B 571d91483a6Sfdy csBundle(0).fpu.fcvt := false.B 572d91483a6Sfdy //LMUL 573d91483a6Sfdy csBundle(1).srcType(0) := SrcType.fp 574d91483a6Sfdy csBundle(1).lsrc(0) := FP_TMP_REG_MV.U 575d91483a6Sfdy csBundle(1).lsrc(2) := dest 576d91483a6Sfdy csBundle(1).ldest := dest 577d91483a6Sfdy csBundle(1).uopIdx := 0.U 578d91483a6Sfdy for (i <- 1 until MAX_VLMUL) { 579d91483a6Sfdy csBundle(i + 1).srcType(0) := SrcType.vp 580d91483a6Sfdy csBundle(i + 1).lsrc(0) := src2 + (i - 1).U 581d91483a6Sfdy csBundle(i + 1).lsrc(1) := src2 + i.U 582d91483a6Sfdy csBundle(i + 1).lsrc(2) := dest + i.U 583d91483a6Sfdy csBundle(i + 1).ldest := dest + i.U 584d91483a6Sfdy csBundle(i + 1).uopIdx := i.U 585d91483a6Sfdy } 586d91483a6Sfdy } 58717ec87f2SXuan Hu is(UopSplitType.VEC_FSLIDE1UP) { 588d91483a6Sfdy //LMUL 589d91483a6Sfdy csBundle(0).srcType(0) := SrcType.fp 590d91483a6Sfdy csBundle(0).lsrc(0) := src1 591d91483a6Sfdy csBundle(0).lsrc(1) := src2 592d91483a6Sfdy csBundle(0).lsrc(2) := dest 593d91483a6Sfdy csBundle(0).ldest := dest 594d91483a6Sfdy csBundle(0).uopIdx := 0.U 595d91483a6Sfdy for (i <- 1 until MAX_VLMUL) { 596d91483a6Sfdy csBundle(i).srcType(0) := SrcType.vp 597d91483a6Sfdy csBundle(i).lsrc(0) := src2 + (i - 1).U 598d91483a6Sfdy csBundle(i).lsrc(1) := src2 + i.U 599d91483a6Sfdy csBundle(i).lsrc(2) := dest + i.U 600d91483a6Sfdy csBundle(i).ldest := dest + i.U 601d91483a6Sfdy csBundle(i).uopIdx := i.U 602d91483a6Sfdy } 603d91483a6Sfdy } 60417ec87f2SXuan Hu is(UopSplitType.VEC_SLIDE1DOWN) { // lmul+lmul = 16 605d91483a6Sfdy /* 606d91483a6Sfdy FMV.D.X 607d91483a6Sfdy */ 608d91483a6Sfdy csBundle(0).srcType(0) := SrcType.reg 609d91483a6Sfdy csBundle(0).srcType(1) := SrcType.imm 610d91483a6Sfdy csBundle(0).lsrc(1) := 0.U 611d91483a6Sfdy csBundle(0).ldest := FP_TMP_REG_MV.U 612d91483a6Sfdy csBundle(0).fuType := FuType.i2f.U 613d91483a6Sfdy csBundle(0).rfWen := false.B 614d91483a6Sfdy csBundle(0).fpWen := true.B 615d91483a6Sfdy csBundle(0).vecWen := false.B 616d91483a6Sfdy csBundle(0).fpu.isAddSub := false.B 617d91483a6Sfdy csBundle(0).fpu.typeTagIn := FPU.D 618d91483a6Sfdy csBundle(0).fpu.typeTagOut := FPU.D 619d91483a6Sfdy csBundle(0).fpu.fromInt := true.B 620d91483a6Sfdy csBundle(0).fpu.wflags := false.B 621d91483a6Sfdy csBundle(0).fpu.fpWen := true.B 622d91483a6Sfdy csBundle(0).fpu.div := false.B 623d91483a6Sfdy csBundle(0).fpu.sqrt := false.B 624d91483a6Sfdy csBundle(0).fpu.fcvt := false.B 625d91483a6Sfdy //LMUL 626d91483a6Sfdy for (i <- 0 until MAX_VLMUL) { 627d91483a6Sfdy csBundle(2 * i + 1).srcType(0) := SrcType.vp 628d91483a6Sfdy csBundle(2 * i + 1).srcType(1) := SrcType.vp 629d91483a6Sfdy csBundle(2 * i + 1).lsrc(0) := src2 + (i + 1).U 630d91483a6Sfdy csBundle(2 * i + 1).lsrc(1) := src2 + i.U 631d91483a6Sfdy csBundle(2 * i + 1).lsrc(2) := dest + i.U 632d91483a6Sfdy csBundle(2 * i + 1).ldest := VECTOR_TMP_REG_LMUL.U 633d91483a6Sfdy csBundle(2 * i + 1).uopIdx := (2 * i).U 634d91483a6Sfdy if (2 * i + 2 < MAX_VLMUL * 2) { 635d91483a6Sfdy csBundle(2 * i + 2).srcType(0) := SrcType.fp 636d91483a6Sfdy csBundle(2 * i + 2).lsrc(0) := FP_TMP_REG_MV.U 637d91483a6Sfdy // csBundle(2 * i + 2).lsrc(1) := src2 + i.U // DontCare 638d91483a6Sfdy csBundle(2 * i + 2).lsrc(2) := VECTOR_TMP_REG_LMUL.U 639d91483a6Sfdy csBundle(2 * i + 2).ldest := dest + i.U 640d91483a6Sfdy csBundle(2 * i + 2).uopIdx := (2 * i + 1).U 641d91483a6Sfdy } 642d91483a6Sfdy } 643d91483a6Sfdy csBundle(numOfUop - 1.U).srcType(0) := SrcType.fp 644d91483a6Sfdy csBundle(numOfUop - 1.U).lsrc(0) := FP_TMP_REG_MV.U 645d91483a6Sfdy csBundle(numOfUop - 1.U).ldest := dest + lmul - 1.U 646d91483a6Sfdy } 64717ec87f2SXuan Hu is(UopSplitType.VEC_FSLIDE1DOWN) { 648d91483a6Sfdy //LMUL 649d91483a6Sfdy for (i <- 0 until MAX_VLMUL) { 650d91483a6Sfdy csBundle(2 * i).srcType(0) := SrcType.vp 651d91483a6Sfdy csBundle(2 * i).srcType(1) := SrcType.vp 652d91483a6Sfdy csBundle(2 * i).lsrc(0) := src2 + (i + 1).U 653d91483a6Sfdy csBundle(2 * i).lsrc(1) := src2 + i.U 654d91483a6Sfdy csBundle(2 * i).lsrc(2) := dest + i.U 655d91483a6Sfdy csBundle(2 * i).ldest := VECTOR_TMP_REG_LMUL.U 656d91483a6Sfdy csBundle(2 * i).uopIdx := (2 * i).U 657d91483a6Sfdy csBundle(2 * i + 1).srcType(0) := SrcType.fp 658d91483a6Sfdy csBundle(2 * i + 1).lsrc(0) := src1 659d91483a6Sfdy csBundle(2 * i + 1).lsrc(2) := VECTOR_TMP_REG_LMUL.U 660d91483a6Sfdy csBundle(2 * i + 1).ldest := dest + i.U 661d91483a6Sfdy csBundle(2 * i + 1).uopIdx := (2 * i + 1).U 662d91483a6Sfdy } 663d91483a6Sfdy csBundle(numOfUop - 1.U).srcType(0) := SrcType.fp 664d91483a6Sfdy csBundle(numOfUop - 1.U).lsrc(0) := src1 665d91483a6Sfdy csBundle(numOfUop - 1.U).ldest := dest + lmul - 1.U 666d91483a6Sfdy } 66717ec87f2SXuan Hu is(UopSplitType.VEC_VRED) { 668d91483a6Sfdy when(simple.io.enq.vtype.vlmul === "b001".U) { 669d91483a6Sfdy csBundle(0).srcType(2) := SrcType.DC 670d91483a6Sfdy csBundle(0).lsrc(0) := src2 + 1.U 671d91483a6Sfdy csBundle(0).lsrc(1) := src2 672d91483a6Sfdy csBundle(0).ldest := VECTOR_TMP_REG_LMUL.U 673d91483a6Sfdy csBundle(0).uopIdx := 0.U 674d91483a6Sfdy } 675d91483a6Sfdy when(simple.io.enq.vtype.vlmul === "b010".U) { 676d91483a6Sfdy csBundle(0).srcType(2) := SrcType.DC 677d91483a6Sfdy csBundle(0).lsrc(0) := src2 + 1.U 678d91483a6Sfdy csBundle(0).lsrc(1) := src2 679d91483a6Sfdy csBundle(0).ldest := VECTOR_TMP_REG_LMUL.U 680d91483a6Sfdy csBundle(0).uopIdx := 0.U 681d91483a6Sfdy 682d91483a6Sfdy csBundle(1).srcType(2) := SrcType.DC 683d91483a6Sfdy csBundle(1).lsrc(0) := src2 + 3.U 684d91483a6Sfdy csBundle(1).lsrc(1) := src2 + 2.U 685d91483a6Sfdy csBundle(1).ldest := (VECTOR_TMP_REG_LMUL + 1).U 686d91483a6Sfdy csBundle(1).uopIdx := 1.U 687d91483a6Sfdy 688d91483a6Sfdy csBundle(2).srcType(2) := SrcType.DC 689d91483a6Sfdy csBundle(2).lsrc(0) := (VECTOR_TMP_REG_LMUL + 1).U 690d91483a6Sfdy csBundle(2).lsrc(1) := VECTOR_TMP_REG_LMUL.U 691d91483a6Sfdy csBundle(2).ldest := (VECTOR_TMP_REG_LMUL + 2).U 692d91483a6Sfdy csBundle(2).uopIdx := 2.U 693d91483a6Sfdy } 694d91483a6Sfdy when(simple.io.enq.vtype.vlmul === "b011".U) { 695d91483a6Sfdy for (i <- 0 until MAX_VLMUL) { 696d91483a6Sfdy if (i < MAX_VLMUL - MAX_VLMUL / 2) { 697d91483a6Sfdy csBundle(i).lsrc(0) := src2 + (i * 2 + 1).U 698d91483a6Sfdy csBundle(i).lsrc(1) := src2 + (i * 2).U 699d91483a6Sfdy csBundle(i).ldest := (VECTOR_TMP_REG_LMUL + i).U 700d91483a6Sfdy } else if (i < MAX_VLMUL - MAX_VLMUL / 4) { 701d91483a6Sfdy csBundle(i).lsrc(0) := (VECTOR_TMP_REG_LMUL + (i - MAX_VLMUL / 2) * 2 + 1).U 702d91483a6Sfdy csBundle(i).lsrc(1) := (VECTOR_TMP_REG_LMUL + (i - MAX_VLMUL / 2) * 2).U 703d91483a6Sfdy csBundle(i).ldest := (VECTOR_TMP_REG_LMUL + i).U 704d91483a6Sfdy } else if (i < MAX_VLMUL - MAX_VLMUL / 8) { 705d91483a6Sfdy csBundle(6).lsrc(0) := (VECTOR_TMP_REG_LMUL + 5).U 706d91483a6Sfdy csBundle(6).lsrc(1) := (VECTOR_TMP_REG_LMUL + 4).U 707d91483a6Sfdy csBundle(6).ldest := (VECTOR_TMP_REG_LMUL + 6).U 708d91483a6Sfdy } 709d91483a6Sfdy csBundle(i).srcType(2) := SrcType.DC 710d91483a6Sfdy csBundle(i).uopIdx := i.U 711d91483a6Sfdy } 712d91483a6Sfdy } 713d91483a6Sfdy when(simple.io.enq.vtype.vlmul.orR()) { 714d91483a6Sfdy csBundle(numOfUop - 1.U).srcType(2) := SrcType.vp 715d91483a6Sfdy csBundle(numOfUop - 1.U).lsrc(0) := src1 716d91483a6Sfdy csBundle(numOfUop - 1.U).lsrc(1) := VECTOR_TMP_REG_LMUL.U + numOfUop - 2.U 717d91483a6Sfdy csBundle(numOfUop - 1.U).lsrc(2) := dest 718d91483a6Sfdy csBundle(numOfUop - 1.U).ldest := dest 719d91483a6Sfdy csBundle(numOfUop - 1.U).uopIdx := numOfUop - 1.U 720d91483a6Sfdy } 721d91483a6Sfdy } 722*582849ffSxiaofeibao-xjtu is(UopSplitType.VEC_VFRED) { 723*582849ffSxiaofeibao-xjtu val vlmul = simple.io.enq.vtype.vlmul 724*582849ffSxiaofeibao-xjtu val vsew = simple.io.enq.vtype.vsew 725*582849ffSxiaofeibao-xjtu when(vlmul === VLmul.m8){ 726*582849ffSxiaofeibao-xjtu for (i <- 0 until 4) { 727*582849ffSxiaofeibao-xjtu csBundle(i).lsrc(0) := src2 + (i * 2 + 1).U 728*582849ffSxiaofeibao-xjtu csBundle(i).lsrc(1) := src2 + (i * 2).U 729*582849ffSxiaofeibao-xjtu csBundle(i).ldest := (VECTOR_TMP_REG_LMUL + i).U 730*582849ffSxiaofeibao-xjtu csBundle(i).uopIdx := i.U 731*582849ffSxiaofeibao-xjtu } 732*582849ffSxiaofeibao-xjtu for (i <- 4 until 6) { 733*582849ffSxiaofeibao-xjtu csBundle(i).lsrc(0) := (VECTOR_TMP_REG_LMUL + (i - 4) * 2 + 1).U 734*582849ffSxiaofeibao-xjtu csBundle(i).lsrc(1) := (VECTOR_TMP_REG_LMUL + (i - 4) * 2).U 735*582849ffSxiaofeibao-xjtu csBundle(i).ldest := (VECTOR_TMP_REG_LMUL + i).U 736*582849ffSxiaofeibao-xjtu csBundle(i).uopIdx := i.U 737*582849ffSxiaofeibao-xjtu } 738*582849ffSxiaofeibao-xjtu csBundle(6).lsrc(0) := (VECTOR_TMP_REG_LMUL + 5).U 739*582849ffSxiaofeibao-xjtu csBundle(6).lsrc(1) := (VECTOR_TMP_REG_LMUL + 4).U 740*582849ffSxiaofeibao-xjtu csBundle(6).ldest := (VECTOR_TMP_REG_LMUL + 6).U 741*582849ffSxiaofeibao-xjtu csBundle(6).uopIdx := 6.U 742*582849ffSxiaofeibao-xjtu when(vsew === VSew.e64) { 743*582849ffSxiaofeibao-xjtu csBundle(7).lsrc(0) := (VECTOR_TMP_REG_LMUL + 6).U 744*582849ffSxiaofeibao-xjtu csBundle(7).lsrc(1) := (VECTOR_TMP_REG_LMUL + 6).U 745*582849ffSxiaofeibao-xjtu csBundle(7).ldest := (VECTOR_TMP_REG_LMUL + 7).U 746*582849ffSxiaofeibao-xjtu csBundle(7).vpu.fpu.isFoldTo1_2 := true.B 747*582849ffSxiaofeibao-xjtu csBundle(7).uopIdx := 7.U 748*582849ffSxiaofeibao-xjtu csBundle(8).lsrc(0) := src1 749*582849ffSxiaofeibao-xjtu csBundle(8).lsrc(1) := (VECTOR_TMP_REG_LMUL + 7).U 750*582849ffSxiaofeibao-xjtu csBundle(8).ldest := dest 751*582849ffSxiaofeibao-xjtu csBundle(8).uopIdx := 8.U 752*582849ffSxiaofeibao-xjtu } 753*582849ffSxiaofeibao-xjtu when(vsew === VSew.e32) { 754*582849ffSxiaofeibao-xjtu csBundle(7).lsrc(0) := (VECTOR_TMP_REG_LMUL + 6).U 755*582849ffSxiaofeibao-xjtu csBundle(7).lsrc(1) := (VECTOR_TMP_REG_LMUL + 6).U 756*582849ffSxiaofeibao-xjtu csBundle(7).ldest := (VECTOR_TMP_REG_LMUL + 7).U 757*582849ffSxiaofeibao-xjtu csBundle(7).vpu.fpu.isFoldTo1_2 := true.B 758*582849ffSxiaofeibao-xjtu csBundle(7).uopIdx := 7.U 759*582849ffSxiaofeibao-xjtu csBundle(8).lsrc(0) := (VECTOR_TMP_REG_LMUL + 7).U 760*582849ffSxiaofeibao-xjtu csBundle(8).lsrc(1) := (VECTOR_TMP_REG_LMUL + 7).U 761*582849ffSxiaofeibao-xjtu csBundle(8).ldest := (VECTOR_TMP_REG_LMUL + 8).U 762*582849ffSxiaofeibao-xjtu csBundle(8).vpu.fpu.isFoldTo1_4 := true.B 763*582849ffSxiaofeibao-xjtu csBundle(8).uopIdx := 8.U 764*582849ffSxiaofeibao-xjtu csBundle(9).lsrc(0) := src1 765*582849ffSxiaofeibao-xjtu csBundle(9).lsrc(1) := (VECTOR_TMP_REG_LMUL + 8).U 766*582849ffSxiaofeibao-xjtu csBundle(9).ldest := dest 767*582849ffSxiaofeibao-xjtu csBundle(9).uopIdx := 9.U 768*582849ffSxiaofeibao-xjtu } 769*582849ffSxiaofeibao-xjtu when(vsew === VSew.e16) { 770*582849ffSxiaofeibao-xjtu csBundle(7).lsrc(0) := (VECTOR_TMP_REG_LMUL + 6).U 771*582849ffSxiaofeibao-xjtu csBundle(7).lsrc(1) := (VECTOR_TMP_REG_LMUL + 6).U 772*582849ffSxiaofeibao-xjtu csBundle(7).ldest := (VECTOR_TMP_REG_LMUL + 7).U 773*582849ffSxiaofeibao-xjtu csBundle(7).vpu.fpu.isFoldTo1_2 := true.B 774*582849ffSxiaofeibao-xjtu csBundle(7).uopIdx := 7.U 775*582849ffSxiaofeibao-xjtu csBundle(8).lsrc(0) := (VECTOR_TMP_REG_LMUL + 7).U 776*582849ffSxiaofeibao-xjtu csBundle(8).lsrc(1) := (VECTOR_TMP_REG_LMUL + 7).U 777*582849ffSxiaofeibao-xjtu csBundle(8).ldest := (VECTOR_TMP_REG_LMUL + 8).U 778*582849ffSxiaofeibao-xjtu csBundle(8).vpu.fpu.isFoldTo1_4 := true.B 779*582849ffSxiaofeibao-xjtu csBundle(8).uopIdx := 8.U 780*582849ffSxiaofeibao-xjtu csBundle(9).lsrc(0) := (VECTOR_TMP_REG_LMUL + 8).U 781*582849ffSxiaofeibao-xjtu csBundle(9).lsrc(1) := (VECTOR_TMP_REG_LMUL + 8).U 782*582849ffSxiaofeibao-xjtu csBundle(9).ldest := (VECTOR_TMP_REG_LMUL + 9).U 783*582849ffSxiaofeibao-xjtu csBundle(9).vpu.fpu.isFoldTo1_8 := true.B 784*582849ffSxiaofeibao-xjtu csBundle(9).uopIdx := 9.U 785*582849ffSxiaofeibao-xjtu csBundle(10).lsrc(0) := src1 786*582849ffSxiaofeibao-xjtu csBundle(10).lsrc(1) := (VECTOR_TMP_REG_LMUL + 9).U 787*582849ffSxiaofeibao-xjtu csBundle(10).ldest := dest 788*582849ffSxiaofeibao-xjtu csBundle(10).uopIdx := 10.U 789*582849ffSxiaofeibao-xjtu } 790*582849ffSxiaofeibao-xjtu } 791*582849ffSxiaofeibao-xjtu when(vlmul === VLmul.m4) { 792*582849ffSxiaofeibao-xjtu for (i <- 0 until 2) { 793*582849ffSxiaofeibao-xjtu csBundle(i).lsrc(0) := src2 + (i * 2 + 1).U 794*582849ffSxiaofeibao-xjtu csBundle(i).lsrc(1) := src2 + (i * 2).U 795*582849ffSxiaofeibao-xjtu csBundle(i).ldest := (VECTOR_TMP_REG_LMUL + i).U 796*582849ffSxiaofeibao-xjtu csBundle(i).uopIdx := i.U 797*582849ffSxiaofeibao-xjtu } 798*582849ffSxiaofeibao-xjtu csBundle(2).lsrc(0) := (VECTOR_TMP_REG_LMUL + 1).U 799*582849ffSxiaofeibao-xjtu csBundle(2).lsrc(1) := (VECTOR_TMP_REG_LMUL + 0).U 800*582849ffSxiaofeibao-xjtu csBundle(2).ldest := (VECTOR_TMP_REG_LMUL + 2).U 801*582849ffSxiaofeibao-xjtu csBundle(2).uopIdx := 2.U 802*582849ffSxiaofeibao-xjtu when(vsew === VSew.e64) { 803*582849ffSxiaofeibao-xjtu csBundle(3).lsrc(0) := (VECTOR_TMP_REG_LMUL + 2).U 804*582849ffSxiaofeibao-xjtu csBundle(3).lsrc(1) := (VECTOR_TMP_REG_LMUL + 2).U 805*582849ffSxiaofeibao-xjtu csBundle(3).ldest := (VECTOR_TMP_REG_LMUL + 3).U 806*582849ffSxiaofeibao-xjtu csBundle(3).vpu.fpu.isFoldTo1_2 := true.B 807*582849ffSxiaofeibao-xjtu csBundle(3).uopIdx := 3.U 808*582849ffSxiaofeibao-xjtu csBundle(4).lsrc(0) := src1 809*582849ffSxiaofeibao-xjtu csBundle(4).lsrc(1) := (VECTOR_TMP_REG_LMUL + 3).U 810*582849ffSxiaofeibao-xjtu csBundle(4).ldest := dest 811*582849ffSxiaofeibao-xjtu csBundle(4).uopIdx := 4.U 812*582849ffSxiaofeibao-xjtu } 813*582849ffSxiaofeibao-xjtu when(vsew === VSew.e32) { 814*582849ffSxiaofeibao-xjtu csBundle(3).lsrc(0) := (VECTOR_TMP_REG_LMUL + 2).U 815*582849ffSxiaofeibao-xjtu csBundle(3).lsrc(1) := (VECTOR_TMP_REG_LMUL + 2).U 816*582849ffSxiaofeibao-xjtu csBundle(3).ldest := (VECTOR_TMP_REG_LMUL + 3).U 817*582849ffSxiaofeibao-xjtu csBundle(3).vpu.fpu.isFoldTo1_2 := true.B 818*582849ffSxiaofeibao-xjtu csBundle(3).uopIdx := 3.U 819*582849ffSxiaofeibao-xjtu csBundle(4).lsrc(0) := (VECTOR_TMP_REG_LMUL + 3).U 820*582849ffSxiaofeibao-xjtu csBundle(4).lsrc(1) := (VECTOR_TMP_REG_LMUL + 3).U 821*582849ffSxiaofeibao-xjtu csBundle(4).ldest := (VECTOR_TMP_REG_LMUL + 4).U 822*582849ffSxiaofeibao-xjtu csBundle(4).vpu.fpu.isFoldTo1_4 := true.B 823*582849ffSxiaofeibao-xjtu csBundle(4).uopIdx := 4.U 824*582849ffSxiaofeibao-xjtu csBundle(5).lsrc(0) := src1 825*582849ffSxiaofeibao-xjtu csBundle(5).lsrc(1) := (VECTOR_TMP_REG_LMUL + 4).U 826*582849ffSxiaofeibao-xjtu csBundle(5).ldest := dest 827*582849ffSxiaofeibao-xjtu csBundle(5).uopIdx := 5.U 828*582849ffSxiaofeibao-xjtu } 829*582849ffSxiaofeibao-xjtu when(vsew === VSew.e16) { 830*582849ffSxiaofeibao-xjtu csBundle(3).lsrc(0) := (VECTOR_TMP_REG_LMUL + 2).U 831*582849ffSxiaofeibao-xjtu csBundle(3).lsrc(1) := (VECTOR_TMP_REG_LMUL + 2).U 832*582849ffSxiaofeibao-xjtu csBundle(3).ldest := (VECTOR_TMP_REG_LMUL + 3).U 833*582849ffSxiaofeibao-xjtu csBundle(3).vpu.fpu.isFoldTo1_2 := true.B 834*582849ffSxiaofeibao-xjtu csBundle(3).uopIdx := 3.U 835*582849ffSxiaofeibao-xjtu csBundle(4).lsrc(0) := (VECTOR_TMP_REG_LMUL + 3).U 836*582849ffSxiaofeibao-xjtu csBundle(4).lsrc(1) := (VECTOR_TMP_REG_LMUL + 3).U 837*582849ffSxiaofeibao-xjtu csBundle(4).ldest := (VECTOR_TMP_REG_LMUL + 4).U 838*582849ffSxiaofeibao-xjtu csBundle(4).vpu.fpu.isFoldTo1_4 := true.B 839*582849ffSxiaofeibao-xjtu csBundle(4).uopIdx := 4.U 840*582849ffSxiaofeibao-xjtu csBundle(5).lsrc(0) := (VECTOR_TMP_REG_LMUL + 4).U 841*582849ffSxiaofeibao-xjtu csBundle(5).lsrc(1) := (VECTOR_TMP_REG_LMUL + 4).U 842*582849ffSxiaofeibao-xjtu csBundle(5).ldest := (VECTOR_TMP_REG_LMUL + 5).U 843*582849ffSxiaofeibao-xjtu csBundle(5).vpu.fpu.isFoldTo1_8 := true.B 844*582849ffSxiaofeibao-xjtu csBundle(5).uopIdx := 5.U 845*582849ffSxiaofeibao-xjtu csBundle(6).lsrc(0) := src1 846*582849ffSxiaofeibao-xjtu csBundle(6).lsrc(1) := (VECTOR_TMP_REG_LMUL + 5).U 847*582849ffSxiaofeibao-xjtu csBundle(6).ldest := dest 848*582849ffSxiaofeibao-xjtu csBundle(6).uopIdx := 6.U 849*582849ffSxiaofeibao-xjtu } 850*582849ffSxiaofeibao-xjtu } 851*582849ffSxiaofeibao-xjtu when(vlmul === VLmul.m2) { 852*582849ffSxiaofeibao-xjtu csBundle(0).lsrc(0) := src2 + 1.U 853*582849ffSxiaofeibao-xjtu csBundle(0).lsrc(1) := src2 + 0.U 854*582849ffSxiaofeibao-xjtu csBundle(0).ldest := (VECTOR_TMP_REG_LMUL + 0).U 855*582849ffSxiaofeibao-xjtu csBundle(0).uopIdx := 0.U 856*582849ffSxiaofeibao-xjtu when(vsew === VSew.e64) { 857*582849ffSxiaofeibao-xjtu csBundle(1).lsrc(0) := (VECTOR_TMP_REG_LMUL + 0).U 858*582849ffSxiaofeibao-xjtu csBundle(1).lsrc(1) := (VECTOR_TMP_REG_LMUL + 0).U 859*582849ffSxiaofeibao-xjtu csBundle(1).ldest := (VECTOR_TMP_REG_LMUL + 1).U 860*582849ffSxiaofeibao-xjtu csBundle(1).vpu.fpu.isFoldTo1_2 := true.B 861*582849ffSxiaofeibao-xjtu csBundle(1).uopIdx := 1.U 862*582849ffSxiaofeibao-xjtu csBundle(2).lsrc(0) := src1 863*582849ffSxiaofeibao-xjtu csBundle(2).lsrc(1) := (VECTOR_TMP_REG_LMUL + 1).U 864*582849ffSxiaofeibao-xjtu csBundle(2).ldest := dest 865*582849ffSxiaofeibao-xjtu csBundle(2).uopIdx := 2.U 866*582849ffSxiaofeibao-xjtu } 867*582849ffSxiaofeibao-xjtu when(vsew === VSew.e32) { 868*582849ffSxiaofeibao-xjtu csBundle(1).lsrc(0) := (VECTOR_TMP_REG_LMUL + 0).U 869*582849ffSxiaofeibao-xjtu csBundle(1).lsrc(1) := (VECTOR_TMP_REG_LMUL + 0).U 870*582849ffSxiaofeibao-xjtu csBundle(1).ldest := (VECTOR_TMP_REG_LMUL + 1).U 871*582849ffSxiaofeibao-xjtu csBundle(1).vpu.fpu.isFoldTo1_2 := true.B 872*582849ffSxiaofeibao-xjtu csBundle(1).uopIdx := 1.U 873*582849ffSxiaofeibao-xjtu csBundle(2).lsrc(0) := (VECTOR_TMP_REG_LMUL + 1).U 874*582849ffSxiaofeibao-xjtu csBundle(2).lsrc(1) := (VECTOR_TMP_REG_LMUL + 1).U 875*582849ffSxiaofeibao-xjtu csBundle(2).ldest := (VECTOR_TMP_REG_LMUL + 2).U 876*582849ffSxiaofeibao-xjtu csBundle(2).vpu.fpu.isFoldTo1_4 := true.B 877*582849ffSxiaofeibao-xjtu csBundle(2).uopIdx := 2.U 878*582849ffSxiaofeibao-xjtu csBundle(3).lsrc(0) := src1 879*582849ffSxiaofeibao-xjtu csBundle(3).lsrc(1) := (VECTOR_TMP_REG_LMUL + 2).U 880*582849ffSxiaofeibao-xjtu csBundle(3).ldest := dest 881*582849ffSxiaofeibao-xjtu csBundle(3).uopIdx := 3.U 882*582849ffSxiaofeibao-xjtu } 883*582849ffSxiaofeibao-xjtu when(vsew === VSew.e16) { 884*582849ffSxiaofeibao-xjtu csBundle(1).lsrc(0) := (VECTOR_TMP_REG_LMUL + 0).U 885*582849ffSxiaofeibao-xjtu csBundle(1).lsrc(1) := (VECTOR_TMP_REG_LMUL + 0).U 886*582849ffSxiaofeibao-xjtu csBundle(1).ldest := (VECTOR_TMP_REG_LMUL + 1).U 887*582849ffSxiaofeibao-xjtu csBundle(1).vpu.fpu.isFoldTo1_2 := true.B 888*582849ffSxiaofeibao-xjtu csBundle(1).uopIdx := 1.U 889*582849ffSxiaofeibao-xjtu csBundle(2).lsrc(0) := (VECTOR_TMP_REG_LMUL + 1).U 890*582849ffSxiaofeibao-xjtu csBundle(2).lsrc(1) := (VECTOR_TMP_REG_LMUL + 1).U 891*582849ffSxiaofeibao-xjtu csBundle(2).ldest := (VECTOR_TMP_REG_LMUL + 2).U 892*582849ffSxiaofeibao-xjtu csBundle(2).vpu.fpu.isFoldTo1_4 := true.B 893*582849ffSxiaofeibao-xjtu csBundle(2).uopIdx := 2.U 894*582849ffSxiaofeibao-xjtu csBundle(3).lsrc(0) := (VECTOR_TMP_REG_LMUL + 2).U 895*582849ffSxiaofeibao-xjtu csBundle(3).lsrc(1) := (VECTOR_TMP_REG_LMUL + 2).U 896*582849ffSxiaofeibao-xjtu csBundle(3).ldest := (VECTOR_TMP_REG_LMUL + 3).U 897*582849ffSxiaofeibao-xjtu csBundle(3).vpu.fpu.isFoldTo1_8 := true.B 898*582849ffSxiaofeibao-xjtu csBundle(3).uopIdx := 3.U 899*582849ffSxiaofeibao-xjtu csBundle(4).lsrc(0) := src1 900*582849ffSxiaofeibao-xjtu csBundle(4).lsrc(1) := (VECTOR_TMP_REG_LMUL + 3).U 901*582849ffSxiaofeibao-xjtu csBundle(4).ldest := dest 902*582849ffSxiaofeibao-xjtu csBundle(4).uopIdx := 4.U 903*582849ffSxiaofeibao-xjtu } 904*582849ffSxiaofeibao-xjtu } 905*582849ffSxiaofeibao-xjtu when(vlmul === VLmul.m1) { 906*582849ffSxiaofeibao-xjtu when(vsew === VSew.e64) { 907*582849ffSxiaofeibao-xjtu csBundle(0).lsrc(0) := src2 908*582849ffSxiaofeibao-xjtu csBundle(0).lsrc(1) := src2 909*582849ffSxiaofeibao-xjtu csBundle(0).ldest := (VECTOR_TMP_REG_LMUL + 0).U 910*582849ffSxiaofeibao-xjtu csBundle(0).vpu.fpu.isFoldTo1_2 := true.B 911*582849ffSxiaofeibao-xjtu csBundle(0).uopIdx := 0.U 912*582849ffSxiaofeibao-xjtu csBundle(1).lsrc(0) := src1 913*582849ffSxiaofeibao-xjtu csBundle(1).lsrc(1) := (VECTOR_TMP_REG_LMUL + 0).U 914*582849ffSxiaofeibao-xjtu csBundle(1).ldest := dest 915*582849ffSxiaofeibao-xjtu csBundle(1).uopIdx := 1.U 916*582849ffSxiaofeibao-xjtu } 917*582849ffSxiaofeibao-xjtu when(vsew === VSew.e32) { 918*582849ffSxiaofeibao-xjtu csBundle(0).lsrc(0) := src2 919*582849ffSxiaofeibao-xjtu csBundle(0).lsrc(1) := src2 920*582849ffSxiaofeibao-xjtu csBundle(0).ldest := (VECTOR_TMP_REG_LMUL + 0).U 921*582849ffSxiaofeibao-xjtu csBundle(0).vpu.fpu.isFoldTo1_2 := true.B 922*582849ffSxiaofeibao-xjtu csBundle(0).uopIdx := 0.U 923*582849ffSxiaofeibao-xjtu csBundle(1).lsrc(0) := (VECTOR_TMP_REG_LMUL + 0).U 924*582849ffSxiaofeibao-xjtu csBundle(1).lsrc(1) := (VECTOR_TMP_REG_LMUL + 0).U 925*582849ffSxiaofeibao-xjtu csBundle(1).ldest := (VECTOR_TMP_REG_LMUL + 1).U 926*582849ffSxiaofeibao-xjtu csBundle(1).vpu.fpu.isFoldTo1_4 := true.B 927*582849ffSxiaofeibao-xjtu csBundle(1).uopIdx := 1.U 928*582849ffSxiaofeibao-xjtu csBundle(2).lsrc(0) := src1 929*582849ffSxiaofeibao-xjtu csBundle(2).lsrc(1) := (VECTOR_TMP_REG_LMUL + 1).U 930*582849ffSxiaofeibao-xjtu csBundle(2).ldest := dest 931*582849ffSxiaofeibao-xjtu csBundle(2).uopIdx := 2.U 932*582849ffSxiaofeibao-xjtu } 933*582849ffSxiaofeibao-xjtu when(vsew === VSew.e16) { 934*582849ffSxiaofeibao-xjtu csBundle(0).lsrc(0) := src2 935*582849ffSxiaofeibao-xjtu csBundle(0).lsrc(1) := src2 936*582849ffSxiaofeibao-xjtu csBundle(0).ldest := (VECTOR_TMP_REG_LMUL + 0).U 937*582849ffSxiaofeibao-xjtu csBundle(0).vpu.fpu.isFoldTo1_2 := true.B 938*582849ffSxiaofeibao-xjtu csBundle(0).uopIdx := 0.U 939*582849ffSxiaofeibao-xjtu csBundle(1).lsrc(0) := (VECTOR_TMP_REG_LMUL + 0).U 940*582849ffSxiaofeibao-xjtu csBundle(1).lsrc(1) := (VECTOR_TMP_REG_LMUL + 0).U 941*582849ffSxiaofeibao-xjtu csBundle(1).ldest := (VECTOR_TMP_REG_LMUL + 1).U 942*582849ffSxiaofeibao-xjtu csBundle(1).vpu.fpu.isFoldTo1_4 := true.B 943*582849ffSxiaofeibao-xjtu csBundle(1).uopIdx := 1.U 944*582849ffSxiaofeibao-xjtu csBundle(2).lsrc(0) := (VECTOR_TMP_REG_LMUL + 1).U 945*582849ffSxiaofeibao-xjtu csBundle(2).lsrc(1) := (VECTOR_TMP_REG_LMUL + 1).U 946*582849ffSxiaofeibao-xjtu csBundle(2).ldest := (VECTOR_TMP_REG_LMUL + 2).U 947*582849ffSxiaofeibao-xjtu csBundle(2).vpu.fpu.isFoldTo1_8 := true.B 948*582849ffSxiaofeibao-xjtu csBundle(2).uopIdx := 2.U 949*582849ffSxiaofeibao-xjtu csBundle(3).lsrc(0) := src1 950*582849ffSxiaofeibao-xjtu csBundle(3).lsrc(1) := (VECTOR_TMP_REG_LMUL + 2).U 951*582849ffSxiaofeibao-xjtu csBundle(3).ldest := dest 952*582849ffSxiaofeibao-xjtu csBundle(3).uopIdx := 3.U 953*582849ffSxiaofeibao-xjtu } 954*582849ffSxiaofeibao-xjtu } 955*582849ffSxiaofeibao-xjtu when(vlmul === VLmul.mf2) { 956*582849ffSxiaofeibao-xjtu when(vsew === VSew.e32) { 957*582849ffSxiaofeibao-xjtu csBundle(0).lsrc(0) := src2 958*582849ffSxiaofeibao-xjtu csBundle(0).lsrc(1) := src2 959*582849ffSxiaofeibao-xjtu csBundle(0).ldest := (VECTOR_TMP_REG_LMUL + 0).U 960*582849ffSxiaofeibao-xjtu csBundle(0).vpu.fpu.isFoldTo1_4 := true.B 961*582849ffSxiaofeibao-xjtu csBundle(0).uopIdx := 0.U 962*582849ffSxiaofeibao-xjtu csBundle(1).lsrc(0) := src1 963*582849ffSxiaofeibao-xjtu csBundle(1).lsrc(1) := (VECTOR_TMP_REG_LMUL + 0).U 964*582849ffSxiaofeibao-xjtu csBundle(1).ldest := dest 965*582849ffSxiaofeibao-xjtu csBundle(1).uopIdx := 1.U 966*582849ffSxiaofeibao-xjtu } 967*582849ffSxiaofeibao-xjtu when(vsew === VSew.e16) { 968*582849ffSxiaofeibao-xjtu csBundle(0).lsrc(0) := src2 969*582849ffSxiaofeibao-xjtu csBundle(0).lsrc(1) := src2 970*582849ffSxiaofeibao-xjtu csBundle(0).ldest := (VECTOR_TMP_REG_LMUL + 0).U 971*582849ffSxiaofeibao-xjtu csBundle(0).vpu.fpu.isFoldTo1_4 := true.B 972*582849ffSxiaofeibao-xjtu csBundle(0).uopIdx := 0.U 973*582849ffSxiaofeibao-xjtu csBundle(1).lsrc(0) := (VECTOR_TMP_REG_LMUL + 0).U 974*582849ffSxiaofeibao-xjtu csBundle(1).lsrc(1) := (VECTOR_TMP_REG_LMUL + 0).U 975*582849ffSxiaofeibao-xjtu csBundle(1).ldest := (VECTOR_TMP_REG_LMUL + 1).U 976*582849ffSxiaofeibao-xjtu csBundle(1).vpu.fpu.isFoldTo1_8 := true.B 977*582849ffSxiaofeibao-xjtu csBundle(1).uopIdx := 1.U 978*582849ffSxiaofeibao-xjtu csBundle(2).lsrc(0) := src1 979*582849ffSxiaofeibao-xjtu csBundle(2).lsrc(1) := (VECTOR_TMP_REG_LMUL + 1).U 980*582849ffSxiaofeibao-xjtu csBundle(2).ldest := dest 981*582849ffSxiaofeibao-xjtu csBundle(2).uopIdx := 2.U 982*582849ffSxiaofeibao-xjtu } 983*582849ffSxiaofeibao-xjtu } 984*582849ffSxiaofeibao-xjtu when(vlmul === VLmul.mf4) { 985*582849ffSxiaofeibao-xjtu when(vsew === VSew.e16) { 986*582849ffSxiaofeibao-xjtu csBundle(0).lsrc(0) := src2 987*582849ffSxiaofeibao-xjtu csBundle(0).lsrc(1) := src2 988*582849ffSxiaofeibao-xjtu csBundle(0).ldest := (VECTOR_TMP_REG_LMUL + 0).U 989*582849ffSxiaofeibao-xjtu csBundle(0).vpu.fpu.isFoldTo1_8 := true.B 990*582849ffSxiaofeibao-xjtu csBundle(0).uopIdx := 0.U 991*582849ffSxiaofeibao-xjtu csBundle(1).lsrc(0) := src1 992*582849ffSxiaofeibao-xjtu csBundle(1).lsrc(1) := (VECTOR_TMP_REG_LMUL + 0).U 993*582849ffSxiaofeibao-xjtu csBundle(1).ldest := dest 994*582849ffSxiaofeibao-xjtu csBundle(1).uopIdx := 1.U 995*582849ffSxiaofeibao-xjtu } 996*582849ffSxiaofeibao-xjtu } 997*582849ffSxiaofeibao-xjtu } 998d91483a6Sfdy 99917ec87f2SXuan Hu is(UopSplitType.VEC_SLIDEUP) { 1000d91483a6Sfdy // FMV.D.X 1001d91483a6Sfdy csBundle(0).srcType(0) := SrcType.reg 1002d91483a6Sfdy csBundle(0).srcType(1) := SrcType.imm 1003d91483a6Sfdy csBundle(0).lsrc(1) := 0.U 1004d91483a6Sfdy csBundle(0).ldest := FP_TMP_REG_MV.U 1005d91483a6Sfdy csBundle(0).fuType := FuType.i2f.U 1006d91483a6Sfdy csBundle(0).rfWen := false.B 1007d91483a6Sfdy csBundle(0).fpWen := true.B 1008d91483a6Sfdy csBundle(0).vecWen := false.B 1009d91483a6Sfdy csBundle(0).fpu.isAddSub := false.B 1010d91483a6Sfdy csBundle(0).fpu.typeTagIn := FPU.D 1011d91483a6Sfdy csBundle(0).fpu.typeTagOut := FPU.D 1012d91483a6Sfdy csBundle(0).fpu.fromInt := true.B 1013d91483a6Sfdy csBundle(0).fpu.wflags := false.B 1014d91483a6Sfdy csBundle(0).fpu.fpWen := true.B 1015d91483a6Sfdy csBundle(0).fpu.div := false.B 1016d91483a6Sfdy csBundle(0).fpu.sqrt := false.B 1017d91483a6Sfdy csBundle(0).fpu.fcvt := false.B 1018d91483a6Sfdy // LMUL 1019d91483a6Sfdy for (i <- 0 until MAX_VLMUL) 1020d91483a6Sfdy for (j <- 0 to i) { 10214ee69032SzhanglyGit val old_vd = if (j == 0) { 10224ee69032SzhanglyGit dest + i.U 10234ee69032SzhanglyGit } else (VECTOR_TMP_REG_LMUL + j - 1).U 10244ee69032SzhanglyGit val vd = if (j == i) { 10254ee69032SzhanglyGit dest + i.U 10264ee69032SzhanglyGit } else (VECTOR_TMP_REG_LMUL + j).U 1027d91483a6Sfdy csBundle(i * (i + 1) / 2 + j + 1).srcType(0) := SrcType.fp 1028d91483a6Sfdy csBundle(i * (i + 1) / 2 + j + 1).lsrc(0) := FP_TMP_REG_MV.U 1029d91483a6Sfdy csBundle(i * (i + 1) / 2 + j + 1).lsrc(1) := src2 + j.U 1030d91483a6Sfdy csBundle(i * (i + 1) / 2 + j + 1).lsrc(2) := old_vd 1031d91483a6Sfdy csBundle(i * (i + 1) / 2 + j + 1).ldest := vd 1032d91483a6Sfdy csBundle(i * (i + 1) / 2 + j + 1).uopIdx := (i * (i + 1) / 2 + j).U 1033d91483a6Sfdy } 1034d91483a6Sfdy } 1035d91483a6Sfdy 103617ec87f2SXuan Hu is(UopSplitType.VEC_ISLIDEUP) { 1037d91483a6Sfdy // LMUL 1038d91483a6Sfdy for (i <- 0 until MAX_VLMUL) 1039d91483a6Sfdy for (j <- 0 to i) { 10404ee69032SzhanglyGit val old_vd = if (j == 0) { 10414ee69032SzhanglyGit dest + i.U 10424ee69032SzhanglyGit } else (VECTOR_TMP_REG_LMUL + j - 1).U 10434ee69032SzhanglyGit val vd = if (j == i) { 10444ee69032SzhanglyGit dest + i.U 10454ee69032SzhanglyGit } else (VECTOR_TMP_REG_LMUL + j).U 1046d91483a6Sfdy csBundle(i * (i + 1) / 2 + j).lsrc(1) := src2 + j.U 1047d91483a6Sfdy csBundle(i * (i + 1) / 2 + j).lsrc(2) := old_vd 1048d91483a6Sfdy csBundle(i * (i + 1) / 2 + j).ldest := vd 1049d91483a6Sfdy csBundle(i * (i + 1) / 2 + j).uopIdx := (i * (i + 1) / 2 + j).U 1050d91483a6Sfdy } 1051d91483a6Sfdy } 1052d91483a6Sfdy 105317ec87f2SXuan Hu is(UopSplitType.VEC_SLIDEDOWN) { 1054d91483a6Sfdy // FMV.D.X 1055d91483a6Sfdy csBundle(0).srcType(0) := SrcType.reg 1056d91483a6Sfdy csBundle(0).srcType(1) := SrcType.imm 1057d91483a6Sfdy csBundle(0).lsrc(1) := 0.U 1058d91483a6Sfdy csBundle(0).ldest := FP_TMP_REG_MV.U 1059d91483a6Sfdy csBundle(0).fuType := FuType.i2f.U 1060d91483a6Sfdy csBundle(0).rfWen := false.B 1061d91483a6Sfdy csBundle(0).fpWen := true.B 1062d91483a6Sfdy csBundle(0).vecWen := false.B 1063d91483a6Sfdy csBundle(0).fpu.isAddSub := false.B 1064d91483a6Sfdy csBundle(0).fpu.typeTagIn := FPU.D 1065d91483a6Sfdy csBundle(0).fpu.typeTagOut := FPU.D 1066d91483a6Sfdy csBundle(0).fpu.fromInt := true.B 1067d91483a6Sfdy csBundle(0).fpu.wflags := false.B 1068d91483a6Sfdy csBundle(0).fpu.fpWen := true.B 1069d91483a6Sfdy csBundle(0).fpu.div := false.B 1070d91483a6Sfdy csBundle(0).fpu.sqrt := false.B 1071d91483a6Sfdy csBundle(0).fpu.fcvt := false.B 1072d91483a6Sfdy // LMUL 1073d91483a6Sfdy for (i <- 0 until MAX_VLMUL) 1074d91483a6Sfdy for (j <- (0 to i).reverse) { 1075d91483a6Sfdy when(i.U < lmul) { 10764ee69032SzhanglyGit val old_vd = if (j == 0) { 10774ee69032SzhanglyGit dest + lmul - 1.U - i.U 10784ee69032SzhanglyGit } else (VECTOR_TMP_REG_LMUL + j - 1).U 10794ee69032SzhanglyGit val vd = if (j == i) { 10804ee69032SzhanglyGit dest + lmul - 1.U - i.U 10814ee69032SzhanglyGit } else (VECTOR_TMP_REG_LMUL + j).U 1082d91483a6Sfdy csBundle(numOfUop - (i * (i + 1) / 2 + i - j + 1).U).srcType(0) := SrcType.fp 1083d91483a6Sfdy csBundle(numOfUop - (i * (i + 1) / 2 + i - j + 1).U).lsrc(0) := FP_TMP_REG_MV.U 1084d91483a6Sfdy csBundle(numOfUop - (i * (i + 1) / 2 + i - j + 1).U).lsrc(1) := src2 + lmul - 1.U - j.U 1085d91483a6Sfdy csBundle(numOfUop - (i * (i + 1) / 2 + i - j + 1).U).lsrc(2) := old_vd 1086d91483a6Sfdy csBundle(numOfUop - (i * (i + 1) / 2 + i - j + 1).U).ldest := vd 1087d91483a6Sfdy csBundle(numOfUop - (i * (i + 1) / 2 + i - j + 1).U).uopIdx := numOfUop - (i * (i + 1) / 2 + i - j + 2).U 1088d91483a6Sfdy } 1089d91483a6Sfdy } 1090d91483a6Sfdy } 1091d91483a6Sfdy 109217ec87f2SXuan Hu is(UopSplitType.VEC_ISLIDEDOWN) { 1093d91483a6Sfdy // LMUL 1094d91483a6Sfdy for (i <- 0 until MAX_VLMUL) 1095d91483a6Sfdy for (j <- (0 to i).reverse) { 1096d91483a6Sfdy when(i.U < lmul) { 10974ee69032SzhanglyGit val old_vd = if (j == 0) { 10984ee69032SzhanglyGit dest + lmul - 1.U - i.U 10994ee69032SzhanglyGit } else (VECTOR_TMP_REG_LMUL + j - 1).U 11004ee69032SzhanglyGit val vd = if (j == i) { 11014ee69032SzhanglyGit dest + lmul - 1.U - i.U 11024ee69032SzhanglyGit } else (VECTOR_TMP_REG_LMUL + j).U 1103d91483a6Sfdy csBundle(numOfUop - (i * (i + 1) / 2 + i - j + 1).U).lsrc(1) := src2 + lmul - 1.U - j.U 1104d91483a6Sfdy csBundle(numOfUop - (i * (i + 1) / 2 + i - j + 1).U).lsrc(2) := old_vd 1105d91483a6Sfdy csBundle(numOfUop - (i * (i + 1) / 2 + i - j + 1).U).ldest := vd 1106d91483a6Sfdy csBundle(numOfUop - (i * (i + 1) / 2 + i - j + 1).U).uopIdx := numOfUop - (i * (i + 1) / 2 + i - j + 1).U 1107d91483a6Sfdy } 1108d91483a6Sfdy } 1109d91483a6Sfdy } 1110d91483a6Sfdy 111117ec87f2SXuan Hu is(UopSplitType.VEC_M0X) { 1112d91483a6Sfdy // LMUL 1113d91483a6Sfdy for (i <- 0 until MAX_VLMUL) { 1114d91483a6Sfdy val srcType0 = if (i == 0) SrcType.DC else SrcType.vp 1115d91483a6Sfdy val ldest = (VECTOR_TMP_REG_LMUL + i).U 1116d91483a6Sfdy csBundle(i).srcType(0) := srcType0 1117d91483a6Sfdy csBundle(i).srcType(1) := SrcType.vp 1118d91483a6Sfdy csBundle(i).rfWen := false.B 1119d91483a6Sfdy csBundle(i).vecWen := true.B 1120d91483a6Sfdy csBundle(i).lsrc(0) := (VECTOR_TMP_REG_LMUL + i - 1).U 1121d91483a6Sfdy csBundle(i).lsrc(1) := src2 1122d91483a6Sfdy // csBundle(i).lsrc(2) := dest + i.U DontCare 1123d91483a6Sfdy csBundle(i).ldest := ldest 1124d91483a6Sfdy csBundle(i).uopIdx := i.U 1125d91483a6Sfdy } 1126d91483a6Sfdy csBundle(lmul - 1.U).vecWen := false.B 1127d91483a6Sfdy csBundle(lmul - 1.U).fpWen := true.B 1128d91483a6Sfdy csBundle(lmul - 1.U).ldest := FP_TMP_REG_MV.U 1129d91483a6Sfdy // FMV_X_D 1130d91483a6Sfdy csBundle(lmul).srcType(0) := SrcType.fp 1131d91483a6Sfdy csBundle(lmul).srcType(1) := SrcType.imm 1132d91483a6Sfdy csBundle(lmul).lsrc(0) := FP_TMP_REG_MV.U 1133d91483a6Sfdy csBundle(lmul).lsrc(1) := 0.U 1134d91483a6Sfdy csBundle(lmul).ldest := dest 1135d91483a6Sfdy csBundle(lmul).fuType := FuType.fmisc.U 1136d91483a6Sfdy csBundle(lmul).rfWen := true.B 1137d91483a6Sfdy csBundle(lmul).fpWen := false.B 1138d91483a6Sfdy csBundle(lmul).vecWen := false.B 1139d91483a6Sfdy csBundle(lmul).fpu.isAddSub := false.B 1140d91483a6Sfdy csBundle(lmul).fpu.typeTagIn := FPU.D 1141d91483a6Sfdy csBundle(lmul).fpu.typeTagOut := FPU.D 1142d91483a6Sfdy csBundle(lmul).fpu.fromInt := false.B 1143d91483a6Sfdy csBundle(lmul).fpu.wflags := false.B 1144d91483a6Sfdy csBundle(lmul).fpu.fpWen := false.B 1145d91483a6Sfdy csBundle(lmul).fpu.div := false.B 1146d91483a6Sfdy csBundle(lmul).fpu.sqrt := false.B 1147d91483a6Sfdy csBundle(lmul).fpu.fcvt := false.B 1148d91483a6Sfdy } 1149d91483a6Sfdy 115017ec87f2SXuan Hu is(UopSplitType.VEC_MVV) { 1151d91483a6Sfdy // LMUL 1152d91483a6Sfdy for (i <- 0 until MAX_VLMUL) { 1153d91483a6Sfdy val srcType0 = if (i == 0) SrcType.DC else SrcType.vp 1154d91483a6Sfdy csBundle(i * 2 + 0).srcType(0) := srcType0 1155d91483a6Sfdy csBundle(i * 2 + 0).srcType(1) := SrcType.vp 1156d91483a6Sfdy csBundle(i * 2 + 0).lsrc(0) := (VECTOR_TMP_REG_LMUL + i - 1).U 1157d91483a6Sfdy csBundle(i * 2 + 0).lsrc(1) := src2 1158d91483a6Sfdy csBundle(i * 2 + 0).lsrc(2) := dest + i.U 1159d91483a6Sfdy csBundle(i * 2 + 0).ldest := dest + i.U 1160d91483a6Sfdy csBundle(i * 2 + 0).uopIdx := (i * 2 + 0).U 1161d91483a6Sfdy 1162d91483a6Sfdy csBundle(i * 2 + 1).srcType(0) := srcType0 1163d91483a6Sfdy csBundle(i * 2 + 1).srcType(1) := SrcType.vp 1164d91483a6Sfdy csBundle(i * 2 + 1).lsrc(0) := (VECTOR_TMP_REG_LMUL + i - 1).U 1165d91483a6Sfdy csBundle(i * 2 + 1).lsrc(1) := src2 1166d91483a6Sfdy // csBundle(i).lsrc(2) := dest + i.U DontCare 1167d91483a6Sfdy csBundle(i * 2 + 1).ldest := (VECTOR_TMP_REG_LMUL + i).U 1168d91483a6Sfdy csBundle(i * 2 + 1).uopIdx := (i * 2 + 1).U 1169d91483a6Sfdy } 1170d91483a6Sfdy } 1171d91483a6Sfdy 117217ec87f2SXuan Hu is(UopSplitType.VEC_M0X_VFIRST) { 1173d91483a6Sfdy // LMUL 1174d91483a6Sfdy csBundle(0).rfWen := false.B 1175d91483a6Sfdy csBundle(0).fpWen := true.B 1176d91483a6Sfdy csBundle(0).ldest := FP_TMP_REG_MV.U 1177d91483a6Sfdy // FMV_X_D 1178d91483a6Sfdy csBundle(1).srcType(0) := SrcType.fp 1179d91483a6Sfdy csBundle(1).srcType(1) := SrcType.imm 1180d91483a6Sfdy csBundle(1).lsrc(0) := FP_TMP_REG_MV.U 1181d91483a6Sfdy csBundle(1).lsrc(1) := 0.U 1182d91483a6Sfdy csBundle(1).ldest := dest 1183d91483a6Sfdy csBundle(1).fuType := FuType.fmisc.U 1184d91483a6Sfdy csBundle(1).rfWen := true.B 1185d91483a6Sfdy csBundle(1).fpWen := false.B 1186d91483a6Sfdy csBundle(1).vecWen := false.B 1187d91483a6Sfdy csBundle(1).fpu.isAddSub := false.B 1188d91483a6Sfdy csBundle(1).fpu.typeTagIn := FPU.D 1189d91483a6Sfdy csBundle(1).fpu.typeTagOut := FPU.D 1190d91483a6Sfdy csBundle(1).fpu.fromInt := false.B 1191d91483a6Sfdy csBundle(1).fpu.wflags := false.B 1192d91483a6Sfdy csBundle(1).fpu.fpWen := false.B 1193d91483a6Sfdy csBundle(1).fpu.div := false.B 1194d91483a6Sfdy csBundle(1).fpu.sqrt := false.B 1195d91483a6Sfdy csBundle(1).fpu.fcvt := false.B 1196d91483a6Sfdy } 1197189ec863SzhanglyGit is(UopSplitType.VEC_VWW) { 1198189ec863SzhanglyGit for (i <- 0 until MAX_VLMUL*2) { 1199189ec863SzhanglyGit when(i.U < lmul){ 1200189ec863SzhanglyGit csBundle(i).srcType(2) := SrcType.DC 1201189ec863SzhanglyGit csBundle(i).lsrc(0) := src2 + i.U 1202189ec863SzhanglyGit csBundle(i).lsrc(1) := src2 + i.U 1203189ec863SzhanglyGit // csBundle(i).lsrc(2) := dest + (2 * i).U 1204189ec863SzhanglyGit csBundle(i).ldest := (VECTOR_TMP_REG_LMUL + i).U 1205189ec863SzhanglyGit csBundle(i).uopIdx := i.U 1206189ec863SzhanglyGit } otherwise { 1207189ec863SzhanglyGit csBundle(i).srcType(2) := SrcType.DC 1208189ec863SzhanglyGit csBundle(i).lsrc(0) := VECTOR_TMP_REG_LMUL.U + Cat((i.U-lmul),0.U(1.W)) + 1.U 1209189ec863SzhanglyGit csBundle(i).lsrc(1) := VECTOR_TMP_REG_LMUL.U + Cat((i.U-lmul),0.U(1.W)) 1210189ec863SzhanglyGit // csBundle(i).lsrc(2) := dest + (2 * i).U 1211189ec863SzhanglyGit csBundle(i).ldest := (VECTOR_TMP_REG_LMUL + i).U 1212189ec863SzhanglyGit csBundle(i).uopIdx := i.U 1213189ec863SzhanglyGit } 1214189ec863SzhanglyGit csBundle(numOfUop-1.U).srcType(2) := SrcType.vp 1215189ec863SzhanglyGit csBundle(numOfUop-1.U).lsrc(0) := src1 1216189ec863SzhanglyGit csBundle(numOfUop-1.U).lsrc(2) := dest 1217189ec863SzhanglyGit csBundle(numOfUop-1.U).ldest := dest 1218189ec863SzhanglyGit } 1219189ec863SzhanglyGit } 1220189ec863SzhanglyGit is(UopSplitType.VEC_RGATHER) { 1221189ec863SzhanglyGit def genCsBundle_VEC_RGATHER(len:Int): Unit ={ 1222189ec863SzhanglyGit for (i <- 0 until len) 1223189ec863SzhanglyGit for (j <- 0 until len) { 1224189ec863SzhanglyGit // csBundle(i * len + j).srcType(0) := SrcType.vp // SrcType.imm 1225189ec863SzhanglyGit // csBundle(i * len + j).srcType(1) := SrcType.vp 1226189ec863SzhanglyGit // csBundle(i * len + j).srcType(2) := SrcType.vp 1227189ec863SzhanglyGit csBundle(i * len + j).lsrc(0) := src1 + i.U 1228189ec863SzhanglyGit csBundle(i * len + j).lsrc(1) := src2 + j.U 1229189ec863SzhanglyGit val vd_old = if(j==0) (dest + i.U) else (VECTOR_TMP_REG_LMUL + j - 1).U 1230189ec863SzhanglyGit csBundle(i * len + j).lsrc(2) := vd_old 1231189ec863SzhanglyGit val vd = if(j==len-1) (dest + i.U) else (VECTOR_TMP_REG_LMUL + j).U 1232189ec863SzhanglyGit csBundle(i * len + j).ldest := vd 1233189ec863SzhanglyGit csBundle(i * len + j).uopIdx := (i * len + j).U 1234189ec863SzhanglyGit } 1235189ec863SzhanglyGit } 1236189ec863SzhanglyGit switch(simple.io.enq.vtype.vlmul) { 1237189ec863SzhanglyGit is("b001".U ){ 1238189ec863SzhanglyGit genCsBundle_VEC_RGATHER(2) 1239189ec863SzhanglyGit } 1240189ec863SzhanglyGit is("b010".U ){ 1241189ec863SzhanglyGit genCsBundle_VEC_RGATHER(4) 1242189ec863SzhanglyGit } 1243189ec863SzhanglyGit is("b011".U ){ 1244189ec863SzhanglyGit genCsBundle_VEC_RGATHER(8) 1245189ec863SzhanglyGit } 1246189ec863SzhanglyGit } 1247189ec863SzhanglyGit } 1248189ec863SzhanglyGit is(UopSplitType.VEC_RGATHER_VX) { 1249189ec863SzhanglyGit def genCsBundle_RGATHER_VX(len:Int): Unit ={ 1250189ec863SzhanglyGit for (i <- 0 until len) 1251189ec863SzhanglyGit for (j <- 0 until len) { 1252189ec863SzhanglyGit csBundle(i * len + j + 1).srcType(0) := SrcType.fp 1253189ec863SzhanglyGit // csBundle(i * len + j + 1).srcType(1) := SrcType.vp 1254189ec863SzhanglyGit // csBundle(i * len + j + 1).srcType(2) := SrcType.vp 1255189ec863SzhanglyGit csBundle(i * len + j + 1).lsrc(0) := FP_TMP_REG_MV.U 1256189ec863SzhanglyGit csBundle(i * len + j + 1).lsrc(1) := src2 + j.U 1257189ec863SzhanglyGit val vd_old = if(j==0) (dest + i.U) else (VECTOR_TMP_REG_LMUL + j - 1).U 1258189ec863SzhanglyGit csBundle(i * len + j + 1).lsrc(2) := vd_old 1259189ec863SzhanglyGit val vd = if(j==len-1) (dest + i.U) else (VECTOR_TMP_REG_LMUL + j).U 1260189ec863SzhanglyGit csBundle(i * len + j + 1).ldest := vd 1261189ec863SzhanglyGit csBundle(i * len + j + 1).uopIdx := (i * len + j).U 1262189ec863SzhanglyGit } 1263189ec863SzhanglyGit } 1264189ec863SzhanglyGit // FMV.D.X 1265189ec863SzhanglyGit csBundle(0).srcType(0) := SrcType.reg 1266189ec863SzhanglyGit csBundle(0).srcType(1) := SrcType.imm 1267189ec863SzhanglyGit csBundle(0).lsrc(1) := 0.U 1268189ec863SzhanglyGit csBundle(0).ldest := FP_TMP_REG_MV.U 1269189ec863SzhanglyGit csBundle(0).fuType := FuType.i2f.U 1270189ec863SzhanglyGit csBundle(0).rfWen := false.B 1271189ec863SzhanglyGit csBundle(0).fpWen := true.B 1272189ec863SzhanglyGit csBundle(0).vecWen := false.B 1273189ec863SzhanglyGit csBundle(0).fpu.isAddSub := false.B 1274189ec863SzhanglyGit csBundle(0).fpu.typeTagIn := FPU.D 1275189ec863SzhanglyGit csBundle(0).fpu.typeTagOut := FPU.D 1276189ec863SzhanglyGit csBundle(0).fpu.fromInt := true.B 1277189ec863SzhanglyGit csBundle(0).fpu.wflags := false.B 1278189ec863SzhanglyGit csBundle(0).fpu.fpWen := true.B 1279189ec863SzhanglyGit csBundle(0).fpu.div := false.B 1280189ec863SzhanglyGit csBundle(0).fpu.sqrt := false.B 1281189ec863SzhanglyGit csBundle(0).fpu.fcvt := false.B 1282189ec863SzhanglyGit switch(simple.io.enq.vtype.vlmul) { 1283189ec863SzhanglyGit is("b000".U ){ 1284189ec863SzhanglyGit genCsBundle_RGATHER_VX(1) 1285189ec863SzhanglyGit } 1286189ec863SzhanglyGit is("b001".U ){ 1287189ec863SzhanglyGit genCsBundle_RGATHER_VX(2) 1288189ec863SzhanglyGit } 1289189ec863SzhanglyGit is("b010".U ){ 1290189ec863SzhanglyGit genCsBundle_RGATHER_VX(4) 1291189ec863SzhanglyGit } 1292189ec863SzhanglyGit is("b011".U ){ 1293189ec863SzhanglyGit genCsBundle_RGATHER_VX(8) 1294189ec863SzhanglyGit } 1295189ec863SzhanglyGit } 1296189ec863SzhanglyGit } 1297189ec863SzhanglyGit is(UopSplitType.VEC_RGATHEREI16) { 1298189ec863SzhanglyGit def genCsBundle_VEC_RGATHEREI16_SEW8(len:Int): Unit ={ 1299189ec863SzhanglyGit for (i <- 0 until len) 1300189ec863SzhanglyGit for (j <- 0 until len) { 1301189ec863SzhanglyGit val vd_old0 = if(j==0) (dest + i.U) else (VECTOR_TMP_REG_LMUL + j*2-1).U 1302189ec863SzhanglyGit val vd0 = (VECTOR_TMP_REG_LMUL + j*2 ).U 1303189ec863SzhanglyGit // csBundle(i * len + j).srcType(0) := SrcType.vp // SrcType.imm 1304189ec863SzhanglyGit // csBundle(i * len + j).srcType(1) := SrcType.vp 1305189ec863SzhanglyGit // csBundle(i * len + j).srcType(2) := SrcType.vp 1306189ec863SzhanglyGit csBundle((i * len + j)*2+0).lsrc(0) := src1 + (i*2+0).U 1307189ec863SzhanglyGit csBundle((i * len + j)*2+0).lsrc(1) := src2 + j.U 1308189ec863SzhanglyGit csBundle((i * len + j)*2+0).lsrc(2) := vd_old0 1309189ec863SzhanglyGit csBundle((i * len + j)*2+0).ldest := vd0 1310189ec863SzhanglyGit csBundle((i * len + j)*2+0).uopIdx := ((i * len + j)*2+0).U 1311189ec863SzhanglyGit val vd_old1 = (VECTOR_TMP_REG_LMUL + j*2).U 1312189ec863SzhanglyGit val vd1 = if(j==len-1) (dest + i.U) else (VECTOR_TMP_REG_LMUL + j*2+1 ).U 1313189ec863SzhanglyGit csBundle((i * len + j)*2+1).lsrc(0) := src1 + (i*2+1).U 1314189ec863SzhanglyGit csBundle((i * len + j)*2+1).lsrc(1) := src2 + j.U 1315189ec863SzhanglyGit csBundle((i * len + j)*2+1).lsrc(2) := vd_old1 1316189ec863SzhanglyGit csBundle((i * len + j)*2+1).ldest := vd1 1317189ec863SzhanglyGit csBundle((i * len + j)*2+1).uopIdx := ((i * len + j)*2+1).U 1318189ec863SzhanglyGit } 1319189ec863SzhanglyGit } 1320189ec863SzhanglyGit def genCsBundle_VEC_RGATHEREI16(len:Int): Unit ={ 1321189ec863SzhanglyGit for (i <- 0 until len) 1322189ec863SzhanglyGit for (j <- 0 until len) { 1323189ec863SzhanglyGit val vd_old = if(j==0) (dest + i.U) else (VECTOR_TMP_REG_LMUL + j-1).U 1324189ec863SzhanglyGit val vd = if(j==len-1) (dest + i.U) else (VECTOR_TMP_REG_LMUL + j).U 1325189ec863SzhanglyGit // csBundle(i * len + j).srcType(0) := SrcType.vp // SrcType.imm 1326189ec863SzhanglyGit // csBundle(i * len + j).srcType(1) := SrcType.vp 1327189ec863SzhanglyGit // csBundle(i * len + j).srcType(2) := SrcType.vp 1328189ec863SzhanglyGit csBundle(i * len + j).lsrc(0) := src1 + i.U 1329189ec863SzhanglyGit csBundle(i * len + j).lsrc(1) := src2 + j.U 1330189ec863SzhanglyGit csBundle(i * len + j).lsrc(2) := vd_old 1331189ec863SzhanglyGit csBundle(i * len + j).ldest := vd 1332189ec863SzhanglyGit csBundle(i * len + j).uopIdx := (i * len + j).U 1333189ec863SzhanglyGit } 1334189ec863SzhanglyGit } 1335189ec863SzhanglyGit switch(simple.io.enq.vtype.vlmul) { 1336189ec863SzhanglyGit is("b000".U ){ 1337189ec863SzhanglyGit when(!simple.io.enq.vtype.vsew.orR){ 1338189ec863SzhanglyGit genCsBundle_VEC_RGATHEREI16_SEW8(1) 1339189ec863SzhanglyGit } .otherwise{ 1340189ec863SzhanglyGit genCsBundle_VEC_RGATHEREI16(1) 1341189ec863SzhanglyGit } 1342189ec863SzhanglyGit } 1343189ec863SzhanglyGit is("b001".U) { 1344189ec863SzhanglyGit when(!simple.io.enq.vtype.vsew.orR) { 1345189ec863SzhanglyGit genCsBundle_VEC_RGATHEREI16_SEW8(2) 1346189ec863SzhanglyGit }.otherwise { 1347189ec863SzhanglyGit genCsBundle_VEC_RGATHEREI16(2) 1348189ec863SzhanglyGit } 1349189ec863SzhanglyGit } 1350189ec863SzhanglyGit is("b010".U) { 1351189ec863SzhanglyGit when(!simple.io.enq.vtype.vsew.orR) { 1352189ec863SzhanglyGit genCsBundle_VEC_RGATHEREI16_SEW8(4) 1353189ec863SzhanglyGit }.otherwise { 1354189ec863SzhanglyGit genCsBundle_VEC_RGATHEREI16(4) 1355189ec863SzhanglyGit } 1356189ec863SzhanglyGit } 1357189ec863SzhanglyGit is("b011".U) { 1358189ec863SzhanglyGit genCsBundle_VEC_RGATHEREI16(8) 1359189ec863SzhanglyGit } 1360189ec863SzhanglyGit } 1361189ec863SzhanglyGit } 1362189ec863SzhanglyGit is(UopSplitType.VEC_COMPRESS) { 1363189ec863SzhanglyGit def genCsBundle_VEC_COMPRESS(len:Int): Unit ={ 1364189ec863SzhanglyGit for (i <- 0 until len){ 1365189ec863SzhanglyGit val jlen = if (i == len-1) i+1 else i+2 1366189ec863SzhanglyGit for (j <- 0 until jlen) { 1367189ec863SzhanglyGit val vd_old = if(i==j) (dest + i.U) else (VECTOR_TMP_REG_LMUL + j + 1).U 1368189ec863SzhanglyGit val vd = if(i==len-1) (dest + j.U) else{ 1369189ec863SzhanglyGit if (j == i+1) VECTOR_TMP_REG_LMUL.U else (VECTOR_TMP_REG_LMUL + j + 1).U 1370189ec863SzhanglyGit } 1371189ec863SzhanglyGit val src23Type = if (j == i+1) DontCare else SrcType.vp 1372189ec863SzhanglyGit csBundle(i*(i+3)/2 + j).srcType(0) := SrcType.vp 1373189ec863SzhanglyGit csBundle(i*(i+3)/2 + j).srcType(1) := src23Type 1374189ec863SzhanglyGit csBundle(i*(i+3)/2 + j).srcType(2) := src23Type 1375189ec863SzhanglyGit csBundle(i*(i+3)/2 + j).lsrc(0) := src1 1376189ec863SzhanglyGit csBundle(i*(i+3)/2 + j).lsrc(1) := src2 + i.U 1377189ec863SzhanglyGit csBundle(i*(i+3)/2 + j).lsrc(2) := vd_old 1378189ec863SzhanglyGit // csBundle(i*(i+3)/2 + j).lsrc(3) := VECTOR_TMP_REG_LMUL.U 1379189ec863SzhanglyGit csBundle(i*(i+3)/2 + j).ldest := vd 1380189ec863SzhanglyGit csBundle(i*(i+3)/2 + j).uopIdx := (i*(i+3)/2 + j).U 1381189ec863SzhanglyGit } 1382189ec863SzhanglyGit } 1383189ec863SzhanglyGit } 1384189ec863SzhanglyGit switch(simple.io.enq.vtype.vlmul) { 1385189ec863SzhanglyGit is("b001".U ){ 1386189ec863SzhanglyGit genCsBundle_VEC_COMPRESS(2) 1387189ec863SzhanglyGit } 1388189ec863SzhanglyGit is("b010".U ){ 1389189ec863SzhanglyGit genCsBundle_VEC_COMPRESS(4) 1390189ec863SzhanglyGit } 1391189ec863SzhanglyGit is("b011".U ){ 1392189ec863SzhanglyGit genCsBundle_VEC_COMPRESS(8) 1393189ec863SzhanglyGit } 1394189ec863SzhanglyGit } 1395189ec863SzhanglyGit } 13964ee69032SzhanglyGit is(UopSplitType.VEC_US_LD) { 13974ee69032SzhanglyGit /* 13984ee69032SzhanglyGit FMV.D.X 13994ee69032SzhanglyGit */ 14004ee69032SzhanglyGit csBundle(0).srcType(0) := SrcType.reg 14014ee69032SzhanglyGit csBundle(0).srcType(1) := SrcType.imm 14024ee69032SzhanglyGit csBundle(0).lsrc(1) := 0.U 14034ee69032SzhanglyGit csBundle(0).ldest := FP_TMP_REG_MV.U 14044ee69032SzhanglyGit csBundle(0).fuType := FuType.i2f.U 14054ee69032SzhanglyGit csBundle(0).rfWen := false.B 14064ee69032SzhanglyGit csBundle(0).fpWen := true.B 14074ee69032SzhanglyGit csBundle(0).vecWen := false.B 14084ee69032SzhanglyGit csBundle(0).fpu.isAddSub := false.B 14094ee69032SzhanglyGit csBundle(0).fpu.typeTagIn := FPU.D 14104ee69032SzhanglyGit csBundle(0).fpu.typeTagOut := FPU.D 14114ee69032SzhanglyGit csBundle(0).fpu.fromInt := true.B 14124ee69032SzhanglyGit csBundle(0).fpu.wflags := false.B 14134ee69032SzhanglyGit csBundle(0).fpu.fpWen := true.B 14144ee69032SzhanglyGit csBundle(0).fpu.div := false.B 14154ee69032SzhanglyGit csBundle(0).fpu.sqrt := false.B 14164ee69032SzhanglyGit csBundle(0).fpu.fcvt := false.B 14174ee69032SzhanglyGit //LMUL 14184ee69032SzhanglyGit for (i <- 0 until MAX_VLMUL) { 14194ee69032SzhanglyGit csBundle(i + 1).srcType(0) := SrcType.fp 14204ee69032SzhanglyGit csBundle(i + 1).lsrc(0) := FP_TMP_REG_MV.U 14214ee69032SzhanglyGit csBundle(i + 1).ldest := dest + i.U 14224ee69032SzhanglyGit csBundle(i + 1).uopIdx := i.U 14234ee69032SzhanglyGit } 14244ee69032SzhanglyGit } 1425d91483a6Sfdy } 1426d91483a6Sfdy 1427d91483a6Sfdy //uops dispatch 1428189ec863SzhanglyGit val s_normal :: s_ext :: Nil = Enum(2) 1429189ec863SzhanglyGit val state = RegInit(s_normal) 1430189ec863SzhanglyGit val state_next = WireDefault(state) 1431d91483a6Sfdy val uopRes = RegInit(0.U) 1432d91483a6Sfdy 1433d91483a6Sfdy //readyFromRename Counter 1434d91483a6Sfdy val readyCounter = PriorityMuxDefault(io.readyFromRename.map(x => !x).zip((0 to (RenameWidth - 1)).map(_.U)), RenameWidth.U) 1435d91483a6Sfdy 1436189ec863SzhanglyGit switch(state) { 1437189ec863SzhanglyGit is(s_normal) { 1438189ec863SzhanglyGit state_next := Mux(io.validFromIBuf(0) && (numOfUop > readyCounter) && (readyCounter =/= 0.U), s_ext, s_normal) 1439d91483a6Sfdy } 1440189ec863SzhanglyGit is(s_ext) { 1441189ec863SzhanglyGit state_next := Mux(io.validFromIBuf(0) && (uopRes > readyCounter), s_ext, s_normal) 1442d91483a6Sfdy } 1443d91483a6Sfdy } 1444d91483a6Sfdy 1445189ec863SzhanglyGit state := state_next 1446189ec863SzhanglyGit 1447189ec863SzhanglyGit val uopRes0 = Mux(state === s_normal, numOfUop, uopRes) 1448189ec863SzhanglyGit val uopResJudge = Mux(state === s_normal, 1449d91483a6Sfdy io.validFromIBuf(0) && (readyCounter =/= 0.U) && (uopRes0 > readyCounter), 1450d91483a6Sfdy io.validFromIBuf(0) && (uopRes0 > readyCounter)) 1451d91483a6Sfdy uopRes := Mux(uopResJudge, uopRes0 - readyCounter, 0.U) 1452d91483a6Sfdy 1453d91483a6Sfdy for(i <- 0 until RenameWidth) { 1454d91483a6Sfdy decodedInsts(i) := MuxCase(csBundle(i), Seq( 1455189ec863SzhanglyGit (state === s_normal) -> csBundle(i), 1456189ec863SzhanglyGit (state === s_ext) -> Mux((i.U + numOfUop -uopRes) < maxUopSize.U, csBundle(i.U + numOfUop - uopRes), csBundle(maxUopSize - 1)) 1457d91483a6Sfdy )) 1458d91483a6Sfdy } 1459d91483a6Sfdy 1460d91483a6Sfdy 1461d91483a6Sfdy val validSimple = Wire(Vec(DecodeWidth - 1, Bool())) 1462d91483a6Sfdy validSimple.zip(io.validFromIBuf.drop(1).zip(io.isComplex)).map{ case (dst, (src1, src2)) => dst := src1 && !src2 } 1463d91483a6Sfdy val notInf = Wire(Vec(DecodeWidth - 1, Bool())) 1464d91483a6Sfdy notInf.zip(io.validFromIBuf.drop(1).zip(validSimple)).map{ case (dst, (src1, src2)) => dst := !src1 || src2 } 1465d91483a6Sfdy val notInfVec = Wire(Vec(DecodeWidth, Bool())) 1466d91483a6Sfdy notInfVec.drop(1).zip(0 until DecodeWidth - 1).map{ case (dst, i) => dst := Cat(notInf.take(i + 1)).andR} 1467d91483a6Sfdy notInfVec(0) := true.B 1468d91483a6Sfdy 1469d91483a6Sfdy complexNum := Mux(io.validFromIBuf(0) && readyCounter.orR , 1470d91483a6Sfdy Mux(uopRes0 > readyCounter, readyCounter, uopRes0), 1471d91483a6Sfdy 1.U) 1472d91483a6Sfdy validToRename.zipWithIndex.foreach{ 1473d91483a6Sfdy case(dst, i) => 1474d91483a6Sfdy dst := MuxCase(false.B, Seq( 1475d91483a6Sfdy (io.validFromIBuf(0) && uopRes0 > readyCounter ) -> Mux(readyCounter > i.U, true.B, false.B), 1476d91483a6Sfdy (io.validFromIBuf(0) && !(uopRes0 > readyCounter)) -> Mux(complexNum > i.U, true.B, validSimple(i.U - complexNum) && notInfVec(i.U - complexNum) && io.readyFromRename(i)), 1477d91483a6Sfdy )) 1478d91483a6Sfdy } 1479d91483a6Sfdy 1480d91483a6Sfdy readyToIBuf.zipWithIndex.foreach { 1481d91483a6Sfdy case (dst, i) => 1482d91483a6Sfdy dst := MuxCase(true.B, Seq( 1483d91483a6Sfdy (io.validFromIBuf(0) && uopRes0 > readyCounter) -> false.B, 1484d91483a6Sfdy (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)), 1485d91483a6Sfdy )) 1486d91483a6Sfdy } 1487d91483a6Sfdy 1488d91483a6Sfdy io.deq.decodedInsts := decodedInsts 1489189ec863SzhanglyGit io.deq.isVset := isVsetSimple 1490d91483a6Sfdy io.deq.complexNum := complexNum 1491d91483a6Sfdy io.deq.validToRename := validToRename 1492d91483a6Sfdy io.deq.readyToIBuf := readyToIBuf 1493d91483a6Sfdy 1494d91483a6Sfdy} 1495