xref: /XiangShan/src/main/scala/xiangshan/backend/issue/DeqPolicy.scala (revision 83ba63b34cf09b33c0a9e1b3203138e51af4491b)
1package xiangshan.backend.issue
2
3import org.chipsalliance.cde.config.Parameters
4import chisel3._
5import chisel3.util._
6import utility.SelectOne
7import xiangshan.XSModule
8
9class DeqPolicyIO(implicit p: IssueBlockParams) extends Bundle {
10  val request = Input(UInt(p.numEntries.W))
11  val deqSelOHVec = Vec(p.numDeq, ValidIO(UInt(p.numEntries.W)))
12}
13
14class DeqPolicy(implicit p: Parameters, iqP: IssueBlockParams) extends XSModule {
15  val io = IO(new DeqPolicyIO)
16
17  private val requestVec = VecInit(io.request.asBools)
18  // Todo: support more policies
19  private val selVec: Seq[(Bool, Vec[Bool])] = io.deqSelOHVec.indices.map(i => SelectOne("circ", requestVec, iqP.numDeq).getNthOH(i + 1))
20
21  io.deqSelOHVec.zip(selVec).foreach { case (deqOH, (selValid, selOH)) =>
22    deqOH.valid := selValid
23    deqOH.bits := selOH.asUInt
24  }
25}
26