提交 e70312e7 编写于 作者: W William Wang

LoadQueue: fix rollback gen logic

Former rollback will now cancel later rollback correctly
上级 64f29f11
......@@ -68,4 +68,8 @@ trait HasCircularQueuePtrHelper {
def isAfter[T <: CircularQueuePtr](left: T, right: T): Bool = {
Mux(left.flag === right.flag, left.value > right.value, left.value < right.value)
}
def isBefore[T <: CircularQueuePtr](left: T, right: T): Bool = {
Mux(left.flag === right.flag, left.value < right.value, left.value > right.value)
}
}
......@@ -509,8 +509,8 @@ class LoadQueue extends XSModule
val rollbackValidVecChecked = Wire(Vec(3, Bool()))
for(((v, uop), idx) <- rollbackValidVec.zip(rollbackUopVec).zipWithIndex) {
rollbackValidVecChecked(idx) := v &&
(!lastCycleRedirect.valid || !isAfter(uop.roqIdx, lastCycleRedirect.bits.roqIdx)) &&
(!lastlastCycleRedirect.valid || !isAfter(uop.roqIdx, lastlastCycleRedirect.bits.roqIdx))
(!lastCycleRedirect.valid || isBefore(uop.roqIdx, lastCycleRedirect.bits.roqIdx)) &&
(!lastlastCycleRedirect.valid || isBefore(uop.roqIdx, lastlastCycleRedirect.bits.roqIdx))
}
io.rollback.bits.roqIdx := rollbackUop.roqIdx
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册