1package xiangshan.backend.fu.wrapper 2 3import org.chipsalliance.cde.config.Parameters 4import chisel3._ 5import chisel3.util._ 6import utility.XSError 7import xiangshan.backend.fu.FuConfig 8import xiangshan.backend.fu.vector.Bundles.VSew 9import xiangshan.backend.fu.fpu.FpPipedFuncUnit 10import yunsuan.{VfaluType, VfpuType} 11import yunsuan.fpu.FloatAdder 12 13class FAlu(cfg: FuConfig)(implicit p: Parameters) extends FpPipedFuncUnit(cfg) { 14 XSError(io.in.valid && io.in.bits.ctrl.fuOpType === VfpuType.dummy, "falu OpType not supported") 15 16 // io alias 17 private val opcode = fuOpType(4, 0) 18 private val src0 = inData.src(0) 19 private val src1 = inData.src(1) 20 21 // modules 22 private val falu = Module(new FloatAdder) 23 24 val fp_aIsFpCanonicalNAN = fp_fmt === VSew.e32 && !src0.head(32).andR || 25 fp_fmt === VSew.e16 && !src0.head(48).andR 26 val fp_bIsFpCanonicalNAN = fp_fmt === VSew.e32 && !src1.head(32).andR || 27 fp_fmt === VSew.e16 && !src1.head(48).andR 28 29 falu.io.fire := io.in.valid 30 falu.io.fp_a := src0 31 falu.io.fp_b := src1 32 falu.io.round_mode := rm 33 falu.io.fp_format := fp_fmt 34 falu.io.op_code := opcode 35 falu.io.fp_aIsFpCanonicalNAN := fp_aIsFpCanonicalNAN 36 falu.io.fp_bIsFpCanonicalNAN := fp_bIsFpCanonicalNAN 37 38 private val resultData = falu.io.fp_result 39 private val fflagsData = falu.io.fflags 40 41 io.out.bits.res.fflags.get := fflagsData 42 io.out.bits.res.data := resultData 43} 44