xref: /XiangShan/src/main/scala/xiangshan/backend/datapath/DataConfig.scala (revision 5edcc45f37ad5425c2b3b88ed8d8e01d43652ecd)
1730cfbc0SXuan Hupackage xiangshan.backend.datapath
2730cfbc0SXuan Hu
3730cfbc0SXuan Huobject DataConfig {
4730cfbc0SXuan Hu  sealed abstract class DataConfig (
5730cfbc0SXuan Hu    val name: String,
6730cfbc0SXuan Hu    val dataWidth: Int,
7730cfbc0SXuan Hu  ) {
8730cfbc0SXuan Hu    override def toString: String = name
9730cfbc0SXuan Hu  }
10730cfbc0SXuan Hu
11730cfbc0SXuan Hu  case class IntData() extends DataConfig("int", 64)
12730cfbc0SXuan Hu  case class FpData() extends DataConfig("fp", 64)
13730cfbc0SXuan Hu  case class VecData() extends DataConfig("vec", 128)
14730cfbc0SXuan Hu  case class ImmData(len: Int) extends DataConfig("int", len)
15730cfbc0SXuan Hu  case class VAddrData() extends DataConfig("vaddr", 39) // Todo: associate it with the width of vaddr
16730cfbc0SXuan Hu  case class MaskSrcData() extends DataConfig("masksrc", VecData().dataWidth) // 128
17730cfbc0SXuan Hu  case class MaskDstData() extends DataConfig("maskdst", VecData().dataWidth / 8) // 16
18730cfbc0SXuan Hu  case class VConfigData() extends DataConfig("vconfig", VecData().dataWidth) // Todo: use 16 bit instead
19*5edcc45fSHaojin Tang  case class FakeIntData() extends DataConfig("fakeint", 64)
20730cfbc0SXuan Hu  case class NoData() extends DataConfig("nodata", 0)
21730cfbc0SXuan Hu
22730cfbc0SXuan Hu  def RegSrcDataSet   : Set[DataConfig] = Set(IntData(), FpData(), VecData(), MaskSrcData(), VConfigData())
23730cfbc0SXuan Hu  def IntRegSrcDataSet: Set[DataConfig] = Set(IntData())
24730cfbc0SXuan Hu  def FpRegSrcDataSet : Set[DataConfig] = Set(FpData())
25730cfbc0SXuan Hu  def VecRegSrcDataSet: Set[DataConfig] = Set(VecData(), MaskSrcData(), VConfigData())
26730cfbc0SXuan Hu  def VfRegSrcDataSet : Set[DataConfig] = Set(FpData(), VecData(), MaskSrcData(), VConfigData())
275d2b9cadSXuan Hu
285d2b9cadSXuan Hu  def RegDataMaxWidth : Int = RegSrcDataSet.map(_.dataWidth).max
29730cfbc0SXuan Hu}
30