1package xiangshan.backend.datapath 2 3import chisel3.util.log2Up 4import xiangshan.backend.datapath.DataConfig._ 5 6object WbConfig { 7 sealed abstract class WbConfig() { 8 val port: Int 9 def dataCfg: DataConfig 10 def numPreg: Int = 0 11 def dataWidth: Int = dataCfg.dataWidth 12 13 def pregIdxWidth = log2Up(numPreg) 14 15 def writeInt = dataCfg == IntData() 16 def writeFp = dataCfg == FpData() 17 def writeVec = dataCfg == VecData() 18 } 19 20 sealed abstract class ExuWB extends WbConfig 21 22 sealed abstract class PregWB extends ExuWB { 23 val priority: Int 24 } 25 26 case class IntWB( 27 port : Int = -1, 28 priority: Int = Int.MaxValue, 29 ) extends PregWB { 30 def dataCfg: DataConfig = IntData() 31 override def numPreg: Int = 160 32 } 33 34 case class FpWB( 35 port : Int = -1, 36 priority: Int = Int.MaxValue, 37 ) extends PregWB { 38 def dataCfg: DataConfig = FpData() 39 override def numPreg: Int = 160 40 } 41 42 case class VecWB( 43 port : Int = -1, 44 priority: Int = Int.MaxValue, 45 ) extends PregWB { 46 def dataCfg: DataConfig = VecData() 47 override def numPreg: Int = 160 48 } 49 50 case class CtrlWB( 51 port: Int = -1, 52 ) extends WbConfig { 53 val priority: Int = Int.MaxValue 54 override def dataCfg: DataConfig = NoData() 55 } 56 57 // Todo: use it 58 sealed trait WBSource 59 case class WBFromInt() extends WBSource 60 case class WBFromMem() extends WBSource 61 case class WBFromVec() extends WBSource 62 case class WBFromFp() extends WBSource 63} 64 65