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