1517544cdSsinsanctionpackage xiangshan.backend.fu.wrapper 2517544cdSsinsanction 3517544cdSsinsanctionimport org.chipsalliance.cde.config.Parameters 4517544cdSsinsanctionimport chisel3._ 5517544cdSsinsanctionimport chisel3.util._ 6bb2f3f51STang Haojinimport utility.XSError 7517544cdSsinsanctionimport xiangshan.backend.fu.FuConfig 8517544cdSsinsanctionimport xiangshan.backend.fu.vector.Bundles.VSew 9517544cdSsinsanctionimport xiangshan.backend.fu.fpu.FpPipedFuncUnit 10517544cdSsinsanctionimport yunsuan.{VfaluType, VfpuType} 1190ae5a7fSlewislzhimport yunsuan.fpu.FloatAdder 12517544cdSsinsanction 13517544cdSsinsanctionclass FAlu(cfg: FuConfig)(implicit p: Parameters) extends FpPipedFuncUnit(cfg) { 14517544cdSsinsanction XSError(io.in.valid && io.in.bits.ctrl.fuOpType === VfpuType.dummy, "falu OpType not supported") 15517544cdSsinsanction 16517544cdSsinsanction // io alias 17517544cdSsinsanction private val opcode = fuOpType(4, 0) 18517544cdSsinsanction private val src0 = inData.src(0) 19517544cdSsinsanction private val src1 = inData.src(1) 20517544cdSsinsanction 21517544cdSsinsanction // modules 227b7f869dSxiaofeibao private val falu = Module(new FloatAdder) 23517544cdSsinsanction 24*39be24bcSxiaofeibao val fp_aIsFpCanonicalNAN = fp_fmt === VSew.e32 && !src0.head(32).andR || 25517544cdSsinsanction fp_fmt === VSew.e16 && !src0.head(48).andR 26*39be24bcSxiaofeibao val fp_bIsFpCanonicalNAN = fp_fmt === VSew.e32 && !src1.head(32).andR || 27*39be24bcSxiaofeibao fp_fmt === VSew.e16 && !src1.head(48).andR 28517544cdSsinsanction 29517544cdSsinsanction falu.io.fire := io.in.valid 30*39be24bcSxiaofeibao falu.io.fp_a := src0 31*39be24bcSxiaofeibao falu.io.fp_b := src1 32517544cdSsinsanction falu.io.round_mode := rm 33517544cdSsinsanction falu.io.fp_format := fp_fmt 34517544cdSsinsanction falu.io.op_code := opcode 35517544cdSsinsanction falu.io.fp_aIsFpCanonicalNAN := fp_aIsFpCanonicalNAN 36517544cdSsinsanction falu.io.fp_bIsFpCanonicalNAN := fp_bIsFpCanonicalNAN 37517544cdSsinsanction 38517544cdSsinsanction private val resultData = falu.io.fp_result 39517544cdSsinsanction private val fflagsData = falu.io.fflags 40517544cdSsinsanction 41517544cdSsinsanction io.out.bits.res.fflags.get := fflagsData 42517544cdSsinsanction io.out.bits.res.data := resultData 43517544cdSsinsanction} 44