xref: /XiangShan/src/main/scala/xiangshan/backend/datapath/DataConfig.scala (revision 5d2b9cad647cd0cbcbbe806f2f733d2b9ec0863a)
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 NoData() extends DataConfig("nodata", 0)
20
21  def RegSrcDataSet   : Set[DataConfig] = Set(IntData(), FpData(), VecData(), MaskSrcData(), VConfigData())
22  def IntRegSrcDataSet: Set[DataConfig] = Set(IntData())
23  def FpRegSrcDataSet : Set[DataConfig] = Set(FpData())
24  def VecRegSrcDataSet: Set[DataConfig] = Set(VecData(), MaskSrcData(), VConfigData())
25  def VfRegSrcDataSet : Set[DataConfig] = Set(FpData(), VecData(), MaskSrcData(), VConfigData())
26
27  def RegDataMaxWidth : Int = RegSrcDataSet.map(_.dataWidth).max
28}
29