///**************************************************************************************** // * Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences // * Copyright (c) 2020-2021 Peng Cheng Laboratory // * // * XiangShan is licensed under Mulan PSL v2. // * You can use this software according to the terms and conditions of the Mulan PSL v2. // * You may obtain a copy of Mulan PSL v2 at: // * http://license.coscl.org.cn/MulanPSL2 // * // * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, // * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, // * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. // * // * See the Mulan PSL v2 for more details. // **************************************************************************************** // */ // // //package xiangshan.backend.fu.vector // //import chipsalliance.rocketchip.config.Parameters //import chisel3._ //import utils._ //import yunsuan.vector.mac.VIMac //import yunsuan.VimacType //import xiangshan.{XSCoreParamsKey, FuType} // // // //class VIMacWrapper(implicit p: Parameters) extends VPUDataModule { // // needReverse := false.B // needClearMask := false.B // // // connect VIMac // val vImac = Module(new VIMac) // vImac.io.in.valid := io.in.valid // vImac.io.in.bits.opcode := VimacType.getOpcode(in.uop.ctrl.fuOpType).asTypeOf(vImac.io.in.bits.opcode) // vImac.io.in.bits.info.vm := in.uop.ctrl.vm // vImac.io.in.bits.info.ma := in.uop.ctrl.vconfig.vtype.vma // vImac.io.in.bits.info.ta := in.uop.ctrl.vconfig.vtype.vta // vImac.io.in.bits.info.vlmul := in.uop.ctrl.vconfig.vtype.vlmul // vImac.io.in.bits.info.vl := in.uop.ctrl.vconfig.vl // vImac.io.in.bits.info.vstart := vstart // TODO : // vImac.io.in.bits.info.uopIdx := in.uop.ctrl.uopIdx // vImac.io.in.bits.info.vxrm := vxrm // // val srcVdType = Wire(new Bundle{ // val srcType2 = UInt(4.W) // val srcType1 = UInt(4.W) // val vdType = UInt(4.W) // }) // srcVdType := VimacType.getSrcVdType(in.uop.ctrl.fuOpType, in.uop.ctrl.vconfig.vtype.vsew(1,0)).asTypeOf(srcVdType.cloneType) // vImac.io.in.bits.srcType(0) := srcVdType.srcType2 // vImac.io.in.bits.srcType(1) := srcVdType.srcType1 // vImac.io.in.bits.vdType := srcVdType.vdType // vImac.io.in.bits.vs1 := vs1 // vImac.io.in.bits.vs2 := vs2 // vImac.io.in.bits.old_vd := in.src(2) // vImac.io.in.bits.mask := mask // // // connect io // io.out.bits.data := vImac.io.out.bits.vd // vxsat := vImac.io.out.bits.vxsat // io.out.valid := vImac.io.out.valid //} // //class VIMacU(implicit p: Parameters) extends VPUSubModule(p(XSCoreParamsKey).VLEN) { // XSError(io.in.valid && io.in.bits.uop.ctrl.fuOpType === VimacType.dummy, "Vimac OpType not supported") // override val dataModule = Seq(Module(new VIMacWrapper)) // override val select = Seq( // io.in.bits.uop.ctrl.fuType === FuType.vimac // ) // connectDataModule //}