Fix CoalShiftQueue invalidate logic

IO type change to Valid[UInt] was not reflected in the valid bit logic.
This commit is contained in:
Hansung Kim
2023-04-24 14:01:11 -07:00
parent 7539c39c45
commit 31e04e9402
2 changed files with 30 additions and 23 deletions

View File

@@ -13,6 +13,7 @@ import freechips.rocketchip.unittest._
trait InFlightTableSizeEnum extends ChiselEnum {
val INVALID: Type
val FOUR: Type
def logSizeToEnum(x: UInt): Type
def enumToLogSize(x: Type): UInt
}
@@ -184,7 +185,7 @@ class CoalShiftQueue[T <: Data](
if (i == -1) true.B else if (i == entries) false.B else mask(i)
}
def paddedUsed = pad({ i: Int => used(i) })
def validAfterInv(i: Int) = valid(i) && !io.invalidate.bits(i)
def validAfterInv(i: Int) = valid(i) && (!io.invalidate.valid || !io.invalidate.bits(i))
val shift = (used =/= 0.U) && (io.queue.deq.ready || !validAfterInv(0))
for (i <- 0 until entries) {