Split tl*OpcodeIsStore out to global scope

This commit is contained in:
Hansung Kim
2023-04-20 21:42:56 -07:00
parent de6d6eee1a
commit a9719d5e36

View File

@@ -207,9 +207,9 @@ class CoalescingUnitImp(outer: CoalescingUnit, numLanes: Int) extends LazyModule
coalReqAddress := (0xabcd.U + coalSourceId) << 4 coalReqAddress := (0xabcd.U + coalSourceId) << 4
// FIXME: bogus coalescing logic: coalesce whenever all 4 lanes have valid // FIXME: bogus coalescing logic: coalesce whenever all 4 lanes have valid
// queue head // queue head
// coalReqValid := reqQueues(0).io.deq.valid && reqQueues(1).io.deq.valid && coalReqValid := reqQueues(0).io.deq.valid && reqQueues(1).io.deq.valid &&
// reqQueues(2).io.deq.valid && reqQueues(3).io.deq.valid reqQueues(2).io.deq.valid && reqQueues(3).io.deq.valid
coalReqValid := false.B // coalReqValid := false.B
when(coalReqValid) { when(coalReqValid) {
// invalidate original requests due to coalescing // invalidate original requests due to coalescing
// FIXME: bogus // FIXME: bogus
@@ -588,6 +588,23 @@ class CoalShiftQueue[T <: Data](
io.count := PopCount(io.mask) io.count := PopCount(io.mask)
} }
object TLUtils {
def AOpcodeIsStore(opcode: UInt): Bool = {
assert(
opcode === TLMessages.PutFullData || opcode === TLMessages.Get,
"unhandled TL A opcode found"
)
opcode === TLMessages.PutFullData
}
def DOpcodeIsStore(opcode: UInt): Bool = {
assert(
opcode === TLMessages.AccessAck || opcode === TLMessages.AccessAckData,
"unhandled TL D opcode found"
)
opcode === TLMessages.AccessAck
}
}
class MemTraceDriver(numLanes: Int = 4, filename: String = "vecadd.core1.thread4.trace")(implicit class MemTraceDriver(numLanes: Int = 4, filename: String = "vecadd.core1.thread4.trace")(implicit
p: Parameters p: Parameters
) extends LazyModule { ) extends LazyModule {
@@ -803,21 +820,6 @@ class MemTraceLogger(
"`numLanes` does not match the number of TL edges connected to the MemTraceLogger" "`numLanes` does not match the number of TL edges connected to the MemTraceLogger"
) )
def tlAOpcodeIsStore(opcode: UInt): Bool = {
assert(
opcode === TLMessages.PutFullData || opcode === TLMessages.Get,
"unhandled TL A opcode found"
)
opcode === TLMessages.PutFullData
}
def tlDOpcodeIsStore(opcode: UInt): Bool = {
assert(
opcode === TLMessages.AccessAck || opcode === TLMessages.AccessAckData,
"unhandled TL D opcode found"
)
opcode === TLMessages.AccessAck
}
// snoop on the TileLink edges to log traffic // snoop on the TileLink edges to log traffic
((node.in zip node.out) zip (laneReqs zip laneResps)).foreach { ((node.in zip node.out) zip (laneReqs zip laneResps)).foreach {
case (((tlIn, _), (tlOut, _)), (req, resp)) => case (((tlIn, _), (tlOut, _)), (req, resp)) =>
@@ -828,7 +830,7 @@ class MemTraceLogger(
// //
req.valid := tlIn.a.valid req.valid := tlIn.a.valid
req.size := tlIn.a.bits.size req.size := tlIn.a.bits.size
req.is_store := tlAOpcodeIsStore(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
// TL always carries the exact unaligned address that the client // TL always carries the exact unaligned address that the client
// originally requested, so no postprocessing required // originally requested, so no postprocessing required
@@ -867,7 +869,7 @@ class MemTraceLogger(
// //
resp.valid := tlOut.d.valid resp.valid := tlOut.d.valid
resp.size := tlOut.d.bits.size resp.size := tlOut.d.bits.size
resp.is_store := tlDOpcodeIsStore(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
// NOTE: TL D channel doesn't carry address nor mask, so there's no easy // NOTE: TL D channel doesn't carry address nor mask, so there's no easy
// way to figure out which bytes the master actually use. Since we // way to figure out which bytes the master actually use. Since we