1730cfbc0SXuan Hupackage xiangshan.backend.datapath 2730cfbc0SXuan Hu 3730cfbc0SXuan Huimport chisel3.util.log2Up 439c59369SXuan 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() 16*45d40ce7Ssinsanction def writeV0 = dataCfg == V0Data() 17*45d40ce7Ssinsanction def writeVl = dataCfg == VlData() 180655b1a0SXuan Hu 190655b1a0SXuan Hu override def toString: String = { 2039c59369SXuan Hu var res = this match { 2139c59369SXuan Hu case _: IntWB => "INT" 2260f0c5aeSxiaofeibao case _: FpWB => "FP" 2339c59369SXuan Hu case _: VfWB => "VF" 24*45d40ce7Ssinsanction case _: V0WB => "V0" 25*45d40ce7Ssinsanction case _: VlWB => "VL" 2639c59369SXuan Hu case _: NoWB => "NO" 2739c59369SXuan Hu case _ => "??" 280655b1a0SXuan Hu } 290655b1a0SXuan Hu res += s"($port)" 300655b1a0SXuan Hu res 310655b1a0SXuan Hu } 32730cfbc0SXuan Hu } 33730cfbc0SXuan Hu 34730cfbc0SXuan Hu sealed abstract class ExuWB extends WbConfig 35730cfbc0SXuan Hu 36730cfbc0SXuan Hu sealed abstract class PregWB extends ExuWB { 37730cfbc0SXuan Hu val priority: Int 3839c59369SXuan Hu 3939c59369SXuan Hu def numPreg(backendParams: BackendParams): Int 4039c59369SXuan Hu 4139c59369SXuan Hu def pregIdxWidth(backendParams: BackendParams) = log2Up(numPreg(backendParams)) 42730cfbc0SXuan Hu } 43730cfbc0SXuan Hu 44730cfbc0SXuan Hu case class IntWB( 45730cfbc0SXuan Hu port : Int = -1, 46730cfbc0SXuan Hu priority: Int = Int.MaxValue, 47730cfbc0SXuan Hu ) extends PregWB { 4839c59369SXuan Hu 49730cfbc0SXuan Hu def dataCfg: DataConfig = IntData() 5039c59369SXuan Hu 5139c59369SXuan Hu def numPreg(backendParams: BackendParams): Int = backendParams.getPregParams(IntData()).numEntries 52730cfbc0SXuan Hu } 53730cfbc0SXuan Hu 5460f0c5aeSxiaofeibao case class FpWB( 5560f0c5aeSxiaofeibao port: Int = -1, 5660f0c5aeSxiaofeibao priority: Int = Int.MaxValue, 5760f0c5aeSxiaofeibao ) extends PregWB { 5860f0c5aeSxiaofeibao 5960f0c5aeSxiaofeibao def dataCfg: DataConfig = FpData() 6060f0c5aeSxiaofeibao 6160f0c5aeSxiaofeibao def numPreg(backendParams: BackendParams): Int = backendParams.getPregParams(FpData()).numEntries 6260f0c5aeSxiaofeibao } 6360f0c5aeSxiaofeibao 640162f462Sczw case class VfWB( 65730cfbc0SXuan Hu port : Int = -1, 66730cfbc0SXuan Hu priority: Int = Int.MaxValue, 67730cfbc0SXuan Hu ) extends PregWB { 6839c59369SXuan Hu 69730cfbc0SXuan Hu def dataCfg: DataConfig = VecData() 7039c59369SXuan Hu 7139c59369SXuan Hu def numPreg(backendParams: BackendParams): Int = backendParams.getPregParams(VecData()).numEntries 72730cfbc0SXuan Hu } 73730cfbc0SXuan Hu 742aa3a761Ssinsanction case class V0WB( 752aa3a761Ssinsanction port : Int = -1, 762aa3a761Ssinsanction priority: Int = Int.MaxValue, 772aa3a761Ssinsanction ) extends PregWB { 782aa3a761Ssinsanction 7907b5cc60Sxiaofeibao def dataCfg: DataConfig = V0Data() 802aa3a761Ssinsanction 8107b5cc60Sxiaofeibao def numPreg(backendParams: BackendParams): Int = backendParams.getPregParams(V0Data()).numEntries 822aa3a761Ssinsanction } 832aa3a761Ssinsanction 842aa3a761Ssinsanction case class VlWB( 852aa3a761Ssinsanction port : Int = -1, 862aa3a761Ssinsanction priority: Int = Int.MaxValue, 872aa3a761Ssinsanction ) extends PregWB { 882aa3a761Ssinsanction 8907b5cc60Sxiaofeibao def dataCfg: DataConfig = VlData() 902aa3a761Ssinsanction 9107b5cc60Sxiaofeibao def numPreg(backendParams: BackendParams): Int = backendParams.getPregParams(VlData()).numEntries 922aa3a761Ssinsanction } 932aa3a761Ssinsanction 9439c59369SXuan Hu case class NoWB( 952e0a7dc5Sfdy port : Int = -1, 962e0a7dc5Sfdy priority: Int = Int.MaxValue, 972e0a7dc5Sfdy ) extends PregWB { 982e0a7dc5Sfdy 9939c59369SXuan Hu override def dataCfg: DataConfig = NoData() 10039c59369SXuan Hu 10139c59369SXuan Hu override def numPreg(backendParams: BackendParams): Int = 0 1022e0a7dc5Sfdy } 1032e0a7dc5Sfdy 104730cfbc0SXuan Hu case class CtrlWB( 105730cfbc0SXuan Hu port: Int = -1, 106730cfbc0SXuan Hu ) extends WbConfig { 107730cfbc0SXuan Hu val priority: Int = Int.MaxValue 108730cfbc0SXuan Hu override def dataCfg: DataConfig = NoData() 109730cfbc0SXuan Hu } 110730cfbc0SXuan Hu 1115edcc45fSHaojin Tang case class FakeIntWB( 1125edcc45fSHaojin Tang port : Int = -1, 1135edcc45fSHaojin Tang priority: Int = Int.MaxValue, 1145edcc45fSHaojin Tang ) extends PregWB { 1155edcc45fSHaojin Tang 1165edcc45fSHaojin Tang def dataCfg: DataConfig = FakeIntData() 1175edcc45fSHaojin Tang 1185edcc45fSHaojin Tang def numPreg(backendParams: BackendParams): Int = backendParams.getPregParams(FakeIntData()).numEntries 1195edcc45fSHaojin Tang } 1205edcc45fSHaojin Tang} 121