xref: /XiangShan/src/main/scala/xiangshan/backend/issue/EnqPolicy.scala (revision 83ba63b34cf09b33c0a9e1b3203138e51af4491b)
1730cfbc0SXuan Hupackage xiangshan.backend.issue
2730cfbc0SXuan Hu
3*83ba63b3SXuan Huimport org.chipsalliance.cde.config.Parameters
4730cfbc0SXuan Huimport chisel3._
5730cfbc0SXuan Huimport chisel3.util._
6730cfbc0SXuan Huimport utility.SelectOne
7730cfbc0SXuan Huimport xiangshan.XSModule
8730cfbc0SXuan Hu
9730cfbc0SXuan Huclass EnqPolicyIO(implicit p: IssueBlockParams) extends Bundle {
105db4956bSzhanglyGit  val valid = Input(UInt((p.numEntries-p.numEnq).W))
115db4956bSzhanglyGit  val enqSelOHVec = Vec(p.numEnq, ValidIO(UInt((p.numEntries-p.numEnq).W)))
12730cfbc0SXuan Hu}
13730cfbc0SXuan Hu
14730cfbc0SXuan Huclass EnqPolicy(implicit p: Parameters, iqP: IssueBlockParams) extends XSModule {
15730cfbc0SXuan Hu  val io = IO(new EnqPolicyIO)
16730cfbc0SXuan Hu
17730cfbc0SXuan Hu  val emptyVec = io.valid.asBools.map(!_)
18730cfbc0SXuan Hu  // Todo: support more policies
19730cfbc0SXuan Hu  val selVec: Seq[(Bool, Vec[Bool])] = io.enqSelOHVec.indices.map(i => SelectOne("circ", emptyVec, iqP.numEnq).getNthOH(i + 1))
20730cfbc0SXuan Hu
21730cfbc0SXuan Hu  io.enqSelOHVec.zip(selVec).foreach { case (enqOH, (selValid, selOH)) =>
22730cfbc0SXuan Hu    enqOH.valid := selValid
23730cfbc0SXuan Hu    enqOH.bits := selOH.asUInt
24730cfbc0SXuan Hu  }
25730cfbc0SXuan Hu}
26