1730cfbc0SXuan Hupackage xiangshan.backend.datapath 2730cfbc0SXuan Hu 32aa3a761Ssinsanctionimport chisel3.util.log2Up 45f7c1a77Slinzhidaimport org.chipsalliance.cde.config.Parameters 55f7c1a77Slinzhidaimport xiangshan.XSCoreParamsKey 62aa3a761Ssinsanction 7730cfbc0SXuan Huobject DataConfig { 8730cfbc0SXuan Hu sealed abstract class DataConfig ( 9730cfbc0SXuan Hu val name: String, 10730cfbc0SXuan Hu val dataWidth: Int, 11730cfbc0SXuan Hu ) { 12730cfbc0SXuan Hu override def toString: String = name 13730cfbc0SXuan Hu } 14730cfbc0SXuan Hu 15730cfbc0SXuan Hu case class IntData() extends DataConfig("int", 64) 16730cfbc0SXuan Hu case class FpData() extends DataConfig("fp", 64) 17730cfbc0SXuan Hu case class VecData() extends DataConfig("vec", 128) 18730cfbc0SXuan Hu case class ImmData(len: Int) extends DataConfig("int", len) 193ea4388cSHaoyuan Feng case class VAddrData()(implicit p: Parameters) extends DataConfig("vaddr", 48 + 2) // Todo: associate it with the width of vaddr 2007b5cc60Sxiaofeibao case class V0Data() extends DataConfig("v0", 128) 2107b5cc60Sxiaofeibao case class VlData() extends DataConfig("vl", log2Up(VecData().dataWidth) + 1 ) // 8 225edcc45fSHaojin Tang case class FakeIntData() extends DataConfig("fakeint", 64) 23730cfbc0SXuan Hu case class NoData() extends DataConfig("nodata", 0) 24730cfbc0SXuan Hu 2507b5cc60Sxiaofeibao def RegSrcDataSet : Set[DataConfig] = Set(IntData(), FpData(), VecData(), V0Data(), VlData()) 26730cfbc0SXuan Hu def IntRegSrcDataSet: Set[DataConfig] = Set(IntData()) 27730cfbc0SXuan Hu def FpRegSrcDataSet : Set[DataConfig] = Set(FpData()) 282aa3a761Ssinsanction def VecRegSrcDataSet : Set[DataConfig] = Set(VecData()) 2907b5cc60Sxiaofeibao def V0RegSrcDataSet : Set[DataConfig] = Set(V0Data()) 3007b5cc60Sxiaofeibao def VlRegSrcDataSet : Set[DataConfig] = Set(VlData()) 312aa3a761Ssinsanction 325d2b9cadSXuan Hu 335d2b9cadSXuan Hu def RegDataMaxWidth : Int = RegSrcDataSet.map(_.dataWidth).max 345f7c1a77Slinzhida 355f7c1a77Slinzhida def VAddrBits(implicit p: Parameters): Int = { 365f7c1a77Slinzhida def coreParams = p(XSCoreParamsKey) 37*97929664SXiaokun-Pei if (coreParams.HasHExtension) { 38*97929664SXiaokun-Pei if (coreParams.EnableSv48) 39*97929664SXiaokun-Pei coreParams.GPAddrBitsSv48x4 40*97929664SXiaokun-Pei else 41*97929664SXiaokun-Pei coreParams.GPAddrBitsSv39x4 425f7c1a77Slinzhida } else { 43*97929664SXiaokun-Pei if (coreParams.EnableSv48) 44*97929664SXiaokun-Pei coreParams.VAddrBitsSv48 45*97929664SXiaokun-Pei else 46*97929664SXiaokun-Pei coreParams.VAddrBitsSv39 475f7c1a77Slinzhida } 485f7c1a77Slinzhida // VAddrBits is Virtual Memory addr bits 495f7c1a77Slinzhida } 50730cfbc0SXuan Hu} 51