提交 0e5209d0 编写于 作者: L Li Qianruo

Fix ROB enq and writeback logic not considering trigger hits

上级 052ee9a1
......@@ -727,8 +727,9 @@ class RobImp(outer: Rob)(implicit p: Parameters) extends LazyModuleImp(outer)
// enqueue logic set 6 writebacked to false
for (i <- 0 until RenameWidth) {
when (canEnqueue(i)) {
val enqHasException = ExceptionNO.selectFrontend(io.enq.req(i).bits.cf.exceptionVec)
writebacked(enqPtrVec(i).value) := io.enq.req(i).bits.eliminatedMove && !enqHasException.asUInt.orR
val enqHasException = ExceptionNO.selectFrontend(io.enq.req(i).bits.cf.exceptionVec).asUInt.orR
val enqHasTriggerHit = io.enq.req(i).bits.cf.trigger.getHitFrontend
writebacked(enqPtrVec(i).value) := io.enq.req(i).bits.eliminatedMove && !enqHasException && !enqHasTriggerHit
val isStu = io.enq.req(i).bits.ctrl.fuType === FuType.stu
store_data_writebacked(enqPtrVec(i).value) := !isStu
}
......@@ -743,9 +744,10 @@ class RobImp(outer: Rob)(implicit p: Parameters) extends LazyModuleImp(outer)
when (wb.valid) {
val wbIdx = wb.bits.uop.robIdx.value
val wbHasException = ExceptionNO.selectByExu(wb.bits.uop.cf.exceptionVec, cfgs).asUInt.orR
val wbHasTriggerHit = wb.bits.uop.cf.trigger.getHitBackend
val wbHasFlushPipe = cfgs.exists(_.flushPipe).B && wb.bits.uop.ctrl.flushPipe
val wbHasReplayInst = cfgs.exists(_.replayInst).B && wb.bits.uop.ctrl.replayInst
val block_wb = wbHasException || wbHasFlushPipe || wbHasReplayInst
val block_wb = wbHasException || wbHasFlushPipe || wbHasReplayInst || wbHasTriggerHit
writebacked(wbIdx) := !block_wb
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册