xref: /XiangShan/src/main/scala/utils/TLDump.scala (revision bb2f3f51dd67f6e16e0cc1ffe43368c9fc7e4aef)
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
198891a219SYinan 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}
25*bb2f3f51STang Haojinimport utility.XSDebug
26e2801f97Slinjiawei
276a527891SBigWhiteDogtrait HasTLDump {
28e2801f97Slinjiawei
292225d46eSJiawei Lin  implicit val p: Parameters
302225d46eSJiawei Lin
318f653805SLinJiawei  implicit class TLDump(channel: TLChannel) {
328f653805SLinJiawei    def dump = channel match {
338f653805SLinJiawei      case a: TLBundleA =>
346a527891SBigWhiteDog        printChannelA(a)
358f653805SLinJiawei      case b: TLBundleB =>
366a527891SBigWhiteDog        printChannelB(b)
378f653805SLinJiawei      case c: TLBundleC =>
386a527891SBigWhiteDog        printChannelC(c)
398f653805SLinJiawei      case d: TLBundleD =>
406a527891SBigWhiteDog        printChannelD(d)
418f653805SLinJiawei      case e: TLBundleE =>
426a527891SBigWhiteDog        printChannelE(e)
43e2801f97Slinjiawei    }
44e2801f97Slinjiawei  }
456a527891SBigWhiteDog
466a527891SBigWhiteDog  def printChannelA(a: TLBundleA): Unit = {
476a527891SBigWhiteDog    switch(a.opcode) {
486a527891SBigWhiteDog      is(PutFullData) {
496a527891SBigWhiteDog        XSDebug(false, true.B,
506a527891SBigWhiteDog          a.channelName + " PutFullData param: %x size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n",
516a527891SBigWhiteDog          a.param, a.size, a.source, a.address, a.mask, a.data, a.corrupt
526a527891SBigWhiteDog        )
536a527891SBigWhiteDog      }
546a527891SBigWhiteDog
556a527891SBigWhiteDog      is(PutPartialData) {
566a527891SBigWhiteDog        XSDebug(false, true.B,
576a527891SBigWhiteDog          a.channelName + " PutPartialData param: %x size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n",
586a527891SBigWhiteDog          a.param, a.size, a.source, a.address, a.mask, a.data, a.corrupt
596a527891SBigWhiteDog        )
606a527891SBigWhiteDog      }
616a527891SBigWhiteDog
626a527891SBigWhiteDog      is(ArithmeticData) {
636a527891SBigWhiteDog        XSDebug(false, true.B,
646a527891SBigWhiteDog          a.channelName + " ArithmeticData param: %x size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n",
656a527891SBigWhiteDog          a.param, a.size, a.source, a.address, a.mask, a.data, a.corrupt
666a527891SBigWhiteDog        )
676a527891SBigWhiteDog      }
686a527891SBigWhiteDog
696a527891SBigWhiteDog      is(LogicalData) {
706a527891SBigWhiteDog        XSDebug(false, true.B,
716a527891SBigWhiteDog          a.channelName + " LogicalData param: %x size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n",
726a527891SBigWhiteDog          a.param, a.size, a.source, a.address, a.mask, a.data, a.corrupt
736a527891SBigWhiteDog        )
746a527891SBigWhiteDog      }
756a527891SBigWhiteDog
766a527891SBigWhiteDog      is(Get) {
776a527891SBigWhiteDog        XSDebug(false, true.B,
786a527891SBigWhiteDog          a.channelName + " Get param: %x size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n",
796a527891SBigWhiteDog          a.param, a.size, a.source, a.address, a.mask, a.data, a.corrupt
806a527891SBigWhiteDog        )
816a527891SBigWhiteDog      }
826a527891SBigWhiteDog
836a527891SBigWhiteDog      is(Hint) {
846a527891SBigWhiteDog        XSDebug(false, true.B,
856a527891SBigWhiteDog          a.channelName + " Intent param: %x size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n",
866a527891SBigWhiteDog          a.param, a.size, a.source, a.address, a.mask, a.data, a.corrupt
876a527891SBigWhiteDog        )
886a527891SBigWhiteDog      }
896a527891SBigWhiteDog
906a527891SBigWhiteDog      is(AcquireBlock) {
916a527891SBigWhiteDog        switch(a.param) {
926a527891SBigWhiteDog          is(NtoB) {
936a527891SBigWhiteDog            XSDebug(false, true.B,
946a527891SBigWhiteDog              a.channelName + " AcquireBlock NtoB size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n",
956a527891SBigWhiteDog              a.size, a.source, a.address, a.mask, a.data, a.corrupt
966a527891SBigWhiteDog            )
976a527891SBigWhiteDog          }
986a527891SBigWhiteDog          is(NtoT) {
996a527891SBigWhiteDog            XSDebug(false, true.B,
1006a527891SBigWhiteDog              a.channelName + " AcquireBlock NtoT size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n",
1016a527891SBigWhiteDog              a.size, a.source, a.address, a.mask, a.data, a.corrupt
1026a527891SBigWhiteDog            )
1036a527891SBigWhiteDog          }
1046a527891SBigWhiteDog          is(BtoT) {
1056a527891SBigWhiteDog            XSDebug(false, true.B,
1066a527891SBigWhiteDog              a.channelName + " AcquireBlock BtoT size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n",
1076a527891SBigWhiteDog              a.size, a.source, a.address, a.mask, a.data, a.corrupt
1086a527891SBigWhiteDog            )
1096a527891SBigWhiteDog          }
1106a527891SBigWhiteDog        }
1116a527891SBigWhiteDog      }
1126a527891SBigWhiteDog
1136a527891SBigWhiteDog      is(AcquirePerm) {
1146a527891SBigWhiteDog        switch(a.param) {
1156a527891SBigWhiteDog          is(NtoB) {
1166a527891SBigWhiteDog            XSDebug(false, true.B,
1176a527891SBigWhiteDog              a.channelName + " AcquirePerm NtoB size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n",
1186a527891SBigWhiteDog              a.size, a.source, a.address, a.mask, a.data, a.corrupt
1196a527891SBigWhiteDog            )
1206a527891SBigWhiteDog          }
1216a527891SBigWhiteDog          is(NtoT) {
1226a527891SBigWhiteDog            XSDebug(false, true.B,
1236a527891SBigWhiteDog              a.channelName + " AcquirePerm NtoT size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n",
1246a527891SBigWhiteDog              a.size, a.source, a.address, a.mask, a.data, a.corrupt
1256a527891SBigWhiteDog            )
1266a527891SBigWhiteDog          }
1276a527891SBigWhiteDog          is(BtoT) {
1286a527891SBigWhiteDog            XSDebug(false, true.B,
1296a527891SBigWhiteDog              a.channelName + " AcquirePerm BtoT size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n",
1306a527891SBigWhiteDog              a.size, a.source, a.address, a.mask, a.data, a.corrupt
1316a527891SBigWhiteDog            )
1326a527891SBigWhiteDog          }
1336a527891SBigWhiteDog        }
1346a527891SBigWhiteDog      }
1356a527891SBigWhiteDog
1366a527891SBigWhiteDog    }
1376a527891SBigWhiteDog  }
1386a527891SBigWhiteDog
1396a527891SBigWhiteDog  def printChannelB(b: TLBundleB): Unit = {
1406a527891SBigWhiteDog    switch(b.opcode) {
1416a527891SBigWhiteDog      is(PutFullData) {
1426a527891SBigWhiteDog        XSDebug(false, true.B,
1436a527891SBigWhiteDog          b.channelName + " PutFullData param: %x size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n",
1446a527891SBigWhiteDog          b.param, b.size, b.source, b.address, b.mask, b.data, b.corrupt
1456a527891SBigWhiteDog        )
1466a527891SBigWhiteDog      }
1476a527891SBigWhiteDog
1486a527891SBigWhiteDog      is(PutPartialData) {
1496a527891SBigWhiteDog        XSDebug(false, true.B,
1506a527891SBigWhiteDog          b.channelName + " PutPartialData param: %x size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n",
1516a527891SBigWhiteDog          b.param, b.size, b.source, b.address, b.mask, b.data, b.corrupt
1526a527891SBigWhiteDog        )
1536a527891SBigWhiteDog      }
1546a527891SBigWhiteDog
1556a527891SBigWhiteDog      is(ArithmeticData) {
1566a527891SBigWhiteDog        XSDebug(false, true.B,
1576a527891SBigWhiteDog          b.channelName + " ArithmeticData param: %x size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n",
1586a527891SBigWhiteDog          b.param, b.size, b.source, b.address, b.mask, b.data, b.corrupt
1596a527891SBigWhiteDog        )
1606a527891SBigWhiteDog      }
1616a527891SBigWhiteDog
1626a527891SBigWhiteDog      is(LogicalData) {
1636a527891SBigWhiteDog        XSDebug(false, true.B,
1646a527891SBigWhiteDog          b.channelName + " LogicalData param: %x size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n",
1656a527891SBigWhiteDog          b.param, b.size, b.source, b.address, b.mask, b.data, b.corrupt
1666a527891SBigWhiteDog        )
1676a527891SBigWhiteDog      }
1686a527891SBigWhiteDog
1696a527891SBigWhiteDog      is(Get) {
1706a527891SBigWhiteDog        XSDebug(false, true.B,
1716a527891SBigWhiteDog          b.channelName + " Get param: %x size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n",
1726a527891SBigWhiteDog          b.param, b.size, b.source, b.address, b.mask, b.data, b.corrupt
1736a527891SBigWhiteDog        )
1746a527891SBigWhiteDog      }
1756a527891SBigWhiteDog
1766a527891SBigWhiteDog      is(Hint) {
1776a527891SBigWhiteDog        XSDebug(false, true.B,
1786a527891SBigWhiteDog          b.channelName + " Intent param: %x size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n",
1796a527891SBigWhiteDog          b.param, b.size, b.source, b.address, b.mask, b.data, b.corrupt
1806a527891SBigWhiteDog        )
1816a527891SBigWhiteDog      }
1826a527891SBigWhiteDog
1836a527891SBigWhiteDog      is(Probe) {
1846a527891SBigWhiteDog        switch(b.param) {
1856a527891SBigWhiteDog          is(toN) {
1866a527891SBigWhiteDog            XSDebug(false, true.B,
1876a527891SBigWhiteDog              b.channelName + " Probe toN size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n",
1886a527891SBigWhiteDog              b.size, b.source, b.address, b.mask, b.data, b.corrupt
1896a527891SBigWhiteDog            )
1906a527891SBigWhiteDog          }
1916a527891SBigWhiteDog          is(toB) {
1926a527891SBigWhiteDog            XSDebug(false, true.B,
1936a527891SBigWhiteDog              b.channelName + " Probe toB size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n",
1946a527891SBigWhiteDog              b.size, b.source, b.address, b.mask, b.data, b.corrupt
1956a527891SBigWhiteDog            )
1966a527891SBigWhiteDog          }
1976a527891SBigWhiteDog          is(toT) {
1986a527891SBigWhiteDog            XSDebug(false, true.B,
1996a527891SBigWhiteDog              b.channelName + " Probe toT size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n",
2006a527891SBigWhiteDog              b.size, b.source, b.address, b.mask, b.data, b.corrupt
2016a527891SBigWhiteDog            )
2026a527891SBigWhiteDog          }
2036a527891SBigWhiteDog        }
2046a527891SBigWhiteDog      }
2056a527891SBigWhiteDog
2066a527891SBigWhiteDog    }
2076a527891SBigWhiteDog  }
2086a527891SBigWhiteDog
2096a527891SBigWhiteDog  def printChannelC(c: TLBundleC): Unit = {
2106a527891SBigWhiteDog    switch(c.opcode) {
2116a527891SBigWhiteDog      is(AccessAck) {
2126a527891SBigWhiteDog        XSDebug(false, true.B,
2136a527891SBigWhiteDog          c.channelName + " AccessAck param: %x size: %x source: %d address: %x data: %x corrupt: %b\n",
2146a527891SBigWhiteDog          c.param, c.size, c.source, c.address, c.data, c.corrupt
2156a527891SBigWhiteDog        )
2166a527891SBigWhiteDog      }
2176a527891SBigWhiteDog
2186a527891SBigWhiteDog      is(AccessAckData) {
2196a527891SBigWhiteDog        XSDebug(false, true.B,
2206a527891SBigWhiteDog          c.channelName + " AccessAckData param: %x size: %x source: %d address: %x data: %x corrupt: %b\n",
2216a527891SBigWhiteDog          c.param, c.size, c.source, c.address, c.data, c.corrupt
2226a527891SBigWhiteDog        )
2236a527891SBigWhiteDog      }
2246a527891SBigWhiteDog
2256a527891SBigWhiteDog      is(HintAck) {
2266a527891SBigWhiteDog        XSDebug(false, true.B,
2276a527891SBigWhiteDog          c.channelName + " HintAck param: %x size: %x source: %d address: %x data: %x corrupt: %b\n",
2286a527891SBigWhiteDog          c.param, c.size, c.source, c.address, c.data, c.corrupt
2296a527891SBigWhiteDog        )
2306a527891SBigWhiteDog      }
2316a527891SBigWhiteDog
2326a527891SBigWhiteDog      is(ProbeAck) {
2336a527891SBigWhiteDog        switch(c.param) {
2346a527891SBigWhiteDog          is(TtoB) {
2356a527891SBigWhiteDog            XSDebug(false, true.B,
2366a527891SBigWhiteDog              c.channelName + " ProbeAck TtoB size: %x source: %d address: %x data: %x corrupt: %b\n",
2376a527891SBigWhiteDog              c.size, c.source, c.address, c.data, c.corrupt
2386a527891SBigWhiteDog            )
2396a527891SBigWhiteDog          }
2406a527891SBigWhiteDog          is(TtoN) {
2416a527891SBigWhiteDog            XSDebug(false, true.B,
2426a527891SBigWhiteDog              c.channelName + " ProbeAck TtoN size: %x source: %d address: %x data: %x corrupt: %b\n",
2436a527891SBigWhiteDog              c.size, c.source, c.address, c.data, c.corrupt
2446a527891SBigWhiteDog            )
2456a527891SBigWhiteDog          }
2466a527891SBigWhiteDog          is(BtoN) {
2476a527891SBigWhiteDog            XSDebug(false, true.B,
2486a527891SBigWhiteDog              c.channelName + " ProbeAck BtoN size: %x source: %d address: %x data: %x corrupt: %b\n",
2496a527891SBigWhiteDog              c.size, c.source, c.address, c.data, c.corrupt
2506a527891SBigWhiteDog            )
2516a527891SBigWhiteDog          }
2526a527891SBigWhiteDog          is(TtoT) {
2536a527891SBigWhiteDog            XSDebug(false, true.B,
2546a527891SBigWhiteDog              c.channelName + " ProbeAck TtoT size: %x source: %d address: %x data: %x corrupt: %b\n",
2556a527891SBigWhiteDog              c.size, c.source, c.address, c.data, c.corrupt
2566a527891SBigWhiteDog            )
2576a527891SBigWhiteDog          }
2586a527891SBigWhiteDog          is(BtoB) {
2596a527891SBigWhiteDog            XSDebug(false, true.B,
2606a527891SBigWhiteDog              c.channelName + " ProbeAck BtoB size: %x source: %d address: %x data: %x corrupt: %b\n",
2616a527891SBigWhiteDog              c.size, c.source, c.address, c.data, c.corrupt
2626a527891SBigWhiteDog            )
2636a527891SBigWhiteDog          }
2646a527891SBigWhiteDog          is(NtoN) {
2656a527891SBigWhiteDog            XSDebug(false, true.B,
2666a527891SBigWhiteDog              c.channelName + " ProbeAck NtoN size: %x source: %d address: %x data: %x corrupt: %b\n",
2676a527891SBigWhiteDog              c.size, c.source, c.address, c.data, c.corrupt
2686a527891SBigWhiteDog            )
2696a527891SBigWhiteDog          }
2706a527891SBigWhiteDog        }
2716a527891SBigWhiteDog      }
2726a527891SBigWhiteDog
2736a527891SBigWhiteDog      is(ProbeAckData) {
2746a527891SBigWhiteDog        switch(c.param) {
2756a527891SBigWhiteDog          is(TtoB) {
2766a527891SBigWhiteDog            XSDebug(false, true.B,
2776a527891SBigWhiteDog              c.channelName + " ProbeAckData TtoB size: %x source: %d address: %x data: %x corrupt: %b\n",
2786a527891SBigWhiteDog              c.size, c.source, c.address, c.data, c.corrupt
2796a527891SBigWhiteDog            )
2806a527891SBigWhiteDog          }
2816a527891SBigWhiteDog          is(TtoN) {
2826a527891SBigWhiteDog            XSDebug(false, true.B,
2836a527891SBigWhiteDog              c.channelName + " ProbeAckData TtoN size: %x source: %d address: %x data: %x corrupt: %b\n",
2846a527891SBigWhiteDog              c.size, c.source, c.address, c.data, c.corrupt
2856a527891SBigWhiteDog            )
2866a527891SBigWhiteDog          }
2876a527891SBigWhiteDog          is(BtoN) {
2886a527891SBigWhiteDog            XSDebug(false, true.B,
2896a527891SBigWhiteDog              c.channelName + " ProbeAckData BtoN size: %x source: %d address: %x data: %x corrupt: %b\n",
2906a527891SBigWhiteDog              c.size, c.source, c.address, c.data, c.corrupt
2916a527891SBigWhiteDog            )
2926a527891SBigWhiteDog          }
2936a527891SBigWhiteDog          is(TtoT) {
2946a527891SBigWhiteDog            XSDebug(false, true.B,
2956a527891SBigWhiteDog              c.channelName + " ProbeAckData TtoT size: %x source: %d address: %x data: %x corrupt: %b\n",
2966a527891SBigWhiteDog              c.size, c.source, c.address, c.data, c.corrupt
2976a527891SBigWhiteDog            )
2986a527891SBigWhiteDog          }
2996a527891SBigWhiteDog          is(BtoB) {
3006a527891SBigWhiteDog            XSDebug(false, true.B,
3016a527891SBigWhiteDog              c.channelName + " ProbeAckData BtoB size: %x source: %d address: %x data: %x corrupt: %b\n",
3026a527891SBigWhiteDog              c.size, c.source, c.address, c.data, c.corrupt
3036a527891SBigWhiteDog            )
3046a527891SBigWhiteDog          }
3056a527891SBigWhiteDog          is(NtoN) {
3066a527891SBigWhiteDog            XSDebug(false, true.B,
3076a527891SBigWhiteDog              c.channelName + " ProbeAckData NtoN size: %x source: %d address: %x data: %x corrupt: %b\n",
3086a527891SBigWhiteDog              c.size, c.source, c.address, c.data, c.corrupt
3096a527891SBigWhiteDog            )
3106a527891SBigWhiteDog          }
3116a527891SBigWhiteDog        }
3126a527891SBigWhiteDog      }
3136a527891SBigWhiteDog
3146a527891SBigWhiteDog      is(Release) {
3156a527891SBigWhiteDog        switch(c.param) {
3166a527891SBigWhiteDog          is(TtoB) {
3176a527891SBigWhiteDog            XSDebug(false, true.B,
3186a527891SBigWhiteDog              c.channelName + " Release TtoB size: %x source: %d address: %x data: %x corrupt: %b\n",
3196a527891SBigWhiteDog              c.size, c.source, c.address, c.data, c.corrupt
3206a527891SBigWhiteDog            )
3216a527891SBigWhiteDog          }
3226a527891SBigWhiteDog          is(TtoN) {
3236a527891SBigWhiteDog            XSDebug(false, true.B,
3246a527891SBigWhiteDog              c.channelName + " Release TtoN size: %x source: %d address: %x data: %x corrupt: %b\n",
3256a527891SBigWhiteDog              c.size, c.source, c.address, c.data, c.corrupt
3266a527891SBigWhiteDog            )
3276a527891SBigWhiteDog          }
3286a527891SBigWhiteDog          is(BtoN) {
3296a527891SBigWhiteDog            XSDebug(false, true.B,
3306a527891SBigWhiteDog              c.channelName + " Release BtoN size: %x source: %d address: %x data: %x corrupt: %b\n",
3316a527891SBigWhiteDog              c.size, c.source, c.address, c.data, c.corrupt
3326a527891SBigWhiteDog            )
3336a527891SBigWhiteDog          }
3346a527891SBigWhiteDog          is(TtoT) {
3356a527891SBigWhiteDog            XSDebug(false, true.B,
3366a527891SBigWhiteDog              c.channelName + " Release TtoT size: %x source: %d address: %x data: %x corrupt: %b\n",
3376a527891SBigWhiteDog              c.size, c.source, c.address, c.data, c.corrupt
3386a527891SBigWhiteDog            )
3396a527891SBigWhiteDog          }
3406a527891SBigWhiteDog          is(BtoB) {
3416a527891SBigWhiteDog            XSDebug(false, true.B,
3426a527891SBigWhiteDog              c.channelName + " Release BtoB size: %x source: %d address: %x data: %x corrupt: %b\n",
3436a527891SBigWhiteDog              c.size, c.source, c.address, c.data, c.corrupt
3446a527891SBigWhiteDog            )
3456a527891SBigWhiteDog          }
3466a527891SBigWhiteDog          is(NtoN) {
3476a527891SBigWhiteDog            XSDebug(false, true.B,
3486a527891SBigWhiteDog              c.channelName + " Release NtoN size: %x source: %d address: %x data: %x corrupt: %b\n",
3496a527891SBigWhiteDog              c.size, c.source, c.address, c.data, c.corrupt
3506a527891SBigWhiteDog            )
3516a527891SBigWhiteDog          }
3526a527891SBigWhiteDog        }
3536a527891SBigWhiteDog      }
3546a527891SBigWhiteDog
3556a527891SBigWhiteDog      is(ReleaseData) {
3566a527891SBigWhiteDog        switch(c.param) {
3576a527891SBigWhiteDog          is(TtoB) {
3586a527891SBigWhiteDog            XSDebug(false, true.B,
3596a527891SBigWhiteDog              c.channelName + " ReleaseData TtoB size: %x source: %d address: %x data: %x corrupt: %b\n",
3606a527891SBigWhiteDog              c.size, c.source, c.address, c.data, c.corrupt
3616a527891SBigWhiteDog            )
3626a527891SBigWhiteDog          }
3636a527891SBigWhiteDog          is(TtoN) {
3646a527891SBigWhiteDog            XSDebug(false, true.B,
3656a527891SBigWhiteDog              c.channelName + " ReleaseData TtoN size: %x source: %d address: %x data: %x corrupt: %b\n",
3666a527891SBigWhiteDog              c.size, c.source, c.address, c.data, c.corrupt
3676a527891SBigWhiteDog            )
3686a527891SBigWhiteDog          }
3696a527891SBigWhiteDog          is(BtoN) {
3706a527891SBigWhiteDog            XSDebug(false, true.B,
3716a527891SBigWhiteDog              c.channelName + " ReleaseData BtoN size: %x source: %d address: %x data: %x corrupt: %b\n",
3726a527891SBigWhiteDog              c.size, c.source, c.address, c.data, c.corrupt
3736a527891SBigWhiteDog            )
3746a527891SBigWhiteDog          }
3756a527891SBigWhiteDog          is(TtoT) {
3766a527891SBigWhiteDog            XSDebug(false, true.B,
3776a527891SBigWhiteDog              c.channelName + " ReleaseData TtoT size: %x source: %d address: %x data: %x corrupt: %b\n",
3786a527891SBigWhiteDog              c.size, c.source, c.address, c.data, c.corrupt
3796a527891SBigWhiteDog            )
3806a527891SBigWhiteDog          }
3816a527891SBigWhiteDog          is(BtoB) {
3826a527891SBigWhiteDog            XSDebug(false, true.B,
3836a527891SBigWhiteDog              c.channelName + " ReleaseData BtoB size: %x source: %d address: %x data: %x corrupt: %b\n",
3846a527891SBigWhiteDog              c.size, c.source, c.address, c.data, c.corrupt
3856a527891SBigWhiteDog            )
3866a527891SBigWhiteDog          }
3876a527891SBigWhiteDog          is(NtoN) {
3886a527891SBigWhiteDog            XSDebug(false, true.B,
3896a527891SBigWhiteDog              c.channelName + " ReleaseData NtoN size: %x source: %d address: %x data: %x corrupt: %b\n",
3906a527891SBigWhiteDog              c.size, c.source, c.address, c.data, c.corrupt
3916a527891SBigWhiteDog            )
3926a527891SBigWhiteDog          }
3936a527891SBigWhiteDog        }
3946a527891SBigWhiteDog      }
3956a527891SBigWhiteDog
3966a527891SBigWhiteDog    }
3976a527891SBigWhiteDog  }
3986a527891SBigWhiteDog
3996a527891SBigWhiteDog  def printChannelD(d: TLBundleD): Unit = {
4006a527891SBigWhiteDog    switch(d.opcode) {
4016a527891SBigWhiteDog      is(AccessAck) {
4026a527891SBigWhiteDog        XSDebug(false, true.B,
4036a527891SBigWhiteDog          d.channelName + " AccessAck param: %x size: %x source: %d sink: %d denied: %b data: %x corrupt: %b\n",
4046a527891SBigWhiteDog          d.param, d.size, d.source, d.sink, d.denied, d.data, d.corrupt
4056a527891SBigWhiteDog        )
4066a527891SBigWhiteDog      }
4076a527891SBigWhiteDog
4086a527891SBigWhiteDog      is(AccessAckData) {
4096a527891SBigWhiteDog        XSDebug(false, true.B,
4106a527891SBigWhiteDog          d.channelName + " AccessAckData param: %x size: %x source: %d sink: %d denied: %b data: %x corrupt: %b\n",
4116a527891SBigWhiteDog          d.param, d.size, d.source, d.sink, d.denied, d.data, d.corrupt
4126a527891SBigWhiteDog        )
4136a527891SBigWhiteDog      }
4146a527891SBigWhiteDog
4156a527891SBigWhiteDog      is(HintAck) {
4166a527891SBigWhiteDog        XSDebug(false, true.B,
4176a527891SBigWhiteDog          d.channelName + " HintAck param: %x size: %x source: %d sink: %d denied: %b data: %x corrupt: %b\n",
4186a527891SBigWhiteDog          d.param, d.size, d.source, d.sink, d.denied, d.data, d.corrupt
4196a527891SBigWhiteDog        )
4206a527891SBigWhiteDog      }
4216a527891SBigWhiteDog
4226a527891SBigWhiteDog      is(Grant) {
4236a527891SBigWhiteDog        switch(d.param) {
4246a527891SBigWhiteDog          is(toT) {
4256a527891SBigWhiteDog            XSDebug(false, true.B,
4266a527891SBigWhiteDog              d.channelName + " Grant toT size: %x source: %d sink: %d denied: %b data: %x corrupt: %b\n",
4276a527891SBigWhiteDog              d.size, d.source, d.sink, d.denied, d.data, d.corrupt
4286a527891SBigWhiteDog            )
4296a527891SBigWhiteDog          }
4306a527891SBigWhiteDog          is(toB) {
4316a527891SBigWhiteDog            XSDebug(false, true.B,
4326a527891SBigWhiteDog              d.channelName + " Grant toB size: %x source: %d sink: %d denied: %b data: %x corrupt: %b\n",
4336a527891SBigWhiteDog              d.size, d.source, d.sink, d.denied, d.data, d.corrupt
4346a527891SBigWhiteDog            )
4356a527891SBigWhiteDog          }
4366a527891SBigWhiteDog          is(toN) {
4376a527891SBigWhiteDog            XSDebug(false, true.B,
4386a527891SBigWhiteDog              d.channelName + " Grant toN size: %x source: %d sink: %d denied: %b data: %x corrupt: %b\n",
4396a527891SBigWhiteDog              d.size, d.source, d.sink, d.denied, d.data, d.corrupt
4406a527891SBigWhiteDog            )
4416a527891SBigWhiteDog          }
4426a527891SBigWhiteDog        }
4436a527891SBigWhiteDog      }
4446a527891SBigWhiteDog
4456a527891SBigWhiteDog      is(GrantData) {
4466a527891SBigWhiteDog        switch(d.param) {
4476a527891SBigWhiteDog          is(toT) {
4486a527891SBigWhiteDog            XSDebug(false, true.B,
4496a527891SBigWhiteDog              d.channelName + " GrantData toT size: %x source: %d sink: %d denied: %b data: %x corrupt: %b\n",
4506a527891SBigWhiteDog              d.size, d.source, d.sink, d.denied, d.data, d.corrupt
4516a527891SBigWhiteDog            )
4526a527891SBigWhiteDog          }
4536a527891SBigWhiteDog          is(toB) {
4546a527891SBigWhiteDog            XSDebug(false, true.B,
4556a527891SBigWhiteDog              d.channelName + " GrantData toB size: %x source: %d sink: %d denied: %b data: %x corrupt: %b\n",
4566a527891SBigWhiteDog              d.size, d.source, d.sink, d.denied, d.data, d.corrupt
4576a527891SBigWhiteDog            )
4586a527891SBigWhiteDog          }
4596a527891SBigWhiteDog          is(toN) {
4606a527891SBigWhiteDog            XSDebug(false, true.B,
4616a527891SBigWhiteDog              d.channelName + " GrantData toN size: %x source: %d sink: %d denied: %b data: %x corrupt: %b\n",
4626a527891SBigWhiteDog              d.size, d.source, d.sink, d.denied, d.data, d.corrupt
4636a527891SBigWhiteDog            )
4646a527891SBigWhiteDog          }
4656a527891SBigWhiteDog        }
4666a527891SBigWhiteDog      }
4676a527891SBigWhiteDog
4686a527891SBigWhiteDog      is(ReleaseAck) {
4696a527891SBigWhiteDog        XSDebug(false, true.B,
4706a527891SBigWhiteDog          d.channelName + " ReleaseAck param: %x size: %x source: %d sink: %d denied: %b data: %x corrupt: %b\n",
4716a527891SBigWhiteDog          d.param, d.size, d.source, d.sink, d.denied, d.data, d.corrupt
4726a527891SBigWhiteDog        )
4736a527891SBigWhiteDog      }
4746a527891SBigWhiteDog
4756a527891SBigWhiteDog    }
4766a527891SBigWhiteDog  }
4776a527891SBigWhiteDog
4786a527891SBigWhiteDog  def printChannelE(e: TLBundleE): Unit = {
4796a527891SBigWhiteDog    XSDebug(false, true.B, e.channelName + "GrantAck sink: %d\n", e.sink)
4806a527891SBigWhiteDog  }
4816a527891SBigWhiteDog
4828f653805SLinJiawei}
483