From 7a32abba579fd6c56ae0e07e2c17abec7e8211d9 Mon Sep 17 00:00:00 2001 From: Liphen Date: Sat, 20 Jan 2024 17:57:01 +0800 Subject: [PATCH] =?UTF-8?q?fix(dcache):=20wait=E7=8A=B6=E6=80=81=E8=BD=AC?= =?UTF-8?q?=E7=A7=BB=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- chisel/playground/src/cache/DCache.scala | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/chisel/playground/src/cache/DCache.scala b/chisel/playground/src/cache/DCache.scala index 9348246..8438277 100644 --- a/chisel/playground/src/cache/DCache.scala +++ b/chisel/playground/src/cache/DCache.scala @@ -331,7 +331,9 @@ class DCache(cacheConfig: CacheConfig)(implicit cpuConfig: CpuConfig) extends Mo writeFifo.io.enq.bits.strb := io.cpu.wstrb writeFifo.io.enq.bits.data := io.cpu.wdata - state := s_wait + when(!io.cpu.complete_single_request) { + state := s_wait + } } }.elsewhen(!writeFifo_busy) { ar.addr := io.cpu.tlb.paddr @@ -351,7 +353,7 @@ class DCache(cacheConfig: CacheConfig)(implicit cpuConfig: CpuConfig) extends Mo (0 until nbank).map(i => bank_replication(i) := data(i)(replace_way)) } }.otherwise { - when(io.cpu.dcache_ready) { + when(!dcache_stall) { // update lru and mark dirty replace_way := ~select_way when(io.cpu.wen.orR) { @@ -619,9 +621,9 @@ class DCache(cacheConfig: CacheConfig)(implicit cpuConfig: CpuConfig) extends Mo (vpn_index === 2.U) -> vpn.vpn2 ) ) - val ptw_addr = paddrApply(ppn, vpnn).asTypeOf(pAddr) - val uncached = AddressSpace.isMMIO(ptw_addr.asUInt) - when(uncached) { + val ptw_addr = paddrApply(ppn, vpnn).asTypeOf(pAddr) + val pte_uncached = AddressSpace.isMMIO(ptw_addr.asUInt) + when(pte_uncached) { arvalid := true.B ar.addr := ptw_addr.asUInt ar.size := log2Ceil(AXI_DATA_WID / 8).U // 一个pte的大小是8字节