xref: /XiangShan/src/main/scala/xiangshan/backend/issue/IssueQueue.scala (revision 57c4f8d6c40b210d99a6e8c1f324345547eb16db)
1package xiangshan.backend.issue
2
3import chisel3._
4import chisel3.util._
5import xiangshan._
6
7class IssueQueue(val fuTypeInt: BigInt, wakeupCnt: Int, val bypassCnt: Int) extends XSModule with NeedImpl {
8
9  val useBypass = bypassCnt > 0
10
11  val io = IO(new Bundle() {
12    // flush Issue Queue
13    val redirect = Flipped(ValidIO(new Redirect))
14
15    // enq Ctrl sigs at dispatch-2
16    val enqCtrl = Flipped(DecoupledIO(new MicroOp))
17    // enq Data at next cycle (regfile has 1 cycle latency)
18    val enqData = Flipped(ValidIO(new ExuInput))
19
20    //  broadcast selected uop to other issue queues which has bypasses
21    val selectedUop = if(useBypass) DecoupledIO(new MicroOp) else null
22
23    // send to exu
24    val deq = DecoupledIO(new ExuInput)
25
26    // listen to write back bus
27    val wakeUpPorts = Vec(wakeupCnt, Flipped(DecoupledIO(new ExuOutput)))
28
29    // use bypass uops to speculative wake-up
30    val bypassUops = if(useBypass) Vec(bypassCnt, Flipped(DecoupledIO(new MicroOp))) else null
31    val bypassData = if(useBypass) Vec(bypassCnt, Flipped(DecoupledIO(new ExuOutput))) else null
32  })
33}
34