1package xiangshan.backend.fu 2 3import chisel3._ 4import chisel3.util._ 5 6import xiangshan._ 7import xiangshan.utils._ 8 9import FunctionUnit._ 10 11/* 12 XiangShan Function Unit 13 A Exu can have one or more function units 14 */ 15 16case class FuConfig 17( 18 fuType: UInt, 19 numIntSrc: Int, 20 numFpSrc: Int, 21 writeIntRf: Boolean, 22 writeFpRf: Boolean, 23 hasRedirect: Boolean 24) 25 26abstract class FunctionUnit(cfg: FuConfig) extends XSModule 27 28object FunctionUnit { 29 val jmpCfg = 30 FuConfig(FuType.jmp, 1, 0, writeIntRf = true, writeFpRf = false, hasRedirect = true) 31 32 val i2fCfg = 33 FuConfig(FuType.i2f, 1, 0, writeIntRf = false, writeFpRf = true, hasRedirect = false) 34 35 val aluCfg = 36 FuConfig(FuType.alu, 2, 0, writeIntRf = true, writeFpRf = false, hasRedirect = true) 37 38 val mulCfg = 39 FuConfig(FuType.mul, 2, 0, writeIntRf = true, writeFpRf = false, hasRedirect = false) 40 41 val divCfg = 42 FuConfig(FuType.div, 2, 0, writeIntRf = true, writeFpRf = false, hasRedirect = false) 43 44 val lsuCfg = 45 FuConfig(FuType.ldu, 2, 1, writeIntRf = true, writeFpRf = true, hasRedirect = false) 46 47 val fmacCfg = 48 FuConfig(FuType.fmac, 0, 3, writeIntRf = false, writeFpRf = true, hasRedirect = false) 49 50 val fmiscCfg = 51 FuConfig(FuType.fmisc, 0, 2, writeIntRf = false, writeFpRf = true, hasRedirect = false) 52 53 val fDivSqrtCfg = 54 FuConfig(FuType.fDivSqrt, 0, 2, writeIntRf = false, writeFpRf = true, hasRedirect = false) 55}