1*730cfbc0SXuan Hupackage xiangshan.backend.issue 2*730cfbc0SXuan Hu 3*730cfbc0SXuan Huimport chipsalliance.rocketchip.config.Parameters 4*730cfbc0SXuan Huimport chisel3._ 5*730cfbc0SXuan Huimport chisel3.util._ 6*730cfbc0SXuan Huimport utility.SelectOne 7*730cfbc0SXuan Huimport xiangshan.XSModule 8*730cfbc0SXuan Hu 9*730cfbc0SXuan Huclass EnqPolicyIO(implicit p: IssueBlockParams) extends Bundle { 10*730cfbc0SXuan Hu val valid = Input(UInt(p.numEntries.W)) 11*730cfbc0SXuan Hu val enqSelOHVec = Vec(p.numEnq, ValidIO(UInt(p.numEntries.W))) 12*730cfbc0SXuan Hu} 13*730cfbc0SXuan Hu 14*730cfbc0SXuan Huclass EnqPolicy(implicit p: Parameters, iqP: IssueBlockParams) extends XSModule { 15*730cfbc0SXuan Hu val io = IO(new EnqPolicyIO) 16*730cfbc0SXuan Hu 17*730cfbc0SXuan Hu val emptyVec = io.valid.asBools.map(!_) 18*730cfbc0SXuan Hu // Todo: support more policies 19*730cfbc0SXuan Hu val selVec: Seq[(Bool, Vec[Bool])] = io.enqSelOHVec.indices.map(i => SelectOne("circ", emptyVec, iqP.numEnq).getNthOH(i + 1)) 20*730cfbc0SXuan Hu 21*730cfbc0SXuan Hu io.enqSelOHVec.zip(selVec).foreach { case (enqOH, (selValid, selOH)) => 22*730cfbc0SXuan Hu enqOH.valid := selValid 23*730cfbc0SXuan Hu enqOH.bits := selOH.asUInt 24*730cfbc0SXuan Hu } 25*730cfbc0SXuan Hu} 26