Fix io.finished of MemTraceDriver not waiting for inflight responses

This commit is contained in:
Hansung Kim
2024-01-21 15:33:15 -08:00
parent e183606193
commit d56981a0b1

View File

@@ -1130,10 +1130,10 @@ class CoalescingUnitImp(outer: CoalescingUnit, config: CoalescerConfig)
(sameLaneEnqPorts zip sameLaneUncoalResps).foreach { (sameLaneEnqPorts zip sameLaneUncoalResps).foreach {
case (enqPort, uncoalResp) => { case (enqPort, uncoalResp) => {
enqPort <> uncoalResp enqPort <> uncoalResp
// assert(
// enqPort.ready, when(!enqPort.ready) {
// cf"respQueue: enq port for uncoalesced response is blocked on lane $lane" printf(s"respQueue: enq port for uncoalesced response is blocked on lane ${lane}\n")
// ) }
} }
} }
} }
@@ -1676,19 +1676,19 @@ class MemTraceDriverImp(
dontTouch(tlOut.d) dontTouch(tlOut.d)
} }
// Give some slack time after trace EOF to get some outstanding responses
// back.
val traceFinished = RegInit(false.B) val traceFinished = RegInit(false.B)
when(sim.io.trace_read.finished) { when(sim.io.trace_read.finished) {
traceFinished := true.B 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 noValidReqs = sim.io.trace_read.valid === 0.U
val allReqReclaimed = !(sourceGens.map(_.io.inflight).reduce(_ || _)) val allReqReclaimed = !(sourceGens.map(_.io.inflight).reduce(_ || _))
when(traceFinished && allReqReclaimed && noValidReqs) { io.finished := traceFinished && allReqReclaimed && noValidReqs
// FIXME
when(io.finished) {
assert( assert(
false.B, false.B,
"\n\n\nsimulation Successfully finished\n\n\n (this assertion intentional fail upon MemTracer termination)" "\n\n\nsimulation Successfully finished\n\n\n (this assertion intentional fail upon MemTracer termination)"