From 51e7d219d12ab557ee0c0c697ed8db83ffb47d42 Mon Sep 17 00:00:00 2001 From: Lemover <35767095+Lemover@users.noreply.github.com> Date: Wed, 10 Mar 2021 08:25:31 +0800 Subject: [PATCH] TLB: fix bug that mixing elsewhen and when causes waiting error (#674) --- src/main/scala/xiangshan/cache/TLB.scala | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/scala/xiangshan/cache/TLB.scala b/src/main/scala/xiangshan/cache/TLB.scala index bc03bc4f8..df05f97f0 100644 --- a/src/main/scala/xiangshan/cache/TLB.scala +++ b/src/main/scala/xiangshan/cache/TLB.scala @@ -481,9 +481,12 @@ class TLB(Width: Int, isDtlb: Boolean) extends TlbModule with HasCSRConst{ val waiting = RegInit(false.B) when (ptw.req.fire()) { waiting := true.B - }.elsewhen (sfence.valid || ptw.resp.valid) { + } + when (sfence.valid || ptw.resp.valid) { waiting := false.B } + assert(!ptw.resp.valid || waiting) + // ptw <> DontCare // TODO: need check it ptw.req.valid := hasMissReq && !waiting && !RegNext(refill) ptw.resp.ready := waiting -- GitLab