1d387a573SXuan Hupackage xiangshan.backend.datapath 2d387a573SXuan Hu 3*bf35baadSXuan Huimport chipsalliance.rocketchip.config.Parameters 4*bf35baadSXuan Huimport chisel3._ 5*bf35baadSXuan Huimport chisel3.util._ 6*bf35baadSXuan Huimport xiangshan.backend.Bundles.IssueQueueWakeUpBundle 7d387a573SXuan Huimport xiangshan.backend.exu.ExeUnitParams 8d387a573SXuan Hu 9*bf35baadSXuan Huimport scala.language.higherKinds 10*bf35baadSXuan Hu 11*bf35baadSXuan Hutrait WakeUpPoint { 12*bf35baadSXuan Hu val name: String 13*bf35baadSXuan Hu 14*bf35baadSXuan Hu def getExuParam(exus: Seq[ExeUnitParams]) : ExeUnitParams = { 15*bf35baadSXuan Hu val filteredExus = exus.filter(_.name == this.name) 16*bf35baadSXuan Hu require(filteredExus.isEmpty, s"No exu named $name") 17*bf35baadSXuan Hu require(filteredExus.size > 1, s"Exu $name should be unique") 18*bf35baadSXuan Hu filteredExus.head 19*bf35baadSXuan Hu } 20d387a573SXuan Hu} 21d387a573SXuan Hu 22*bf35baadSXuan Huclass WakeUpSource(val name: String) extends WakeUpPoint { 23*bf35baadSXuan Hu def genIQWakeUpValidBundle(implicit p: Parameters): ValidIO[IssueQueueWakeUpBundle] = { 24*bf35baadSXuan Hu ValidIO(new IssueQueueWakeUpBundle(name)) 25d387a573SXuan Hu } 26d387a573SXuan Hu} 27*bf35baadSXuan Hu 28*bf35baadSXuan Huclass WakeUpSink(val name: String) extends WakeUpPoint 29*bf35baadSXuan Hu 30*bf35baadSXuan Huclass WakeUpConfig (val source: WakeUpSource, val sink: WakeUpSink) { 31*bf35baadSXuan Hu def this(pair: (String, String)) = { 32*bf35baadSXuan Hu this(new WakeUpSource(pair._1), new WakeUpSink(pair._2)) 33*bf35baadSXuan Hu } 34*bf35baadSXuan Hu 35*bf35baadSXuan Hu def this(source: String, sink: String) = { 36*bf35baadSXuan Hu this(new WakeUpSource(source), new WakeUpSink(sink)) 37*bf35baadSXuan Hu } 38*bf35baadSXuan Hu 39*bf35baadSXuan Hu override def toString: String = { 40*bf35baadSXuan Hu s"WakeUp(${source.name}->${sink.name})" 41*bf35baadSXuan Hu } 42*bf35baadSXuan Hu} 43*bf35baadSXuan Hu 44*bf35baadSXuan Huobject WakeUpConfig { 45*bf35baadSXuan Hu def apply(source: String, sink: String): WakeUpConfig = new WakeUpConfig(source, sink) 46*bf35baadSXuan Hu 47*bf35baadSXuan Hu def apply(pair: (String, String)): WakeUpConfig = new WakeUpConfig(pair) 48*bf35baadSXuan Hu} 49