1730cfbc0SXuan Hupackage xiangshan.backend.datapath 2730cfbc0SXuan Hu 3730cfbc0SXuan Huimport chisel3.util.log2Up 4*39c59369SXuan Huimport xiangshan.backend.BackendParams 5730cfbc0SXuan Huimport xiangshan.backend.datapath.DataConfig._ 6730cfbc0SXuan Hu 7730cfbc0SXuan Huobject WbConfig { 8730cfbc0SXuan Hu sealed abstract class WbConfig() { 9730cfbc0SXuan Hu val port: Int 10730cfbc0SXuan Hu def dataCfg: DataConfig 11730cfbc0SXuan Hu def dataWidth: Int = dataCfg.dataWidth 12730cfbc0SXuan Hu 13730cfbc0SXuan Hu def writeInt = dataCfg == IntData() 14730cfbc0SXuan Hu def writeFp = dataCfg == FpData() 15730cfbc0SXuan Hu def writeVec = dataCfg == VecData() 160655b1a0SXuan Hu 170655b1a0SXuan Hu override def toString: String = { 18*39c59369SXuan Hu var res = this match { 19*39c59369SXuan Hu case _: IntWB => "INT" 20*39c59369SXuan Hu case _: VfWB => "VF" 21*39c59369SXuan Hu case _: NoWB => "NO" 22*39c59369SXuan Hu case _ => "??" 230655b1a0SXuan Hu } 240655b1a0SXuan Hu res += s"($port)" 250655b1a0SXuan Hu res 260655b1a0SXuan Hu } 27730cfbc0SXuan Hu } 28730cfbc0SXuan Hu 29730cfbc0SXuan Hu sealed abstract class ExuWB extends WbConfig 30730cfbc0SXuan Hu 31730cfbc0SXuan Hu sealed abstract class PregWB extends ExuWB { 32730cfbc0SXuan Hu val priority: Int 33*39c59369SXuan Hu 34*39c59369SXuan Hu def numPreg(backendParams: BackendParams): Int 35*39c59369SXuan Hu 36*39c59369SXuan Hu def pregIdxWidth(backendParams: BackendParams) = log2Up(numPreg(backendParams)) 37730cfbc0SXuan Hu } 38730cfbc0SXuan Hu 39730cfbc0SXuan Hu case class IntWB( 40730cfbc0SXuan Hu port : Int = -1, 41730cfbc0SXuan Hu priority: Int = Int.MaxValue, 42730cfbc0SXuan Hu ) extends PregWB { 43*39c59369SXuan Hu 44730cfbc0SXuan Hu def dataCfg: DataConfig = IntData() 45*39c59369SXuan Hu 46*39c59369SXuan Hu def numPreg(backendParams: BackendParams): Int = backendParams.getPregParams(IntData()).numEntries 47730cfbc0SXuan Hu } 48730cfbc0SXuan Hu 490162f462Sczw case class VfWB( 50730cfbc0SXuan Hu port : Int = -1, 51730cfbc0SXuan Hu priority: Int = Int.MaxValue, 52730cfbc0SXuan Hu ) extends PregWB { 53*39c59369SXuan Hu 54730cfbc0SXuan Hu def dataCfg: DataConfig = VecData() 55*39c59369SXuan Hu 56*39c59369SXuan Hu def numPreg(backendParams: BackendParams): Int = backendParams.getPregParams(VecData()).numEntries 57730cfbc0SXuan Hu } 58730cfbc0SXuan Hu 59*39c59369SXuan Hu case class NoWB( 602e0a7dc5Sfdy port : Int = -1, 612e0a7dc5Sfdy priority: Int = Int.MaxValue, 622e0a7dc5Sfdy ) extends PregWB { 632e0a7dc5Sfdy 64*39c59369SXuan Hu override def dataCfg: DataConfig = NoData() 65*39c59369SXuan Hu 66*39c59369SXuan Hu override def numPreg(backendParams: BackendParams): Int = 0 672e0a7dc5Sfdy } 682e0a7dc5Sfdy 69730cfbc0SXuan Hu case class CtrlWB( 70730cfbc0SXuan Hu port: Int = -1, 71730cfbc0SXuan Hu ) extends WbConfig { 72730cfbc0SXuan Hu val priority: Int = Int.MaxValue 73730cfbc0SXuan Hu override def dataCfg: DataConfig = NoData() 74730cfbc0SXuan Hu } 75730cfbc0SXuan Hu} 76730cfbc0SXuan Hu 77