From d56981a0b1b9d95615f75808e01b8cab450ba235 Mon Sep 17 00:00:00 2001 From: Hansung Kim Date: Sun, 21 Jan 2024 15:33:15 -0800 Subject: [PATCH] Fix io.finished of MemTraceDriver not waiting for inflight responses --- .../scala/radiance/memory/Coalescing.scala | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/scala/radiance/memory/Coalescing.scala b/src/main/scala/radiance/memory/Coalescing.scala index 9faa512..66cefe7 100644 --- a/src/main/scala/radiance/memory/Coalescing.scala +++ b/src/main/scala/radiance/memory/Coalescing.scala @@ -1130,10 +1130,10 @@ class CoalescingUnitImp(outer: CoalescingUnit, config: CoalescerConfig) (sameLaneEnqPorts zip sameLaneUncoalResps).foreach { case (enqPort, uncoalResp) => { enqPort <> uncoalResp - // assert( - // enqPort.ready, - // cf"respQueue: enq port for uncoalesced response is blocked on lane $lane" - // ) + + when(!enqPort.ready) { + printf(s"respQueue: enq port for uncoalesced response is blocked on lane ${lane}\n") + } } } } @@ -1676,19 +1676,19 @@ class MemTraceDriverImp( dontTouch(tlOut.d) } - // Give some slack time after trace EOF to get some outstanding responses - // back. val traceFinished = RegInit(false.B) when(sim.io.trace_read.finished) { traceFinished := true.B } - io.finished := traceFinished - // currently the .cc file ouptuts finished=true while it still need to issue one more request + // ensure no more new requests OR inflight requests are remaining val noValidReqs = sim.io.trace_read.valid === 0.U val allReqReclaimed = !(sourceGens.map(_.io.inflight).reduce(_ || _)) - when(traceFinished && allReqReclaimed && noValidReqs) { + io.finished := traceFinished && allReqReclaimed && noValidReqs + + // FIXME + when(io.finished) { assert( false.B, "\n\n\nsimulation Successfully finished\n\n\n (this assertion intentional fail upon MemTracer termination)"