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