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