From 73dae29bbc6d26018f2157e8b9b333b817df89cd Mon Sep 17 00:00:00 2001 From: wangkaifan Date: Tue, 1 Nov 2022 19:35:57 +0800 Subject: [PATCH] mshralloc: restrict the condition of nestC * When an A request has already been nested by B, it depends on * status of bc-mshr to allow C request to be double nested --- src/main/scala/huancun/MSHRAlloc.scala | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/main/scala/huancun/MSHRAlloc.scala b/src/main/scala/huancun/MSHRAlloc.scala index d4b602b71..fd2d02fe2 100644 --- a/src/main/scala/huancun/MSHRAlloc.scala +++ b/src/main/scala/huancun/MSHRAlloc.scala @@ -90,17 +90,18 @@ class MSHRAlloc(implicit p: Parameters) extends HuanCunModule { val conflict_b = b_match_vec.asUInt().orR() val conflict_a = a_match_vec.asUInt().orR() - val may_nestC = (c_match_vec.asUInt() & nestC_vec.asUInt()).orR() + val abc_mshr_status = io.status.init.init + val bc_mshr_status = io.status.init.last + val c_mshr_status = io.status.last + + val double_nest = Cat(c_match_vec.init.init).orR() && c_match_vec.init.last + val may_nestC = (c_match_vec.asUInt() & nestC_vec.asUInt()).orR() && !(double_nest && !bc_mshr_status.bits.nestC) val may_nestB = (b_match_vec.asUInt() & nestB_vec.asUInt()).orR() val abc_mshr_alloc = io.alloc.init.init val bc_mshr_alloc = io.alloc.init.last val c_mshr_alloc = io.alloc.last - val abc_mshr_status = io.status.init.init - val bc_mshr_status = io.status.init.last - val c_mshr_status = io.status.last - val nestC = may_nestC && !c_mshr_status.valid val nestB = may_nestB && !bc_mshr_status.valid && !c_mshr_status.valid