xref: /XiangShan/src/main/scala/xiangshan/backend/datapath/WakeUpConfig.scala (revision 0c7ebb58175b51109677230e8cbab09e73166956)
1d387a573SXuan Hupackage xiangshan.backend.datapath
2d387a573SXuan Hu
3bf35baadSXuan Huimport chisel3.util._
4dd473fffSXuan Huimport xiangshan.backend.BackendParams
5c0be7f33SXuan 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)
15*0c7ebb58Sxiaofeibao-xjtu    require(filteredExus.nonEmpty, s"No exu named $name")
16*0c7ebb58Sxiaofeibao-xjtu    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 {
22c0be7f33SXuan Hu  def genIQWakeUpValidBundle(backendParam: BackendParams): ValidIO[IssueQueueIQWakeUpBundle] = {
23c0be7f33SXuan 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 {
44c0b91ca1SHaojin Tang  def apply(pair: (Seq[String], Seq[String])): Seq[WakeUpConfig] = for {
45c0b91ca1SHaojin Tang    source <- pair._1
46c0b91ca1SHaojin Tang    sink <- pair._2
47c0b91ca1SHaojin Tang  } yield new WakeUpConfig(source, sink)
48bf35baadSXuan Hu}
49