Skip to content

Commit 1fdb2fb

Browse files
committed
fix(lsu): now storebuffer's valid is correct
X-Actions-Control: difftest Signed-off-by: Woshiluo Luo <woshiluo.luo@outlook.com>
1 parent fd4247f commit 1fdb2fb

1 file changed

Lines changed: 11 additions & 12 deletions

File tree

rtl/src/backend/execute/fu/lsu/dcache/store/StoreBuffer.scala

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -87,19 +87,18 @@ class StoreBuffer(val parameter: LsuBlockParameter) extends Module {
8787
}
8888

8989
// Redirect
90-
val redirectValidList = VecInit((0 until parameter.bufferLength).map(i => {
91-
val currentPtr = headPtr + (parameter.bufferLength - i - 1).U
92-
bufferQueue(currentPtr.value).attr.valid &
93-
bufferQueue(currentPtr.value).attr.upstream.brIdx <= io.redirectPtr.bits &
94-
currentPtr < tailPtr
90+
val redirectList = VecInit((0 until parameter.bufferLength).map(i => {
91+
bufferQueue(i).attr.valid &
92+
bufferQueue(i).attr.upstream.brIdx > io.redirectPtr.bits &
93+
io.redirectPtr.valid
9594
}))
96-
val maxHeadPtrOffset =
97-
Mux(
98-
redirectValidList.asUInt.orR,
99-
PriorityEncoder(redirectValidList.asUInt),
100-
parameter.bufferLength.U)
101-
val maxTailPtr = headPtr + (parameter.bufferLength.U - maxHeadPtrOffset)
102-
val baseTailPtr = Mux(io.redirectPtr.valid, maxTailPtr, tailPtr)
95+
val redirectCount = PopCount(redirectList)
96+
for (i <- 0 until parameter.bufferLength) {
97+
when(redirectList(i)) {
98+
bufferQueue(i).attr.valid := false.B
99+
}
100+
}
101+
val baseTailPtr = tailPtr - redirectCount
103102

104103
// EnQueue
105104
private val canEnque =

0 commit comments

Comments
 (0)