Only write in MemTraceLogger when TL fire

Without this we log extraneous lines that were valid but not transacted with the
downstream as it was not ready, which affects validity of memtrace testing.
This commit is contained in:
Hansung Kim
2023-05-08 14:26:05 -07:00
parent 6755cb3eec
commit 8cdbc81bdd

View File

@@ -1334,7 +1334,9 @@ class MemTraceLogger(
// requests on TL A channel // requests on TL A channel
// //
req.valid := tlIn.a.valid // Only log trace when fired, e.g. both upstream and downstream is ready
// and transaction happened.
req.valid := tlIn.a.fire
req.size := tlIn.a.bits.size req.size := tlIn.a.bits.size
req.is_store := TLUtils.AOpcodeIsStore(tlIn.a.bits.opcode) req.is_store := TLUtils.AOpcodeIsStore(tlIn.a.bits.opcode)
req.source := tlIn.a.bits.source req.source := tlIn.a.bits.source
@@ -1378,7 +1380,9 @@ class MemTraceLogger(
// responses on TL D channel // responses on TL D channel
// //
resp.valid := tlOut.d.valid // Only log trace when fired, e.g. both upstream and downstream is ready
// and transaction happened.
resp.valid := tlOut.d.fire
resp.size := tlOut.d.bits.size resp.size := tlOut.d.bits.size
resp.is_store := TLUtils.DOpcodeIsStore(tlOut.d.bits.opcode) resp.is_store := TLUtils.DOpcodeIsStore(tlOut.d.bits.opcode)
resp.source := tlOut.d.bits.source resp.source := tlOut.d.bits.source
@@ -1412,7 +1416,7 @@ class MemTraceLogger(
// //
// This is a clunky workaround of the fact that Chisel doesn't allow partial // This is a clunky workaround of the fact that Chisel doesn't allow partial
// assignment to a bitfield range of a wide signal. // assignment to a bitfield range of a wide signal.
def flattenTrace(traceLogIO: Bundle with HasTraceLine, perLane: Vec[TraceLine]) = { def flattenTrace(simIO: Bundle with HasTraceLine, perLane: Vec[TraceLine]) = {
// these will get optimized out // these will get optimized out
val vecValid = Wire(Vec(numLanes, chiselTypeOf(perLane(0).valid))) val vecValid = Wire(Vec(numLanes, chiselTypeOf(perLane(0).valid)))
val vecSource = Wire(Vec(numLanes, chiselTypeOf(perLane(0).source))) val vecSource = Wire(Vec(numLanes, chiselTypeOf(perLane(0).source)))
@@ -1428,12 +1432,12 @@ class MemTraceLogger(
vecSize(i) := l.size vecSize(i) := l.size
vecData(i) := l.data vecData(i) := l.data
} }
traceLogIO.valid := vecValid.asUInt simIO.valid := vecValid.asUInt
traceLogIO.source := vecSource.asUInt simIO.source := vecSource.asUInt
traceLogIO.address := vecAddress.asUInt simIO.address := vecAddress.asUInt
traceLogIO.is_store := vecIsStore.asUInt simIO.is_store := vecIsStore.asUInt
traceLogIO.size := vecSize.asUInt simIO.size := vecSize.asUInt
traceLogIO.data := vecData.asUInt simIO.data := vecData.asUInt
} }
if (simReq.isDefined) { if (simReq.isDefined) {