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 {
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)"