13ebdf758SXuan Hu///**************************************************************************************** 23ebdf758SXuan Hu// * Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences 33ebdf758SXuan Hu// * Copyright (c) 2020-2021 Peng Cheng Laboratory 43ebdf758SXuan Hu// * 53ebdf758SXuan Hu// * XiangShan is licensed under Mulan PSL v2. 63ebdf758SXuan Hu// * You can use this software according to the terms and conditions of the Mulan PSL v2. 73ebdf758SXuan Hu// * You may obtain a copy of Mulan PSL v2 at: 83ebdf758SXuan Hu// * http://license.coscl.org.cn/MulanPSL2 93ebdf758SXuan Hu// * 103ebdf758SXuan Hu// * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, 113ebdf758SXuan Hu// * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, 123ebdf758SXuan Hu// * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. 133ebdf758SXuan Hu// * 143ebdf758SXuan Hu// * See the Mulan PSL v2 for more details. 153ebdf758SXuan Hu// **************************************************************************************** 163ebdf758SXuan Hu// */ 173ebdf758SXuan Hu// 183ebdf758SXuan Hu// 193ebdf758SXuan Hu//package xiangshan.backend.fu.vector 203ebdf758SXuan Hu// 21*83ba63b3SXuan Hu//import org.chipsalliance.cde.config.Parameters 223ebdf758SXuan Hu//import chisel3._ 233ebdf758SXuan Hu//import utils._ 243ebdf758SXuan Hu//import yunsuan.vector.alu.VIntFixpAlu 253ebdf758SXuan Hu//import yunsuan.VialuFixType 263ebdf758SXuan Hu//import xiangshan.{XSCoreParamsKey, FuType} 273ebdf758SXuan Hu//import yunsuan.vector.{SewOH, MaskExtract} 283ebdf758SXuan Hu// 293ebdf758SXuan Hu// 303ebdf758SXuan Hu// 313ebdf758SXuan Hu//class VIAluFixWrapper(implicit p: Parameters) extends VPUDataModule { 323ebdf758SXuan Hu// 333ebdf758SXuan Hu// needReverse := VialuFixType.needReverse(ctrl.fuOpType) 343ebdf758SXuan Hu// needClearMask := VialuFixType.needClearMask(ctrl.fuOpType) 353ebdf758SXuan Hu// 363ebdf758SXuan Hu// // connect VIAlu 373ebdf758SXuan Hu// val vIntFixpAlu = Module(new VIntFixpAlu) 383ebdf758SXuan Hu// vIntFixpAlu.io.in.opcode := VialuFixType.getOpcode(in.uop.ctrl.fuOpType).asTypeOf(vIntFixpAlu.io.in.opcode) 393ebdf758SXuan Hu// vIntFixpAlu.io.in.info.vm := in.uop.ctrl.vm 403ebdf758SXuan Hu// vIntFixpAlu.io.in.info.ma := in.uop.ctrl.vconfig.vtype.vma 413ebdf758SXuan Hu// vIntFixpAlu.io.in.info.ta := in.uop.ctrl.vconfig.vtype.vta 423ebdf758SXuan Hu// vIntFixpAlu.io.in.info.vlmul := in.uop.ctrl.vconfig.vtype.vlmul 433ebdf758SXuan Hu// vIntFixpAlu.io.in.info.vl := in.uop.ctrl.vconfig.vl 443ebdf758SXuan Hu// 453ebdf758SXuan Hu// vIntFixpAlu.io.in.info.vstart := vstart // TODO : 463ebdf758SXuan Hu// vIntFixpAlu.io.in.info.uopIdx := in.uop.ctrl.uopIdx 473ebdf758SXuan Hu// 483ebdf758SXuan Hu// vIntFixpAlu.io.in.info.vxrm := vxrm 493ebdf758SXuan Hu// val srcVdType = Wire(new Bundle{ 503ebdf758SXuan Hu// val srcType2 = UInt(4.W) 513ebdf758SXuan Hu// val srcType1 = UInt(4.W) 523ebdf758SXuan Hu// val vdType = UInt(4.W) 533ebdf758SXuan Hu// }) 543ebdf758SXuan Hu// srcVdType := VialuFixType.getSrcVdType(in.uop.ctrl.fuOpType, in.uop.ctrl.vconfig.vtype.vsew(1,0)).asTypeOf(srcVdType.cloneType) 553ebdf758SXuan Hu// vIntFixpAlu.io.in.srcType(0) := srcVdType.srcType2 563ebdf758SXuan Hu// vIntFixpAlu.io.in.srcType(1) := srcVdType.srcType1 573ebdf758SXuan Hu// vIntFixpAlu.io.in.vdType := srcVdType.vdType 583ebdf758SXuan Hu// vIntFixpAlu.io.in.vs1 := vs1 593ebdf758SXuan Hu// vIntFixpAlu.io.in.vs2 := vs2 603ebdf758SXuan Hu// vIntFixpAlu.io.in.old_vd := in.src(2) 613ebdf758SXuan Hu// 623ebdf758SXuan Hu// val eewVs1 = SewOH(srcVdType.srcType1(1, 0)) 633ebdf758SXuan Hu// val eewVd = SewOH(srcVdType.vdType(1, 0)) 643ebdf758SXuan Hu// val uopIdx = in.uop.ctrl.uopIdx 653ebdf758SXuan Hu// val narrow = srcVdType.srcType2(1, 0) === 3.U && srcVdType.vdType(1, 0) === 2.U || 663ebdf758SXuan Hu// srcVdType.srcType2(1, 0) === 2.U && srcVdType.vdType(1, 0) === 1.U || 673ebdf758SXuan Hu// srcVdType.srcType2(1, 0) === 1.U && srcVdType.vdType(1, 0) === 0.U 683ebdf758SXuan Hu// val eewVm = Mux(srcVdType.vdType === 15.U, eewVs1, eewVd) 693ebdf758SXuan Hu// val maskIdx = Mux(narrow, uopIdx >> 1, uopIdx) 703ebdf758SXuan Hu// vIntFixpAlu.io.in.mask16b := MaskExtract(mask, maskIdx, eewVm) 713ebdf758SXuan Hu// vIntFixpAlu.io.ctrl.narrow := narrow 723ebdf758SXuan Hu// vIntFixpAlu.io.ctrl.vstart_gte_vl := vstart >= in.uop.ctrl.vconfig.vl 733ebdf758SXuan Hu// 743ebdf758SXuan Hu// // connect io 753ebdf758SXuan Hu// io.out.bits.data := vIntFixpAlu.io.out.vd 763ebdf758SXuan Hu// vxsat := vIntFixpAlu.io.out.vxsat 773ebdf758SXuan Hu// io.out.valid := RegNext(io.in.valid) 783ebdf758SXuan Hu//} 793ebdf758SXuan Hu// 803ebdf758SXuan Hu// 81