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