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