1package xiangshan.backend.fu.vector 2 3import chisel3._ 4import chisel3.util.BitPat.bitPatToUInt 5import chisel3.util.{BitPat, Mux1H} 6import xiangshan.backend.fu.vector.Bundles.VSew 7 8object Utils { 9 def VecDataToMaskDataVec(vecData: UInt, vsew: UInt): Vec[UInt] = { 10 val maskWidth = vecData.getWidth / 8 11 val maskDataVec = Wire(Vec(8, UInt(maskWidth.W))) 12 require(8 * maskWidth == vecData.getWidth, "can not split this vector data into mask data vec") 13 for ((maskData, i) <- maskDataVec.zipWithIndex) { 14 maskData := Mux1H(Seq( 15 (vsew === VSew.e8) -> vecData((i + 1) * maskWidth - 1, i * maskWidth ), 16 (vsew === VSew.e16) -> vecData((i + 1) * maskWidth / 2 - 1, i * maskWidth / 2), 17 (vsew === VSew.e32) -> vecData((i + 1) * maskWidth / 4 - 1, i * maskWidth / 4), 18 (vsew === VSew.e64) -> vecData((i + 1) * maskWidth / 8 - 1, i * maskWidth / 8), 19 )) 20 } 21 maskDataVec 22 } 23 24 def NOnes(n: Int): UInt = bitPatToUInt(BitPat.Y(n)) 25 26 def NZeros(n: Int): UInt = bitPatToUInt(BitPat.N(n)) 27} 28