From d87618955ed6465eb6bfd7c42bb3fcc0988b460a Mon Sep 17 00:00:00 2001 From: Anzo <126764519+Anzooooo@users.noreply.github.com> Date: Tue, 26 Nov 2024 10:10:25 +0800 Subject: [PATCH] fix(VMergeBuffer): `uopFinish` should not be set when redirect (#3924) If `uopFinish` is set when redirecting, it may cause incorrect dequeuing and enqueuing conflicts, which may cause `allocated` to be unable to be set correctly. --- src/main/scala/xiangshan/mem/vector/VMergeBuffer.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/scala/xiangshan/mem/vector/VMergeBuffer.scala b/src/main/scala/xiangshan/mem/vector/VMergeBuffer.scala index 1f87b7c0329..bbe85a3c278 100644 --- a/src/main/scala/xiangshan/mem/vector/VMergeBuffer.scala +++ b/src/main/scala/xiangshan/mem/vector/VMergeBuffer.scala @@ -314,7 +314,7 @@ abstract class BaseVMergeBuffer(isVStore: Boolean=false)(implicit p: Parameters) //uopwriteback(deq) for (i <- 0 until uopSize){ - when(allocated(i) && entries(i).allReady()){ + when(allocated(i) && entries(i).allReady() && !needCancel(i)){ uopFinish(i) := true.B } }