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