FmiscExeUnit.scala 908 字节
Newer Older
1 2 3
package xiangshan.backend.exu

import chisel3._
L
LinJiawei 已提交
4
import chisel3.util._
L
linjiawei 已提交
5
import utils._
6
import xiangshan.backend.exu.Exu.fmiscExeUnitCfg
L
linjiawei 已提交
7
import xiangshan.backend.fu.fpu._
8

9
class FmiscExeUnit extends Exu(fmiscExeUnitCfg) {
L
LinJiawei 已提交
10

L
LinJiawei 已提交
11 12
  val frm = IO(Input(UInt(3.W)))

13
  val fus = supportedFunctionUnits.map(fu => fu.asInstanceOf[FPUSubModule])
L
LinJiawei 已提交
14

15 16
  val input = io.fromFp
  val isRVF = input.bits.uop.ctrl.isRVF
L
LinJiawei 已提交
17
  val instr_rm = input.bits.uop.ctrl.fpu.rm
18
  val (src1, src2) = (input.bits.src1, input.bits.src2)
L
LinJiawei 已提交
19

20
  supportedFunctionUnits.foreach { module =>
21 22
    module.io.in.bits.src(0) := src1
    module.io.in.bits.src(1) := src2
23
    module.asInstanceOf[FPUSubModule].rm := Mux(instr_rm =/= 7.U, instr_rm, frm)
L
LinJiawei 已提交
24 25
  }

26
  io.out.bits.fflags := MuxCase(
27
    0.U,
28
    fus.map(x => x.io.out.fire() -> x.fflags)
L
LinJiawei 已提交
29
  )
30 31
  val fpOutCtrl = io.out.bits.uop.ctrl.fpu
  io.out.bits.data := box(arb.io.out.bits.data, fpOutCtrl.typeTagOut)
32
}