xref: /XiangShan/src/main/scala/utils/TLDump.scala (revision e2801f9751af7390b9496601ccf3fda95fb70430)
1*e2801f97Slinjiaweipackage utils
2*e2801f97Slinjiawei
3*e2801f97Slinjiaweiimport chisel3._
4*e2801f97Slinjiaweiimport freechips.rocketchip.tilelink.{TLBundle, TLBundleA, TLBundleB, TLBundleC, TLBundleD, TLBundleE, TLChannel}
5*e2801f97Slinjiawei
6*e2801f97Slinjiaweitrait HasTLDump {
7*e2801f97Slinjiawei
8*e2801f97Slinjiawei  implicit class dumpA(a: TLBundleA) {
9*e2801f97Slinjiawei    def dump =
10*e2801f97Slinjiawei      printf(
11*e2801f97Slinjiawei        s"${a.channelName} opcode: %x param: %x size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n",
12*e2801f97Slinjiawei        a.opcode, a.param, a.size, a.source, a.address, a.mask, a.data, a.corrupt
13*e2801f97Slinjiawei      )
14*e2801f97Slinjiawei  }
15*e2801f97Slinjiawei
16*e2801f97Slinjiawei  implicit class dumpB(b: TLBundleB) {
17*e2801f97Slinjiawei    def dump =
18*e2801f97Slinjiawei      printf(
19*e2801f97Slinjiawei        s"${b.channelName} opcode: %x param: %x size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n",
20*e2801f97Slinjiawei        b.opcode, b.param, b.size, b.source, b.address, b.mask, b.data, b.corrupt
21*e2801f97Slinjiawei      )
22*e2801f97Slinjiawei  }
23*e2801f97Slinjiawei
24*e2801f97Slinjiawei  implicit class dumpC(c: TLBundleC) {
25*e2801f97Slinjiawei    def dump =
26*e2801f97Slinjiawei      printf(
27*e2801f97Slinjiawei        s"${c.channelName} opcode: %x param: %x size: %x source: %d address: %x data: %x corrupt: %b\n",
28*e2801f97Slinjiawei        c.opcode, c.param, c.size, c.source, c.address, c.data, c.corrupt
29*e2801f97Slinjiawei      )
30*e2801f97Slinjiawei  }
31*e2801f97Slinjiawei
32*e2801f97Slinjiawei  implicit class dumpD(d: TLBundleD) {
33*e2801f97Slinjiawei    def dump =
34*e2801f97Slinjiawei      printf(
35*e2801f97Slinjiawei        s"${d.channelName} opcode: %x param: %x size: %x source: %d sink: %d denied: %b data: %x corrupt: %b\n",
36*e2801f97Slinjiawei        d.opcode, d.param, d.size, d.source, d.sink, d.denied, d.data, d.corrupt
37*e2801f97Slinjiawei      )
38*e2801f97Slinjiawei  }
39*e2801f97Slinjiawei
40*e2801f97Slinjiawei  implicit class dumpE(e: TLBundleE) {
41*e2801f97Slinjiawei    def dump =
42*e2801f97Slinjiawei      printf(s"${e.channelName} sink: %d\n", e.sink)
43*e2801f97Slinjiawei  }
44*e2801f97Slinjiawei}
45