xref: /XiangShan/src/main/scala/xiangshan/backend/datapath/DataConfig.scala (revision 4daa5bf3c3f27e7fd090866d52405b21e107eb8d)
1package xiangshan.backend.datapath
2
3object DataConfig {
4  sealed abstract class DataConfig (
5    val name: String,
6    val dataWidth: Int,
7  ) {
8    override def toString: String = name
9  }
10
11  case class IntData() extends DataConfig("int", 64)
12  case class FpData() extends DataConfig("fp", 64)
13  case class VecData() extends DataConfig("vec", 128)
14  case class ImmData(len: Int) extends DataConfig("int", len)
15  case class VAddrData() extends DataConfig("vaddr", 39) // Todo: associate it with the width of vaddr
16  case class MaskSrcData() extends DataConfig("masksrc", VecData().dataWidth) // 128
17  case class MaskDstData() extends DataConfig("maskdst", VecData().dataWidth / 8) // 16
18  case class VConfigData() extends DataConfig("vconfig", VecData().dataWidth) // Todo: use 16 bit instead
19  case class FakeIntData() extends DataConfig("fakeint", 64)
20  case class NoData() extends DataConfig("nodata", 0)
21
22  def RegSrcDataSet   : Set[DataConfig] = Set(IntData(), FpData(), VecData(), MaskSrcData(), VConfigData())
23  def IntRegSrcDataSet: Set[DataConfig] = Set(IntData())
24  def FpRegSrcDataSet : Set[DataConfig] = Set(FpData())
25  def VecRegSrcDataSet: Set[DataConfig] = Set(VecData(), MaskSrcData(), VConfigData())
26  def VfRegSrcDataSet : Set[DataConfig] = Set(VecData(), MaskSrcData(), VConfigData())
27
28  def RegDataMaxWidth : Int = RegSrcDataSet.map(_.dataWidth).max
29}
30