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