135d005dfSXuan Hupackage xiangshan.backend.fu.vector 235d005dfSXuan Hu 335d005dfSXuan Huimport chisel3._ 4*2e82e6d8SXuan Huimport chisel3.util.BitPat.bitPatToUInt 5*2e82e6d8SXuan Huimport chisel3.util.{BitPat, Mux1H} 62559805fSXuan Huimport xiangshan.backend.fu.vector.Bundles.VSew 735d005dfSXuan Hu 835d005dfSXuan Huobject Utils { 92559805fSXuan Hu def VecDataToMaskDataVec(vecData: UInt, vsew: UInt): Vec[UInt] = { 102559805fSXuan Hu val maskWidth = vecData.getWidth / 8 112559805fSXuan Hu val maskDataVec = Wire(Vec(8, UInt(maskWidth.W))) 122559805fSXuan Hu require(8 * maskWidth == vecData.getWidth, "can not split this vector data into mask data vec") 1335d005dfSXuan Hu for ((maskData, i) <- maskDataVec.zipWithIndex) { 142559805fSXuan Hu maskData := Mux1H(Seq( 152559805fSXuan Hu (vsew === VSew.e8) -> vecData((i + 1) * maskWidth - 1, i * maskWidth ), 162559805fSXuan Hu (vsew === VSew.e16) -> vecData((i + 1) * maskWidth / 2 - 1, i * maskWidth / 2), 172559805fSXuan Hu (vsew === VSew.e32) -> vecData((i + 1) * maskWidth / 4 - 1, i * maskWidth / 4), 182559805fSXuan Hu (vsew === VSew.e64) -> vecData((i + 1) * maskWidth / 8 - 1, i * maskWidth / 8), 192559805fSXuan Hu )) 2035d005dfSXuan Hu } 2135d005dfSXuan Hu maskDataVec 2235d005dfSXuan Hu } 23*2e82e6d8SXuan Hu 24*2e82e6d8SXuan Hu def NOnes(n: Int): UInt = bitPatToUInt(BitPat.Y(n)) 25*2e82e6d8SXuan Hu 26*2e82e6d8SXuan Hu def NZeros(n: Int): UInt = bitPatToUInt(BitPat.N(n)) 2735d005dfSXuan Hu} 28