xref: /XiangShan/src/main/scala/xiangshan/backend/datapath/WakeUpConfig.scala (revision ec49b127142e4bf028fe7f0b3d48fdb5f520f81c)
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