FmacExeUnit.scala 870 字节
Newer Older
1 2 3 4
package xiangshan.backend.exu

import chisel3._
import chisel3.util._
5
import xiangshan.backend.exu.Exu.fmacExeUnitCfg
L
linjiawei 已提交
6
import xiangshan.backend.fu.fpu._
L
LinJiawei 已提交
7
import xiangshan.backend.fu.fpu.fma.FMA
8

9
class FmacExeUnit extends Exu(fmacExeUnitCfg)
L
LinJiawei 已提交
10
{
L
LinJiawei 已提交
11 12
  val frm = IO(Input(UInt(3.W)))

L
LinJiawei 已提交
13
  val fma = supportedFunctionUnits.head.asInstanceOf[FMA]
14

15
  val input = io.fromFp.bits
L
linjiawei 已提交
16
  val fmaOut = fma.io.out.bits
17
  val isRVD = !io.fromFp.bits.uop.ctrl.isRVF
L
LinJiawei 已提交
18 19 20
  fma.io.in.bits.src := VecInit(Seq(input.src1, input.src2, input.src3).map(
    src => Mux(isRVD, src, unboxF64ToF32(src))
  ))
21
  val instr_rm = io.fromFp.bits.uop.cf.instr(14, 12)
L
LinJiawei 已提交
22
  fma.rm := Mux(instr_rm =/= 7.U, instr_rm, frm)
23 24

  fma.io.redirectIn := io.redirect
25
  fma.io.out.ready := io.toFp.ready
26

27 28
  io.toFp.bits.data := Mux(fmaOut.uop.ctrl.isRVF, boxF32ToF64(fmaOut.data), fmaOut.data)
  io.toFp.bits.fflags := fma.fflags
29
}