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