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