提交 e8747464 编写于 作者: J Jenius

discard iprefetch req when resource busy

上级 19d62fa1
...@@ -1014,6 +1014,7 @@ class Ftq(implicit p: Parameters) extends XSModule with HasCircularQueuePtrHelpe ...@@ -1014,6 +1014,7 @@ class Ftq(implicit p: Parameters) extends XSModule with HasCircularQueuePtrHelpe
} }
XSError(isBefore(bpuPtr, prefetchPtr) && !isFull(bpuPtr, prefetchPtr), "\nprefetchPtr is before bpuPtr!\n") XSError(isBefore(bpuPtr, prefetchPtr) && !isFull(bpuPtr, prefetchPtr), "\nprefetchPtr is before bpuPtr!\n")
XSError(isBefore(prefetchPtr, ifuPtr) && !isFull(ifuPtr, prefetchPtr), "\nifuPtr is before prefetchPtr!\n")
} }
else { else {
io.toPrefetch.req <> DontCare io.toPrefetch.req <> DontCare
......
...@@ -89,6 +89,8 @@ class IPrefetchPipe(implicit p: Parameters) extends IPrefetchModule ...@@ -89,6 +89,8 @@ class IPrefetchPipe(implicit p: Parameters) extends IPrefetchModule
val p0_valid = fromFtq.req.valid val p0_valid = fromFtq.req.valid
val p0_vaddr = addrAlign(fromFtq.req.bits.target, blockBytes, VAddrBits) val p0_vaddr = addrAlign(fromFtq.req.bits.target, blockBytes, VAddrBits)
p0_fire := p0_valid && p1_ready && toITLB.fire() && !fromITLB.bits.miss && toIMeta.ready && enableBit p0_fire := p0_valid && p1_ready && toITLB.fire() && !fromITLB.bits.miss && toIMeta.ready && enableBit
//discard req when source not ready
// p0_discard := p0_valid && ((toITLB.fire() && fromITLB.bits.miss) || !toIMeta.ready || !enableBit)
toIMeta.valid := p0_valid toIMeta.valid := p0_valid
toIMeta.bits.vSetIdx(0) := get_idx(p0_vaddr) toIMeta.bits.vSetIdx(0) := get_idx(p0_vaddr)
...@@ -108,7 +110,7 @@ class IPrefetchPipe(implicit p: Parameters) extends IPrefetchModule ...@@ -108,7 +110,7 @@ class IPrefetchPipe(implicit p: Parameters) extends IPrefetchModule
fromITLB.ready := true.B fromITLB.ready := true.B
fromFtq.req.ready := (!enableBit || (enableBit && p3_ready)) && toIMeta.ready //&& GTimer() > 500.U fromFtq.req.ready := true.B //(!enableBit || (enableBit && p3_ready)) && toIMeta.ready //&& GTimer() > 500.U
/** Prefetch Stage 1: cache probe filter */ /** Prefetch Stage 1: cache probe filter */
val p1_valid = generatePipeControl(lastFire = p0_fire, thisFire = p1_fire || p1_discard, thisFlush = false.B, lastFlush = false.B) val p1_valid = generatePipeControl(lastFire = p0_fire, thisFire = p1_fire || p1_discard, thisFlush = false.B, lastFlush = false.B)
...@@ -178,7 +180,7 @@ class IPrefetchPipe(implicit p: Parameters) extends IPrefetchModule ...@@ -178,7 +180,7 @@ class IPrefetchPipe(implicit p: Parameters) extends IPrefetchModule
val p3_hit_dir = VecInit((0 until nPrefetchEntries).map(i => prefetch_dir(i).valid && prefetch_dir(i).paddr === p3_paddr )).reduce(_||_) val p3_hit_dir = VecInit((0 until nPrefetchEntries).map(i => prefetch_dir(i).valid && prefetch_dir(i).paddr === p3_paddr )).reduce(_||_)
p3_discard := p3_hit_dir || p3_check_in_mshr p3_discard := p3_hit_dir || p3_check_in_mshr || (p3_valid && enableBit && !toMissUnit.enqReq.ready)
toMissUnit.enqReq.valid := p3_valid && enableBit && !p3_discard toMissUnit.enqReq.valid := p3_valid && enableBit && !p3_discard
toMissUnit.enqReq.bits.paddr := p3_paddr toMissUnit.enqReq.bits.paddr := p3_paddr
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册