xref: /XiangShan/src/main/scala/utils/TLDump.scala (revision 8891a219bbc84f568e1d134854d8d5ed86d6d560)
1c6d43980SLemover/***************************************************************************************
2c6d43980SLemover* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences
3f320e0f0SYinan Xu* Copyright (c) 2020-2021 Peng Cheng Laboratory
4c6d43980SLemover*
5c6d43980SLemover* XiangShan is licensed under Mulan PSL v2.
6c6d43980SLemover* You can use this software according to the terms and conditions of the Mulan PSL v2.
7c6d43980SLemover* You may obtain a copy of Mulan PSL v2 at:
8c6d43980SLemover*          http://license.coscl.org.cn/MulanPSL2
9c6d43980SLemover*
10c6d43980SLemover* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
11c6d43980SLemover* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
12c6d43980SLemover* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
13c6d43980SLemover*
14c6d43980SLemover* See the Mulan PSL v2 for more details.
15c6d43980SLemover***************************************************************************************/
16c6d43980SLemover
17e2801f97Slinjiaweipackage utils
18e2801f97Slinjiawei
19*8891a219SYinan Xuimport org.chipsalliance.cde.config.Parameters
20e2801f97Slinjiaweiimport chisel3._
216a527891SBigWhiteDogimport chisel3.util._
226a527891SBigWhiteDogimport freechips.rocketchip.tilelink.TLMessages._
236a527891SBigWhiteDogimport freechips.rocketchip.tilelink.TLPermissions._
24e2801f97Slinjiaweiimport freechips.rocketchip.tilelink.{TLBundle, TLBundleA, TLBundleB, TLBundleC, TLBundleD, TLBundleE, TLChannel}
25e2801f97Slinjiawei
266a527891SBigWhiteDogtrait HasTLDump {
27e2801f97Slinjiawei
282225d46eSJiawei Lin  implicit val p: Parameters
292225d46eSJiawei Lin
308f653805SLinJiawei  implicit class TLDump(channel: TLChannel) {
318f653805SLinJiawei    def dump = channel match {
328f653805SLinJiawei      case a: TLBundleA =>
336a527891SBigWhiteDog        printChannelA(a)
348f653805SLinJiawei      case b: TLBundleB =>
356a527891SBigWhiteDog        printChannelB(b)
368f653805SLinJiawei      case c: TLBundleC =>
376a527891SBigWhiteDog        printChannelC(c)
388f653805SLinJiawei      case d: TLBundleD =>
396a527891SBigWhiteDog        printChannelD(d)
408f653805SLinJiawei      case e: TLBundleE =>
416a527891SBigWhiteDog        printChannelE(e)
42e2801f97Slinjiawei    }
43e2801f97Slinjiawei  }
446a527891SBigWhiteDog
456a527891SBigWhiteDog  def printChannelA(a: TLBundleA): Unit = {
466a527891SBigWhiteDog    switch(a.opcode) {
476a527891SBigWhiteDog      is(PutFullData) {
486a527891SBigWhiteDog        XSDebug(false, true.B,
496a527891SBigWhiteDog          a.channelName + " PutFullData param: %x size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n",
506a527891SBigWhiteDog          a.param, a.size, a.source, a.address, a.mask, a.data, a.corrupt
516a527891SBigWhiteDog        )
526a527891SBigWhiteDog      }
536a527891SBigWhiteDog
546a527891SBigWhiteDog      is(PutPartialData) {
556a527891SBigWhiteDog        XSDebug(false, true.B,
566a527891SBigWhiteDog          a.channelName + " PutPartialData param: %x size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n",
576a527891SBigWhiteDog          a.param, a.size, a.source, a.address, a.mask, a.data, a.corrupt
586a527891SBigWhiteDog        )
596a527891SBigWhiteDog      }
606a527891SBigWhiteDog
616a527891SBigWhiteDog      is(ArithmeticData) {
626a527891SBigWhiteDog        XSDebug(false, true.B,
636a527891SBigWhiteDog          a.channelName + " ArithmeticData param: %x size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n",
646a527891SBigWhiteDog          a.param, a.size, a.source, a.address, a.mask, a.data, a.corrupt
656a527891SBigWhiteDog        )
666a527891SBigWhiteDog      }
676a527891SBigWhiteDog
686a527891SBigWhiteDog      is(LogicalData) {
696a527891SBigWhiteDog        XSDebug(false, true.B,
706a527891SBigWhiteDog          a.channelName + " LogicalData param: %x size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n",
716a527891SBigWhiteDog          a.param, a.size, a.source, a.address, a.mask, a.data, a.corrupt
726a527891SBigWhiteDog        )
736a527891SBigWhiteDog      }
746a527891SBigWhiteDog
756a527891SBigWhiteDog      is(Get) {
766a527891SBigWhiteDog        XSDebug(false, true.B,
776a527891SBigWhiteDog          a.channelName + " Get param: %x size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n",
786a527891SBigWhiteDog          a.param, a.size, a.source, a.address, a.mask, a.data, a.corrupt
796a527891SBigWhiteDog        )
806a527891SBigWhiteDog      }
816a527891SBigWhiteDog
826a527891SBigWhiteDog      is(Hint) {
836a527891SBigWhiteDog        XSDebug(false, true.B,
846a527891SBigWhiteDog          a.channelName + " Intent param: %x size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n",
856a527891SBigWhiteDog          a.param, a.size, a.source, a.address, a.mask, a.data, a.corrupt
866a527891SBigWhiteDog        )
876a527891SBigWhiteDog      }
886a527891SBigWhiteDog
896a527891SBigWhiteDog      is(AcquireBlock) {
906a527891SBigWhiteDog        switch(a.param) {
916a527891SBigWhiteDog          is(NtoB) {
926a527891SBigWhiteDog            XSDebug(false, true.B,
936a527891SBigWhiteDog              a.channelName + " AcquireBlock NtoB size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n",
946a527891SBigWhiteDog              a.size, a.source, a.address, a.mask, a.data, a.corrupt
956a527891SBigWhiteDog            )
966a527891SBigWhiteDog          }
976a527891SBigWhiteDog          is(NtoT) {
986a527891SBigWhiteDog            XSDebug(false, true.B,
996a527891SBigWhiteDog              a.channelName + " AcquireBlock NtoT size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n",
1006a527891SBigWhiteDog              a.size, a.source, a.address, a.mask, a.data, a.corrupt
1016a527891SBigWhiteDog            )
1026a527891SBigWhiteDog          }
1036a527891SBigWhiteDog          is(BtoT) {
1046a527891SBigWhiteDog            XSDebug(false, true.B,
1056a527891SBigWhiteDog              a.channelName + " AcquireBlock BtoT size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n",
1066a527891SBigWhiteDog              a.size, a.source, a.address, a.mask, a.data, a.corrupt
1076a527891SBigWhiteDog            )
1086a527891SBigWhiteDog          }
1096a527891SBigWhiteDog        }
1106a527891SBigWhiteDog      }
1116a527891SBigWhiteDog
1126a527891SBigWhiteDog      is(AcquirePerm) {
1136a527891SBigWhiteDog        switch(a.param) {
1146a527891SBigWhiteDog          is(NtoB) {
1156a527891SBigWhiteDog            XSDebug(false, true.B,
1166a527891SBigWhiteDog              a.channelName + " AcquirePerm NtoB size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n",
1176a527891SBigWhiteDog              a.size, a.source, a.address, a.mask, a.data, a.corrupt
1186a527891SBigWhiteDog            )
1196a527891SBigWhiteDog          }
1206a527891SBigWhiteDog          is(NtoT) {
1216a527891SBigWhiteDog            XSDebug(false, true.B,
1226a527891SBigWhiteDog              a.channelName + " AcquirePerm NtoT size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n",
1236a527891SBigWhiteDog              a.size, a.source, a.address, a.mask, a.data, a.corrupt
1246a527891SBigWhiteDog            )
1256a527891SBigWhiteDog          }
1266a527891SBigWhiteDog          is(BtoT) {
1276a527891SBigWhiteDog            XSDebug(false, true.B,
1286a527891SBigWhiteDog              a.channelName + " AcquirePerm BtoT size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n",
1296a527891SBigWhiteDog              a.size, a.source, a.address, a.mask, a.data, a.corrupt
1306a527891SBigWhiteDog            )
1316a527891SBigWhiteDog          }
1326a527891SBigWhiteDog        }
1336a527891SBigWhiteDog      }
1346a527891SBigWhiteDog
1356a527891SBigWhiteDog    }
1366a527891SBigWhiteDog  }
1376a527891SBigWhiteDog
1386a527891SBigWhiteDog  def printChannelB(b: TLBundleB): Unit = {
1396a527891SBigWhiteDog    switch(b.opcode) {
1406a527891SBigWhiteDog      is(PutFullData) {
1416a527891SBigWhiteDog        XSDebug(false, true.B,
1426a527891SBigWhiteDog          b.channelName + " PutFullData param: %x size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n",
1436a527891SBigWhiteDog          b.param, b.size, b.source, b.address, b.mask, b.data, b.corrupt
1446a527891SBigWhiteDog        )
1456a527891SBigWhiteDog      }
1466a527891SBigWhiteDog
1476a527891SBigWhiteDog      is(PutPartialData) {
1486a527891SBigWhiteDog        XSDebug(false, true.B,
1496a527891SBigWhiteDog          b.channelName + " PutPartialData param: %x size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n",
1506a527891SBigWhiteDog          b.param, b.size, b.source, b.address, b.mask, b.data, b.corrupt
1516a527891SBigWhiteDog        )
1526a527891SBigWhiteDog      }
1536a527891SBigWhiteDog
1546a527891SBigWhiteDog      is(ArithmeticData) {
1556a527891SBigWhiteDog        XSDebug(false, true.B,
1566a527891SBigWhiteDog          b.channelName + " ArithmeticData param: %x size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n",
1576a527891SBigWhiteDog          b.param, b.size, b.source, b.address, b.mask, b.data, b.corrupt
1586a527891SBigWhiteDog        )
1596a527891SBigWhiteDog      }
1606a527891SBigWhiteDog
1616a527891SBigWhiteDog      is(LogicalData) {
1626a527891SBigWhiteDog        XSDebug(false, true.B,
1636a527891SBigWhiteDog          b.channelName + " LogicalData param: %x size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n",
1646a527891SBigWhiteDog          b.param, b.size, b.source, b.address, b.mask, b.data, b.corrupt
1656a527891SBigWhiteDog        )
1666a527891SBigWhiteDog      }
1676a527891SBigWhiteDog
1686a527891SBigWhiteDog      is(Get) {
1696a527891SBigWhiteDog        XSDebug(false, true.B,
1706a527891SBigWhiteDog          b.channelName + " Get param: %x size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n",
1716a527891SBigWhiteDog          b.param, b.size, b.source, b.address, b.mask, b.data, b.corrupt
1726a527891SBigWhiteDog        )
1736a527891SBigWhiteDog      }
1746a527891SBigWhiteDog
1756a527891SBigWhiteDog      is(Hint) {
1766a527891SBigWhiteDog        XSDebug(false, true.B,
1776a527891SBigWhiteDog          b.channelName + " Intent param: %x size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n",
1786a527891SBigWhiteDog          b.param, b.size, b.source, b.address, b.mask, b.data, b.corrupt
1796a527891SBigWhiteDog        )
1806a527891SBigWhiteDog      }
1816a527891SBigWhiteDog
1826a527891SBigWhiteDog      is(Probe) {
1836a527891SBigWhiteDog        switch(b.param) {
1846a527891SBigWhiteDog          is(toN) {
1856a527891SBigWhiteDog            XSDebug(false, true.B,
1866a527891SBigWhiteDog              b.channelName + " Probe toN size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n",
1876a527891SBigWhiteDog              b.size, b.source, b.address, b.mask, b.data, b.corrupt
1886a527891SBigWhiteDog            )
1896a527891SBigWhiteDog          }
1906a527891SBigWhiteDog          is(toB) {
1916a527891SBigWhiteDog            XSDebug(false, true.B,
1926a527891SBigWhiteDog              b.channelName + " Probe toB size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n",
1936a527891SBigWhiteDog              b.size, b.source, b.address, b.mask, b.data, b.corrupt
1946a527891SBigWhiteDog            )
1956a527891SBigWhiteDog          }
1966a527891SBigWhiteDog          is(toT) {
1976a527891SBigWhiteDog            XSDebug(false, true.B,
1986a527891SBigWhiteDog              b.channelName + " Probe toT size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n",
1996a527891SBigWhiteDog              b.size, b.source, b.address, b.mask, b.data, b.corrupt
2006a527891SBigWhiteDog            )
2016a527891SBigWhiteDog          }
2026a527891SBigWhiteDog        }
2036a527891SBigWhiteDog      }
2046a527891SBigWhiteDog
2056a527891SBigWhiteDog    }
2066a527891SBigWhiteDog  }
2076a527891SBigWhiteDog
2086a527891SBigWhiteDog  def printChannelC(c: TLBundleC): Unit = {
2096a527891SBigWhiteDog    switch(c.opcode) {
2106a527891SBigWhiteDog      is(AccessAck) {
2116a527891SBigWhiteDog        XSDebug(false, true.B,
2126a527891SBigWhiteDog          c.channelName + " AccessAck param: %x size: %x source: %d address: %x data: %x corrupt: %b\n",
2136a527891SBigWhiteDog          c.param, c.size, c.source, c.address, c.data, c.corrupt
2146a527891SBigWhiteDog        )
2156a527891SBigWhiteDog      }
2166a527891SBigWhiteDog
2176a527891SBigWhiteDog      is(AccessAckData) {
2186a527891SBigWhiteDog        XSDebug(false, true.B,
2196a527891SBigWhiteDog          c.channelName + " AccessAckData param: %x size: %x source: %d address: %x data: %x corrupt: %b\n",
2206a527891SBigWhiteDog          c.param, c.size, c.source, c.address, c.data, c.corrupt
2216a527891SBigWhiteDog        )
2226a527891SBigWhiteDog      }
2236a527891SBigWhiteDog
2246a527891SBigWhiteDog      is(HintAck) {
2256a527891SBigWhiteDog        XSDebug(false, true.B,
2266a527891SBigWhiteDog          c.channelName + " HintAck param: %x size: %x source: %d address: %x data: %x corrupt: %b\n",
2276a527891SBigWhiteDog          c.param, c.size, c.source, c.address, c.data, c.corrupt
2286a527891SBigWhiteDog        )
2296a527891SBigWhiteDog      }
2306a527891SBigWhiteDog
2316a527891SBigWhiteDog      is(ProbeAck) {
2326a527891SBigWhiteDog        switch(c.param) {
2336a527891SBigWhiteDog          is(TtoB) {
2346a527891SBigWhiteDog            XSDebug(false, true.B,
2356a527891SBigWhiteDog              c.channelName + " ProbeAck TtoB size: %x source: %d address: %x data: %x corrupt: %b\n",
2366a527891SBigWhiteDog              c.size, c.source, c.address, c.data, c.corrupt
2376a527891SBigWhiteDog            )
2386a527891SBigWhiteDog          }
2396a527891SBigWhiteDog          is(TtoN) {
2406a527891SBigWhiteDog            XSDebug(false, true.B,
2416a527891SBigWhiteDog              c.channelName + " ProbeAck TtoN size: %x source: %d address: %x data: %x corrupt: %b\n",
2426a527891SBigWhiteDog              c.size, c.source, c.address, c.data, c.corrupt
2436a527891SBigWhiteDog            )
2446a527891SBigWhiteDog          }
2456a527891SBigWhiteDog          is(BtoN) {
2466a527891SBigWhiteDog            XSDebug(false, true.B,
2476a527891SBigWhiteDog              c.channelName + " ProbeAck BtoN size: %x source: %d address: %x data: %x corrupt: %b\n",
2486a527891SBigWhiteDog              c.size, c.source, c.address, c.data, c.corrupt
2496a527891SBigWhiteDog            )
2506a527891SBigWhiteDog          }
2516a527891SBigWhiteDog          is(TtoT) {
2526a527891SBigWhiteDog            XSDebug(false, true.B,
2536a527891SBigWhiteDog              c.channelName + " ProbeAck TtoT size: %x source: %d address: %x data: %x corrupt: %b\n",
2546a527891SBigWhiteDog              c.size, c.source, c.address, c.data, c.corrupt
2556a527891SBigWhiteDog            )
2566a527891SBigWhiteDog          }
2576a527891SBigWhiteDog          is(BtoB) {
2586a527891SBigWhiteDog            XSDebug(false, true.B,
2596a527891SBigWhiteDog              c.channelName + " ProbeAck BtoB size: %x source: %d address: %x data: %x corrupt: %b\n",
2606a527891SBigWhiteDog              c.size, c.source, c.address, c.data, c.corrupt
2616a527891SBigWhiteDog            )
2626a527891SBigWhiteDog          }
2636a527891SBigWhiteDog          is(NtoN) {
2646a527891SBigWhiteDog            XSDebug(false, true.B,
2656a527891SBigWhiteDog              c.channelName + " ProbeAck NtoN size: %x source: %d address: %x data: %x corrupt: %b\n",
2666a527891SBigWhiteDog              c.size, c.source, c.address, c.data, c.corrupt
2676a527891SBigWhiteDog            )
2686a527891SBigWhiteDog          }
2696a527891SBigWhiteDog        }
2706a527891SBigWhiteDog      }
2716a527891SBigWhiteDog
2726a527891SBigWhiteDog      is(ProbeAckData) {
2736a527891SBigWhiteDog        switch(c.param) {
2746a527891SBigWhiteDog          is(TtoB) {
2756a527891SBigWhiteDog            XSDebug(false, true.B,
2766a527891SBigWhiteDog              c.channelName + " ProbeAckData TtoB size: %x source: %d address: %x data: %x corrupt: %b\n",
2776a527891SBigWhiteDog              c.size, c.source, c.address, c.data, c.corrupt
2786a527891SBigWhiteDog            )
2796a527891SBigWhiteDog          }
2806a527891SBigWhiteDog          is(TtoN) {
2816a527891SBigWhiteDog            XSDebug(false, true.B,
2826a527891SBigWhiteDog              c.channelName + " ProbeAckData TtoN size: %x source: %d address: %x data: %x corrupt: %b\n",
2836a527891SBigWhiteDog              c.size, c.source, c.address, c.data, c.corrupt
2846a527891SBigWhiteDog            )
2856a527891SBigWhiteDog          }
2866a527891SBigWhiteDog          is(BtoN) {
2876a527891SBigWhiteDog            XSDebug(false, true.B,
2886a527891SBigWhiteDog              c.channelName + " ProbeAckData BtoN size: %x source: %d address: %x data: %x corrupt: %b\n",
2896a527891SBigWhiteDog              c.size, c.source, c.address, c.data, c.corrupt
2906a527891SBigWhiteDog            )
2916a527891SBigWhiteDog          }
2926a527891SBigWhiteDog          is(TtoT) {
2936a527891SBigWhiteDog            XSDebug(false, true.B,
2946a527891SBigWhiteDog              c.channelName + " ProbeAckData TtoT size: %x source: %d address: %x data: %x corrupt: %b\n",
2956a527891SBigWhiteDog              c.size, c.source, c.address, c.data, c.corrupt
2966a527891SBigWhiteDog            )
2976a527891SBigWhiteDog          }
2986a527891SBigWhiteDog          is(BtoB) {
2996a527891SBigWhiteDog            XSDebug(false, true.B,
3006a527891SBigWhiteDog              c.channelName + " ProbeAckData BtoB size: %x source: %d address: %x data: %x corrupt: %b\n",
3016a527891SBigWhiteDog              c.size, c.source, c.address, c.data, c.corrupt
3026a527891SBigWhiteDog            )
3036a527891SBigWhiteDog          }
3046a527891SBigWhiteDog          is(NtoN) {
3056a527891SBigWhiteDog            XSDebug(false, true.B,
3066a527891SBigWhiteDog              c.channelName + " ProbeAckData NtoN size: %x source: %d address: %x data: %x corrupt: %b\n",
3076a527891SBigWhiteDog              c.size, c.source, c.address, c.data, c.corrupt
3086a527891SBigWhiteDog            )
3096a527891SBigWhiteDog          }
3106a527891SBigWhiteDog        }
3116a527891SBigWhiteDog      }
3126a527891SBigWhiteDog
3136a527891SBigWhiteDog      is(Release) {
3146a527891SBigWhiteDog        switch(c.param) {
3156a527891SBigWhiteDog          is(TtoB) {
3166a527891SBigWhiteDog            XSDebug(false, true.B,
3176a527891SBigWhiteDog              c.channelName + " Release TtoB size: %x source: %d address: %x data: %x corrupt: %b\n",
3186a527891SBigWhiteDog              c.size, c.source, c.address, c.data, c.corrupt
3196a527891SBigWhiteDog            )
3206a527891SBigWhiteDog          }
3216a527891SBigWhiteDog          is(TtoN) {
3226a527891SBigWhiteDog            XSDebug(false, true.B,
3236a527891SBigWhiteDog              c.channelName + " Release TtoN size: %x source: %d address: %x data: %x corrupt: %b\n",
3246a527891SBigWhiteDog              c.size, c.source, c.address, c.data, c.corrupt
3256a527891SBigWhiteDog            )
3266a527891SBigWhiteDog          }
3276a527891SBigWhiteDog          is(BtoN) {
3286a527891SBigWhiteDog            XSDebug(false, true.B,
3296a527891SBigWhiteDog              c.channelName + " Release BtoN size: %x source: %d address: %x data: %x corrupt: %b\n",
3306a527891SBigWhiteDog              c.size, c.source, c.address, c.data, c.corrupt
3316a527891SBigWhiteDog            )
3326a527891SBigWhiteDog          }
3336a527891SBigWhiteDog          is(TtoT) {
3346a527891SBigWhiteDog            XSDebug(false, true.B,
3356a527891SBigWhiteDog              c.channelName + " Release TtoT size: %x source: %d address: %x data: %x corrupt: %b\n",
3366a527891SBigWhiteDog              c.size, c.source, c.address, c.data, c.corrupt
3376a527891SBigWhiteDog            )
3386a527891SBigWhiteDog          }
3396a527891SBigWhiteDog          is(BtoB) {
3406a527891SBigWhiteDog            XSDebug(false, true.B,
3416a527891SBigWhiteDog              c.channelName + " Release BtoB size: %x source: %d address: %x data: %x corrupt: %b\n",
3426a527891SBigWhiteDog              c.size, c.source, c.address, c.data, c.corrupt
3436a527891SBigWhiteDog            )
3446a527891SBigWhiteDog          }
3456a527891SBigWhiteDog          is(NtoN) {
3466a527891SBigWhiteDog            XSDebug(false, true.B,
3476a527891SBigWhiteDog              c.channelName + " Release NtoN size: %x source: %d address: %x data: %x corrupt: %b\n",
3486a527891SBigWhiteDog              c.size, c.source, c.address, c.data, c.corrupt
3496a527891SBigWhiteDog            )
3506a527891SBigWhiteDog          }
3516a527891SBigWhiteDog        }
3526a527891SBigWhiteDog      }
3536a527891SBigWhiteDog
3546a527891SBigWhiteDog      is(ReleaseData) {
3556a527891SBigWhiteDog        switch(c.param) {
3566a527891SBigWhiteDog          is(TtoB) {
3576a527891SBigWhiteDog            XSDebug(false, true.B,
3586a527891SBigWhiteDog              c.channelName + " ReleaseData TtoB size: %x source: %d address: %x data: %x corrupt: %b\n",
3596a527891SBigWhiteDog              c.size, c.source, c.address, c.data, c.corrupt
3606a527891SBigWhiteDog            )
3616a527891SBigWhiteDog          }
3626a527891SBigWhiteDog          is(TtoN) {
3636a527891SBigWhiteDog            XSDebug(false, true.B,
3646a527891SBigWhiteDog              c.channelName + " ReleaseData TtoN size: %x source: %d address: %x data: %x corrupt: %b\n",
3656a527891SBigWhiteDog              c.size, c.source, c.address, c.data, c.corrupt
3666a527891SBigWhiteDog            )
3676a527891SBigWhiteDog          }
3686a527891SBigWhiteDog          is(BtoN) {
3696a527891SBigWhiteDog            XSDebug(false, true.B,
3706a527891SBigWhiteDog              c.channelName + " ReleaseData BtoN size: %x source: %d address: %x data: %x corrupt: %b\n",
3716a527891SBigWhiteDog              c.size, c.source, c.address, c.data, c.corrupt
3726a527891SBigWhiteDog            )
3736a527891SBigWhiteDog          }
3746a527891SBigWhiteDog          is(TtoT) {
3756a527891SBigWhiteDog            XSDebug(false, true.B,
3766a527891SBigWhiteDog              c.channelName + " ReleaseData TtoT size: %x source: %d address: %x data: %x corrupt: %b\n",
3776a527891SBigWhiteDog              c.size, c.source, c.address, c.data, c.corrupt
3786a527891SBigWhiteDog            )
3796a527891SBigWhiteDog          }
3806a527891SBigWhiteDog          is(BtoB) {
3816a527891SBigWhiteDog            XSDebug(false, true.B,
3826a527891SBigWhiteDog              c.channelName + " ReleaseData BtoB size: %x source: %d address: %x data: %x corrupt: %b\n",
3836a527891SBigWhiteDog              c.size, c.source, c.address, c.data, c.corrupt
3846a527891SBigWhiteDog            )
3856a527891SBigWhiteDog          }
3866a527891SBigWhiteDog          is(NtoN) {
3876a527891SBigWhiteDog            XSDebug(false, true.B,
3886a527891SBigWhiteDog              c.channelName + " ReleaseData NtoN size: %x source: %d address: %x data: %x corrupt: %b\n",
3896a527891SBigWhiteDog              c.size, c.source, c.address, c.data, c.corrupt
3906a527891SBigWhiteDog            )
3916a527891SBigWhiteDog          }
3926a527891SBigWhiteDog        }
3936a527891SBigWhiteDog      }
3946a527891SBigWhiteDog
3956a527891SBigWhiteDog    }
3966a527891SBigWhiteDog  }
3976a527891SBigWhiteDog
3986a527891SBigWhiteDog  def printChannelD(d: TLBundleD): Unit = {
3996a527891SBigWhiteDog    switch(d.opcode) {
4006a527891SBigWhiteDog      is(AccessAck) {
4016a527891SBigWhiteDog        XSDebug(false, true.B,
4026a527891SBigWhiteDog          d.channelName + " AccessAck param: %x size: %x source: %d sink: %d denied: %b data: %x corrupt: %b\n",
4036a527891SBigWhiteDog          d.param, d.size, d.source, d.sink, d.denied, d.data, d.corrupt
4046a527891SBigWhiteDog        )
4056a527891SBigWhiteDog      }
4066a527891SBigWhiteDog
4076a527891SBigWhiteDog      is(AccessAckData) {
4086a527891SBigWhiteDog        XSDebug(false, true.B,
4096a527891SBigWhiteDog          d.channelName + " AccessAckData param: %x size: %x source: %d sink: %d denied: %b data: %x corrupt: %b\n",
4106a527891SBigWhiteDog          d.param, d.size, d.source, d.sink, d.denied, d.data, d.corrupt
4116a527891SBigWhiteDog        )
4126a527891SBigWhiteDog      }
4136a527891SBigWhiteDog
4146a527891SBigWhiteDog      is(HintAck) {
4156a527891SBigWhiteDog        XSDebug(false, true.B,
4166a527891SBigWhiteDog          d.channelName + " HintAck param: %x size: %x source: %d sink: %d denied: %b data: %x corrupt: %b\n",
4176a527891SBigWhiteDog          d.param, d.size, d.source, d.sink, d.denied, d.data, d.corrupt
4186a527891SBigWhiteDog        )
4196a527891SBigWhiteDog      }
4206a527891SBigWhiteDog
4216a527891SBigWhiteDog      is(Grant) {
4226a527891SBigWhiteDog        switch(d.param) {
4236a527891SBigWhiteDog          is(toT) {
4246a527891SBigWhiteDog            XSDebug(false, true.B,
4256a527891SBigWhiteDog              d.channelName + " Grant toT size: %x source: %d sink: %d denied: %b data: %x corrupt: %b\n",
4266a527891SBigWhiteDog              d.size, d.source, d.sink, d.denied, d.data, d.corrupt
4276a527891SBigWhiteDog            )
4286a527891SBigWhiteDog          }
4296a527891SBigWhiteDog          is(toB) {
4306a527891SBigWhiteDog            XSDebug(false, true.B,
4316a527891SBigWhiteDog              d.channelName + " Grant toB size: %x source: %d sink: %d denied: %b data: %x corrupt: %b\n",
4326a527891SBigWhiteDog              d.size, d.source, d.sink, d.denied, d.data, d.corrupt
4336a527891SBigWhiteDog            )
4346a527891SBigWhiteDog          }
4356a527891SBigWhiteDog          is(toN) {
4366a527891SBigWhiteDog            XSDebug(false, true.B,
4376a527891SBigWhiteDog              d.channelName + " Grant toN size: %x source: %d sink: %d denied: %b data: %x corrupt: %b\n",
4386a527891SBigWhiteDog              d.size, d.source, d.sink, d.denied, d.data, d.corrupt
4396a527891SBigWhiteDog            )
4406a527891SBigWhiteDog          }
4416a527891SBigWhiteDog        }
4426a527891SBigWhiteDog      }
4436a527891SBigWhiteDog
4446a527891SBigWhiteDog      is(GrantData) {
4456a527891SBigWhiteDog        switch(d.param) {
4466a527891SBigWhiteDog          is(toT) {
4476a527891SBigWhiteDog            XSDebug(false, true.B,
4486a527891SBigWhiteDog              d.channelName + " GrantData toT size: %x source: %d sink: %d denied: %b data: %x corrupt: %b\n",
4496a527891SBigWhiteDog              d.size, d.source, d.sink, d.denied, d.data, d.corrupt
4506a527891SBigWhiteDog            )
4516a527891SBigWhiteDog          }
4526a527891SBigWhiteDog          is(toB) {
4536a527891SBigWhiteDog            XSDebug(false, true.B,
4546a527891SBigWhiteDog              d.channelName + " GrantData toB size: %x source: %d sink: %d denied: %b data: %x corrupt: %b\n",
4556a527891SBigWhiteDog              d.size, d.source, d.sink, d.denied, d.data, d.corrupt
4566a527891SBigWhiteDog            )
4576a527891SBigWhiteDog          }
4586a527891SBigWhiteDog          is(toN) {
4596a527891SBigWhiteDog            XSDebug(false, true.B,
4606a527891SBigWhiteDog              d.channelName + " GrantData toN size: %x source: %d sink: %d denied: %b data: %x corrupt: %b\n",
4616a527891SBigWhiteDog              d.size, d.source, d.sink, d.denied, d.data, d.corrupt
4626a527891SBigWhiteDog            )
4636a527891SBigWhiteDog          }
4646a527891SBigWhiteDog        }
4656a527891SBigWhiteDog      }
4666a527891SBigWhiteDog
4676a527891SBigWhiteDog      is(ReleaseAck) {
4686a527891SBigWhiteDog        XSDebug(false, true.B,
4696a527891SBigWhiteDog          d.channelName + " ReleaseAck param: %x size: %x source: %d sink: %d denied: %b data: %x corrupt: %b\n",
4706a527891SBigWhiteDog          d.param, d.size, d.source, d.sink, d.denied, d.data, d.corrupt
4716a527891SBigWhiteDog        )
4726a527891SBigWhiteDog      }
4736a527891SBigWhiteDog
4746a527891SBigWhiteDog    }
4756a527891SBigWhiteDog  }
4766a527891SBigWhiteDog
4776a527891SBigWhiteDog  def printChannelE(e: TLBundleE): Unit = {
4786a527891SBigWhiteDog    XSDebug(false, true.B, e.channelName + "GrantAck sink: %d\n", e.sink)
4796a527891SBigWhiteDog  }
4806a527891SBigWhiteDog
4818f653805SLinJiawei}
482