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