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