diff --git a/src/main/scala/rocket/DCache.scala b/src/main/scala/rocket/DCache.scala index 39989c9d..f27b48b3 100644 --- a/src/main/scala/rocket/DCache.scala +++ b/src/main/scala/rocket/DCache.scala @@ -354,8 +354,8 @@ class DCacheModule(outer: DCache) extends HellaCacheModule(outer) { val pstore1_merge_likely = s2_valid && s2_write && s2_store_merge val pstore1_merge = s2_store_valid && s2_store_merge val pstore2_valid = Reg(Bool()) - val pstore_drain_opportunistic = !(io.cpu.req.valid && likelyNeedsRead(io.cpu.req.bits)) - val pstore_drain_on_miss = releaseInFlight + val pstore_drain_opportunistic = !(io.cpu.req.valid && likelyNeedsRead(io.cpu.req.bits)) && !(s1_valid && s1_waw_hazard) + val pstore_drain_on_miss = releaseInFlight || RegNext(io.cpu.s2_nack) val pstore1_held = Reg(Bool()) val pstore1_valid_likely = s2_valid && s2_write || pstore1_held val pstore1_valid_pre_kill = s2_store_valid_pre_kill || pstore1_held