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