xref: /XiangShan/src/main/scala/xiangshan/backend/datapath/DataConfig.scala (revision 9792966404525ac072cba06daccf60dcda4282ea)
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