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