xref: /XiangShan/src/main/scala/xiangshan/backend/datapath/DataConfig.scala (revision 2aa3a76140dbd5875aa34625a2e1495c0cd33d92)
1730cfbc0SXuan Hupackage xiangshan.backend.datapath
2730cfbc0SXuan Hu
3*2aa3a761Ssinsanctionimport chisel3.util.log2Up
4*2aa3a761Ssinsanction
5730cfbc0SXuan Huobject DataConfig {
6730cfbc0SXuan Hu  sealed abstract class DataConfig (
7730cfbc0SXuan Hu    val name: String,
8730cfbc0SXuan Hu    val dataWidth: Int,
9730cfbc0SXuan Hu  ) {
10730cfbc0SXuan Hu    override def toString: String = name
11730cfbc0SXuan Hu  }
12730cfbc0SXuan Hu
13730cfbc0SXuan Hu  case class IntData() extends DataConfig("int", 64)
14730cfbc0SXuan Hu  case class FpData() extends DataConfig("fp", 64)
15730cfbc0SXuan Hu  case class VecData() extends DataConfig("vec", 128)
16730cfbc0SXuan Hu  case class ImmData(len: Int) extends DataConfig("int", len)
17730cfbc0SXuan Hu  case class VAddrData() extends DataConfig("vaddr", 39) // Todo: associate it with the width of vaddr
18730cfbc0SXuan Hu  case class MaskSrcData() extends DataConfig("masksrc", VecData().dataWidth) // 128
19*2aa3a761Ssinsanction  // case class MaskDstData() extends DataConfig("maskdst", VecData().dataWidth / 8) // 16
20*2aa3a761Ssinsanction  case class VConfigData() extends DataConfig("vconfig", log2Up(VecData().dataWidth) + 1 ) // 8
215edcc45fSHaojin Tang  case class FakeIntData() extends DataConfig("fakeint", 64)
22730cfbc0SXuan Hu  case class NoData() extends DataConfig("nodata", 0)
23730cfbc0SXuan Hu
24730cfbc0SXuan Hu  def RegSrcDataSet   : Set[DataConfig] = Set(IntData(), FpData(), VecData(), MaskSrcData(), VConfigData())
25730cfbc0SXuan Hu  def IntRegSrcDataSet: Set[DataConfig] = Set(IntData())
26730cfbc0SXuan Hu  def FpRegSrcDataSet : Set[DataConfig] = Set(FpData())
27*2aa3a761Ssinsanction  def VecRegSrcDataSet: Set[DataConfig] = Set(VecData())
28*2aa3a761Ssinsanction  def VfRegSrcDataSet : Set[DataConfig] = Set(VecData())
29*2aa3a761Ssinsanction  def V0RegSrcDataSet : Set[DataConfig] = Set(MaskSrcData())
30*2aa3a761Ssinsanction  def VlRegSrcDataSet : Set[DataConfig] = Set(VConfigData())
31*2aa3a761Ssinsanction
325d2b9cadSXuan Hu
335d2b9cadSXuan Hu  def RegDataMaxWidth : Int = RegSrcDataSet.map(_.dataWidth).max
34730cfbc0SXuan Hu}
35