1e2801f97Slinjiaweipackage utils 2e2801f97Slinjiawei 3e2801f97Slinjiaweiimport chisel3._ 4*6a527891SBigWhiteDogimport chisel3.util._ 5*6a527891SBigWhiteDogimport freechips.rocketchip.tilelink.TLMessages._ 6*6a527891SBigWhiteDogimport freechips.rocketchip.tilelink.TLPermissions._ 7e2801f97Slinjiaweiimport freechips.rocketchip.tilelink.{TLBundle, TLBundleA, TLBundleB, TLBundleC, TLBundleD, TLBundleE, TLChannel} 81865a66fSlinjiaweiimport xiangshan.HasXSLog 9e2801f97Slinjiawei 10*6a527891SBigWhiteDogtrait HasTLDump { 11*6a527891SBigWhiteDog this: HasXSLog => 12e2801f97Slinjiawei 138f653805SLinJiawei implicit class TLDump(channel: TLChannel) { 148f653805SLinJiawei def dump = channel match { 158f653805SLinJiawei case a: TLBundleA => 16*6a527891SBigWhiteDog printChannelA(a) 178f653805SLinJiawei case b: TLBundleB => 18*6a527891SBigWhiteDog printChannelB(b) 198f653805SLinJiawei case c: TLBundleC => 20*6a527891SBigWhiteDog printChannelC(c) 218f653805SLinJiawei case d: TLBundleD => 22*6a527891SBigWhiteDog printChannelD(d) 238f653805SLinJiawei case e: TLBundleE => 24*6a527891SBigWhiteDog printChannelE(e) 25e2801f97Slinjiawei } 26e2801f97Slinjiawei } 27*6a527891SBigWhiteDog 28*6a527891SBigWhiteDog def printChannelA(a: TLBundleA): Unit = { 29*6a527891SBigWhiteDog switch(a.opcode) { 30*6a527891SBigWhiteDog is(PutFullData) { 31*6a527891SBigWhiteDog XSDebug(false, true.B, 32*6a527891SBigWhiteDog a.channelName + " PutFullData param: %x size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n", 33*6a527891SBigWhiteDog a.param, a.size, a.source, a.address, a.mask, a.data, a.corrupt 34*6a527891SBigWhiteDog ) 35*6a527891SBigWhiteDog } 36*6a527891SBigWhiteDog 37*6a527891SBigWhiteDog is(PutPartialData) { 38*6a527891SBigWhiteDog XSDebug(false, true.B, 39*6a527891SBigWhiteDog a.channelName + " PutPartialData param: %x size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n", 40*6a527891SBigWhiteDog a.param, a.size, a.source, a.address, a.mask, a.data, a.corrupt 41*6a527891SBigWhiteDog ) 42*6a527891SBigWhiteDog } 43*6a527891SBigWhiteDog 44*6a527891SBigWhiteDog is(ArithmeticData) { 45*6a527891SBigWhiteDog XSDebug(false, true.B, 46*6a527891SBigWhiteDog a.channelName + " ArithmeticData param: %x size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n", 47*6a527891SBigWhiteDog a.param, a.size, a.source, a.address, a.mask, a.data, a.corrupt 48*6a527891SBigWhiteDog ) 49*6a527891SBigWhiteDog } 50*6a527891SBigWhiteDog 51*6a527891SBigWhiteDog is(LogicalData) { 52*6a527891SBigWhiteDog XSDebug(false, true.B, 53*6a527891SBigWhiteDog a.channelName + " LogicalData param: %x size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n", 54*6a527891SBigWhiteDog a.param, a.size, a.source, a.address, a.mask, a.data, a.corrupt 55*6a527891SBigWhiteDog ) 56*6a527891SBigWhiteDog } 57*6a527891SBigWhiteDog 58*6a527891SBigWhiteDog is(Get) { 59*6a527891SBigWhiteDog XSDebug(false, true.B, 60*6a527891SBigWhiteDog a.channelName + " Get param: %x size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n", 61*6a527891SBigWhiteDog a.param, a.size, a.source, a.address, a.mask, a.data, a.corrupt 62*6a527891SBigWhiteDog ) 63*6a527891SBigWhiteDog } 64*6a527891SBigWhiteDog 65*6a527891SBigWhiteDog is(Hint) { 66*6a527891SBigWhiteDog XSDebug(false, true.B, 67*6a527891SBigWhiteDog a.channelName + " Intent param: %x size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n", 68*6a527891SBigWhiteDog a.param, a.size, a.source, a.address, a.mask, a.data, a.corrupt 69*6a527891SBigWhiteDog ) 70*6a527891SBigWhiteDog } 71*6a527891SBigWhiteDog 72*6a527891SBigWhiteDog is(AcquireBlock) { 73*6a527891SBigWhiteDog switch(a.param) { 74*6a527891SBigWhiteDog is(NtoB) { 75*6a527891SBigWhiteDog XSDebug(false, true.B, 76*6a527891SBigWhiteDog a.channelName + " AcquireBlock NtoB size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n", 77*6a527891SBigWhiteDog a.size, a.source, a.address, a.mask, a.data, a.corrupt 78*6a527891SBigWhiteDog ) 79*6a527891SBigWhiteDog } 80*6a527891SBigWhiteDog is(NtoT) { 81*6a527891SBigWhiteDog XSDebug(false, true.B, 82*6a527891SBigWhiteDog a.channelName + " AcquireBlock NtoT size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n", 83*6a527891SBigWhiteDog a.size, a.source, a.address, a.mask, a.data, a.corrupt 84*6a527891SBigWhiteDog ) 85*6a527891SBigWhiteDog } 86*6a527891SBigWhiteDog is(BtoT) { 87*6a527891SBigWhiteDog XSDebug(false, true.B, 88*6a527891SBigWhiteDog a.channelName + " AcquireBlock BtoT size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n", 89*6a527891SBigWhiteDog a.size, a.source, a.address, a.mask, a.data, a.corrupt 90*6a527891SBigWhiteDog ) 91*6a527891SBigWhiteDog } 92*6a527891SBigWhiteDog } 93*6a527891SBigWhiteDog } 94*6a527891SBigWhiteDog 95*6a527891SBigWhiteDog is(AcquirePerm) { 96*6a527891SBigWhiteDog switch(a.param) { 97*6a527891SBigWhiteDog is(NtoB) { 98*6a527891SBigWhiteDog XSDebug(false, true.B, 99*6a527891SBigWhiteDog a.channelName + " AcquirePerm NtoB size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n", 100*6a527891SBigWhiteDog a.size, a.source, a.address, a.mask, a.data, a.corrupt 101*6a527891SBigWhiteDog ) 102*6a527891SBigWhiteDog } 103*6a527891SBigWhiteDog is(NtoT) { 104*6a527891SBigWhiteDog XSDebug(false, true.B, 105*6a527891SBigWhiteDog a.channelName + " AcquirePerm NtoT size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n", 106*6a527891SBigWhiteDog a.size, a.source, a.address, a.mask, a.data, a.corrupt 107*6a527891SBigWhiteDog ) 108*6a527891SBigWhiteDog } 109*6a527891SBigWhiteDog is(BtoT) { 110*6a527891SBigWhiteDog XSDebug(false, true.B, 111*6a527891SBigWhiteDog a.channelName + " AcquirePerm BtoT size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n", 112*6a527891SBigWhiteDog a.size, a.source, a.address, a.mask, a.data, a.corrupt 113*6a527891SBigWhiteDog ) 114*6a527891SBigWhiteDog } 115*6a527891SBigWhiteDog } 116*6a527891SBigWhiteDog } 117*6a527891SBigWhiteDog 118*6a527891SBigWhiteDog } 119*6a527891SBigWhiteDog } 120*6a527891SBigWhiteDog 121*6a527891SBigWhiteDog def printChannelB(b: TLBundleB): Unit = { 122*6a527891SBigWhiteDog switch(b.opcode) { 123*6a527891SBigWhiteDog is(PutFullData) { 124*6a527891SBigWhiteDog XSDebug(false, true.B, 125*6a527891SBigWhiteDog b.channelName + " PutFullData param: %x size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n", 126*6a527891SBigWhiteDog b.param, b.size, b.source, b.address, b.mask, b.data, b.corrupt 127*6a527891SBigWhiteDog ) 128*6a527891SBigWhiteDog } 129*6a527891SBigWhiteDog 130*6a527891SBigWhiteDog is(PutPartialData) { 131*6a527891SBigWhiteDog XSDebug(false, true.B, 132*6a527891SBigWhiteDog b.channelName + " PutPartialData param: %x size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n", 133*6a527891SBigWhiteDog b.param, b.size, b.source, b.address, b.mask, b.data, b.corrupt 134*6a527891SBigWhiteDog ) 135*6a527891SBigWhiteDog } 136*6a527891SBigWhiteDog 137*6a527891SBigWhiteDog is(ArithmeticData) { 138*6a527891SBigWhiteDog XSDebug(false, true.B, 139*6a527891SBigWhiteDog b.channelName + " ArithmeticData param: %x size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n", 140*6a527891SBigWhiteDog b.param, b.size, b.source, b.address, b.mask, b.data, b.corrupt 141*6a527891SBigWhiteDog ) 142*6a527891SBigWhiteDog } 143*6a527891SBigWhiteDog 144*6a527891SBigWhiteDog is(LogicalData) { 145*6a527891SBigWhiteDog XSDebug(false, true.B, 146*6a527891SBigWhiteDog b.channelName + " LogicalData param: %x size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n", 147*6a527891SBigWhiteDog b.param, b.size, b.source, b.address, b.mask, b.data, b.corrupt 148*6a527891SBigWhiteDog ) 149*6a527891SBigWhiteDog } 150*6a527891SBigWhiteDog 151*6a527891SBigWhiteDog is(Get) { 152*6a527891SBigWhiteDog XSDebug(false, true.B, 153*6a527891SBigWhiteDog b.channelName + " Get param: %x size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n", 154*6a527891SBigWhiteDog b.param, b.size, b.source, b.address, b.mask, b.data, b.corrupt 155*6a527891SBigWhiteDog ) 156*6a527891SBigWhiteDog } 157*6a527891SBigWhiteDog 158*6a527891SBigWhiteDog is(Hint) { 159*6a527891SBigWhiteDog XSDebug(false, true.B, 160*6a527891SBigWhiteDog b.channelName + " Intent param: %x size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n", 161*6a527891SBigWhiteDog b.param, b.size, b.source, b.address, b.mask, b.data, b.corrupt 162*6a527891SBigWhiteDog ) 163*6a527891SBigWhiteDog } 164*6a527891SBigWhiteDog 165*6a527891SBigWhiteDog is(Probe) { 166*6a527891SBigWhiteDog switch(b.param) { 167*6a527891SBigWhiteDog is(toN) { 168*6a527891SBigWhiteDog XSDebug(false, true.B, 169*6a527891SBigWhiteDog b.channelName + " Probe toN size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n", 170*6a527891SBigWhiteDog b.size, b.source, b.address, b.mask, b.data, b.corrupt 171*6a527891SBigWhiteDog ) 172*6a527891SBigWhiteDog } 173*6a527891SBigWhiteDog is(toB) { 174*6a527891SBigWhiteDog XSDebug(false, true.B, 175*6a527891SBigWhiteDog b.channelName + " Probe toB size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n", 176*6a527891SBigWhiteDog b.size, b.source, b.address, b.mask, b.data, b.corrupt 177*6a527891SBigWhiteDog ) 178*6a527891SBigWhiteDog } 179*6a527891SBigWhiteDog is(toT) { 180*6a527891SBigWhiteDog XSDebug(false, true.B, 181*6a527891SBigWhiteDog b.channelName + " Probe toT size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n", 182*6a527891SBigWhiteDog b.size, b.source, b.address, b.mask, b.data, b.corrupt 183*6a527891SBigWhiteDog ) 184*6a527891SBigWhiteDog } 185*6a527891SBigWhiteDog } 186*6a527891SBigWhiteDog } 187*6a527891SBigWhiteDog 188*6a527891SBigWhiteDog } 189*6a527891SBigWhiteDog } 190*6a527891SBigWhiteDog 191*6a527891SBigWhiteDog def printChannelC(c: TLBundleC): Unit = { 192*6a527891SBigWhiteDog switch(c.opcode) { 193*6a527891SBigWhiteDog is(AccessAck) { 194*6a527891SBigWhiteDog XSDebug(false, true.B, 195*6a527891SBigWhiteDog c.channelName + " AccessAck param: %x size: %x source: %d address: %x data: %x corrupt: %b\n", 196*6a527891SBigWhiteDog c.param, c.size, c.source, c.address, c.data, c.corrupt 197*6a527891SBigWhiteDog ) 198*6a527891SBigWhiteDog } 199*6a527891SBigWhiteDog 200*6a527891SBigWhiteDog is(AccessAckData) { 201*6a527891SBigWhiteDog XSDebug(false, true.B, 202*6a527891SBigWhiteDog c.channelName + " AccessAckData param: %x size: %x source: %d address: %x data: %x corrupt: %b\n", 203*6a527891SBigWhiteDog c.param, c.size, c.source, c.address, c.data, c.corrupt 204*6a527891SBigWhiteDog ) 205*6a527891SBigWhiteDog } 206*6a527891SBigWhiteDog 207*6a527891SBigWhiteDog is(HintAck) { 208*6a527891SBigWhiteDog XSDebug(false, true.B, 209*6a527891SBigWhiteDog c.channelName + " HintAck param: %x size: %x source: %d address: %x data: %x corrupt: %b\n", 210*6a527891SBigWhiteDog c.param, c.size, c.source, c.address, c.data, c.corrupt 211*6a527891SBigWhiteDog ) 212*6a527891SBigWhiteDog } 213*6a527891SBigWhiteDog 214*6a527891SBigWhiteDog is(ProbeAck) { 215*6a527891SBigWhiteDog switch(c.param) { 216*6a527891SBigWhiteDog is(TtoB) { 217*6a527891SBigWhiteDog XSDebug(false, true.B, 218*6a527891SBigWhiteDog c.channelName + " ProbeAck TtoB size: %x source: %d address: %x data: %x corrupt: %b\n", 219*6a527891SBigWhiteDog c.size, c.source, c.address, c.data, c.corrupt 220*6a527891SBigWhiteDog ) 221*6a527891SBigWhiteDog } 222*6a527891SBigWhiteDog is(TtoN) { 223*6a527891SBigWhiteDog XSDebug(false, true.B, 224*6a527891SBigWhiteDog c.channelName + " ProbeAck TtoN size: %x source: %d address: %x data: %x corrupt: %b\n", 225*6a527891SBigWhiteDog c.size, c.source, c.address, c.data, c.corrupt 226*6a527891SBigWhiteDog ) 227*6a527891SBigWhiteDog } 228*6a527891SBigWhiteDog is(BtoN) { 229*6a527891SBigWhiteDog XSDebug(false, true.B, 230*6a527891SBigWhiteDog c.channelName + " ProbeAck BtoN size: %x source: %d address: %x data: %x corrupt: %b\n", 231*6a527891SBigWhiteDog c.size, c.source, c.address, c.data, c.corrupt 232*6a527891SBigWhiteDog ) 233*6a527891SBigWhiteDog } 234*6a527891SBigWhiteDog is(TtoT) { 235*6a527891SBigWhiteDog XSDebug(false, true.B, 236*6a527891SBigWhiteDog c.channelName + " ProbeAck TtoT size: %x source: %d address: %x data: %x corrupt: %b\n", 237*6a527891SBigWhiteDog c.size, c.source, c.address, c.data, c.corrupt 238*6a527891SBigWhiteDog ) 239*6a527891SBigWhiteDog } 240*6a527891SBigWhiteDog is(BtoB) { 241*6a527891SBigWhiteDog XSDebug(false, true.B, 242*6a527891SBigWhiteDog c.channelName + " ProbeAck BtoB size: %x source: %d address: %x data: %x corrupt: %b\n", 243*6a527891SBigWhiteDog c.size, c.source, c.address, c.data, c.corrupt 244*6a527891SBigWhiteDog ) 245*6a527891SBigWhiteDog } 246*6a527891SBigWhiteDog is(NtoN) { 247*6a527891SBigWhiteDog XSDebug(false, true.B, 248*6a527891SBigWhiteDog c.channelName + " ProbeAck NtoN size: %x source: %d address: %x data: %x corrupt: %b\n", 249*6a527891SBigWhiteDog c.size, c.source, c.address, c.data, c.corrupt 250*6a527891SBigWhiteDog ) 251*6a527891SBigWhiteDog } 252*6a527891SBigWhiteDog } 253*6a527891SBigWhiteDog } 254*6a527891SBigWhiteDog 255*6a527891SBigWhiteDog is(ProbeAckData) { 256*6a527891SBigWhiteDog switch(c.param) { 257*6a527891SBigWhiteDog is(TtoB) { 258*6a527891SBigWhiteDog XSDebug(false, true.B, 259*6a527891SBigWhiteDog c.channelName + " ProbeAckData TtoB size: %x source: %d address: %x data: %x corrupt: %b\n", 260*6a527891SBigWhiteDog c.size, c.source, c.address, c.data, c.corrupt 261*6a527891SBigWhiteDog ) 262*6a527891SBigWhiteDog } 263*6a527891SBigWhiteDog is(TtoN) { 264*6a527891SBigWhiteDog XSDebug(false, true.B, 265*6a527891SBigWhiteDog c.channelName + " ProbeAckData TtoN size: %x source: %d address: %x data: %x corrupt: %b\n", 266*6a527891SBigWhiteDog c.size, c.source, c.address, c.data, c.corrupt 267*6a527891SBigWhiteDog ) 268*6a527891SBigWhiteDog } 269*6a527891SBigWhiteDog is(BtoN) { 270*6a527891SBigWhiteDog XSDebug(false, true.B, 271*6a527891SBigWhiteDog c.channelName + " ProbeAckData BtoN size: %x source: %d address: %x data: %x corrupt: %b\n", 272*6a527891SBigWhiteDog c.size, c.source, c.address, c.data, c.corrupt 273*6a527891SBigWhiteDog ) 274*6a527891SBigWhiteDog } 275*6a527891SBigWhiteDog is(TtoT) { 276*6a527891SBigWhiteDog XSDebug(false, true.B, 277*6a527891SBigWhiteDog c.channelName + " ProbeAckData TtoT size: %x source: %d address: %x data: %x corrupt: %b\n", 278*6a527891SBigWhiteDog c.size, c.source, c.address, c.data, c.corrupt 279*6a527891SBigWhiteDog ) 280*6a527891SBigWhiteDog } 281*6a527891SBigWhiteDog is(BtoB) { 282*6a527891SBigWhiteDog XSDebug(false, true.B, 283*6a527891SBigWhiteDog c.channelName + " ProbeAckData BtoB size: %x source: %d address: %x data: %x corrupt: %b\n", 284*6a527891SBigWhiteDog c.size, c.source, c.address, c.data, c.corrupt 285*6a527891SBigWhiteDog ) 286*6a527891SBigWhiteDog } 287*6a527891SBigWhiteDog is(NtoN) { 288*6a527891SBigWhiteDog XSDebug(false, true.B, 289*6a527891SBigWhiteDog c.channelName + " ProbeAckData NtoN size: %x source: %d address: %x data: %x corrupt: %b\n", 290*6a527891SBigWhiteDog c.size, c.source, c.address, c.data, c.corrupt 291*6a527891SBigWhiteDog ) 292*6a527891SBigWhiteDog } 293*6a527891SBigWhiteDog } 294*6a527891SBigWhiteDog } 295*6a527891SBigWhiteDog 296*6a527891SBigWhiteDog is(Release) { 297*6a527891SBigWhiteDog switch(c.param) { 298*6a527891SBigWhiteDog is(TtoB) { 299*6a527891SBigWhiteDog XSDebug(false, true.B, 300*6a527891SBigWhiteDog c.channelName + " Release TtoB size: %x source: %d address: %x data: %x corrupt: %b\n", 301*6a527891SBigWhiteDog c.size, c.source, c.address, c.data, c.corrupt 302*6a527891SBigWhiteDog ) 303*6a527891SBigWhiteDog } 304*6a527891SBigWhiteDog is(TtoN) { 305*6a527891SBigWhiteDog XSDebug(false, true.B, 306*6a527891SBigWhiteDog c.channelName + " Release TtoN size: %x source: %d address: %x data: %x corrupt: %b\n", 307*6a527891SBigWhiteDog c.size, c.source, c.address, c.data, c.corrupt 308*6a527891SBigWhiteDog ) 309*6a527891SBigWhiteDog } 310*6a527891SBigWhiteDog is(BtoN) { 311*6a527891SBigWhiteDog XSDebug(false, true.B, 312*6a527891SBigWhiteDog c.channelName + " Release BtoN size: %x source: %d address: %x data: %x corrupt: %b\n", 313*6a527891SBigWhiteDog c.size, c.source, c.address, c.data, c.corrupt 314*6a527891SBigWhiteDog ) 315*6a527891SBigWhiteDog } 316*6a527891SBigWhiteDog is(TtoT) { 317*6a527891SBigWhiteDog XSDebug(false, true.B, 318*6a527891SBigWhiteDog c.channelName + " Release TtoT size: %x source: %d address: %x data: %x corrupt: %b\n", 319*6a527891SBigWhiteDog c.size, c.source, c.address, c.data, c.corrupt 320*6a527891SBigWhiteDog ) 321*6a527891SBigWhiteDog } 322*6a527891SBigWhiteDog is(BtoB) { 323*6a527891SBigWhiteDog XSDebug(false, true.B, 324*6a527891SBigWhiteDog c.channelName + " Release BtoB size: %x source: %d address: %x data: %x corrupt: %b\n", 325*6a527891SBigWhiteDog c.size, c.source, c.address, c.data, c.corrupt 326*6a527891SBigWhiteDog ) 327*6a527891SBigWhiteDog } 328*6a527891SBigWhiteDog is(NtoN) { 329*6a527891SBigWhiteDog XSDebug(false, true.B, 330*6a527891SBigWhiteDog c.channelName + " Release NtoN size: %x source: %d address: %x data: %x corrupt: %b\n", 331*6a527891SBigWhiteDog c.size, c.source, c.address, c.data, c.corrupt 332*6a527891SBigWhiteDog ) 333*6a527891SBigWhiteDog } 334*6a527891SBigWhiteDog } 335*6a527891SBigWhiteDog } 336*6a527891SBigWhiteDog 337*6a527891SBigWhiteDog is(ReleaseData) { 338*6a527891SBigWhiteDog switch(c.param) { 339*6a527891SBigWhiteDog is(TtoB) { 340*6a527891SBigWhiteDog XSDebug(false, true.B, 341*6a527891SBigWhiteDog c.channelName + " ReleaseData TtoB size: %x source: %d address: %x data: %x corrupt: %b\n", 342*6a527891SBigWhiteDog c.size, c.source, c.address, c.data, c.corrupt 343*6a527891SBigWhiteDog ) 344*6a527891SBigWhiteDog } 345*6a527891SBigWhiteDog is(TtoN) { 346*6a527891SBigWhiteDog XSDebug(false, true.B, 347*6a527891SBigWhiteDog c.channelName + " ReleaseData TtoN size: %x source: %d address: %x data: %x corrupt: %b\n", 348*6a527891SBigWhiteDog c.size, c.source, c.address, c.data, c.corrupt 349*6a527891SBigWhiteDog ) 350*6a527891SBigWhiteDog } 351*6a527891SBigWhiteDog is(BtoN) { 352*6a527891SBigWhiteDog XSDebug(false, true.B, 353*6a527891SBigWhiteDog c.channelName + " ReleaseData BtoN size: %x source: %d address: %x data: %x corrupt: %b\n", 354*6a527891SBigWhiteDog c.size, c.source, c.address, c.data, c.corrupt 355*6a527891SBigWhiteDog ) 356*6a527891SBigWhiteDog } 357*6a527891SBigWhiteDog is(TtoT) { 358*6a527891SBigWhiteDog XSDebug(false, true.B, 359*6a527891SBigWhiteDog c.channelName + " ReleaseData TtoT size: %x source: %d address: %x data: %x corrupt: %b\n", 360*6a527891SBigWhiteDog c.size, c.source, c.address, c.data, c.corrupt 361*6a527891SBigWhiteDog ) 362*6a527891SBigWhiteDog } 363*6a527891SBigWhiteDog is(BtoB) { 364*6a527891SBigWhiteDog XSDebug(false, true.B, 365*6a527891SBigWhiteDog c.channelName + " ReleaseData BtoB size: %x source: %d address: %x data: %x corrupt: %b\n", 366*6a527891SBigWhiteDog c.size, c.source, c.address, c.data, c.corrupt 367*6a527891SBigWhiteDog ) 368*6a527891SBigWhiteDog } 369*6a527891SBigWhiteDog is(NtoN) { 370*6a527891SBigWhiteDog XSDebug(false, true.B, 371*6a527891SBigWhiteDog c.channelName + " ReleaseData NtoN size: %x source: %d address: %x data: %x corrupt: %b\n", 372*6a527891SBigWhiteDog c.size, c.source, c.address, c.data, c.corrupt 373*6a527891SBigWhiteDog ) 374*6a527891SBigWhiteDog } 375*6a527891SBigWhiteDog } 376*6a527891SBigWhiteDog } 377*6a527891SBigWhiteDog 378*6a527891SBigWhiteDog } 379*6a527891SBigWhiteDog } 380*6a527891SBigWhiteDog 381*6a527891SBigWhiteDog def printChannelD(d: TLBundleD): Unit = { 382*6a527891SBigWhiteDog switch(d.opcode) { 383*6a527891SBigWhiteDog is(AccessAck) { 384*6a527891SBigWhiteDog XSDebug(false, true.B, 385*6a527891SBigWhiteDog d.channelName + " AccessAck param: %x size: %x source: %d sink: %d denied: %b data: %x corrupt: %b\n", 386*6a527891SBigWhiteDog d.param, d.size, d.source, d.sink, d.denied, d.data, d.corrupt 387*6a527891SBigWhiteDog ) 388*6a527891SBigWhiteDog } 389*6a527891SBigWhiteDog 390*6a527891SBigWhiteDog is(AccessAckData) { 391*6a527891SBigWhiteDog XSDebug(false, true.B, 392*6a527891SBigWhiteDog d.channelName + " AccessAckData param: %x size: %x source: %d sink: %d denied: %b data: %x corrupt: %b\n", 393*6a527891SBigWhiteDog d.param, d.size, d.source, d.sink, d.denied, d.data, d.corrupt 394*6a527891SBigWhiteDog ) 395*6a527891SBigWhiteDog } 396*6a527891SBigWhiteDog 397*6a527891SBigWhiteDog is(HintAck) { 398*6a527891SBigWhiteDog XSDebug(false, true.B, 399*6a527891SBigWhiteDog d.channelName + " HintAck param: %x size: %x source: %d sink: %d denied: %b data: %x corrupt: %b\n", 400*6a527891SBigWhiteDog d.param, d.size, d.source, d.sink, d.denied, d.data, d.corrupt 401*6a527891SBigWhiteDog ) 402*6a527891SBigWhiteDog } 403*6a527891SBigWhiteDog 404*6a527891SBigWhiteDog is(Grant) { 405*6a527891SBigWhiteDog switch(d.param) { 406*6a527891SBigWhiteDog is(toT) { 407*6a527891SBigWhiteDog XSDebug(false, true.B, 408*6a527891SBigWhiteDog d.channelName + " Grant toT size: %x source: %d sink: %d denied: %b data: %x corrupt: %b\n", 409*6a527891SBigWhiteDog d.size, d.source, d.sink, d.denied, d.data, d.corrupt 410*6a527891SBigWhiteDog ) 411*6a527891SBigWhiteDog } 412*6a527891SBigWhiteDog is(toB) { 413*6a527891SBigWhiteDog XSDebug(false, true.B, 414*6a527891SBigWhiteDog d.channelName + " Grant toB size: %x source: %d sink: %d denied: %b data: %x corrupt: %b\n", 415*6a527891SBigWhiteDog d.size, d.source, d.sink, d.denied, d.data, d.corrupt 416*6a527891SBigWhiteDog ) 417*6a527891SBigWhiteDog } 418*6a527891SBigWhiteDog is(toN) { 419*6a527891SBigWhiteDog XSDebug(false, true.B, 420*6a527891SBigWhiteDog d.channelName + " Grant toN size: %x source: %d sink: %d denied: %b data: %x corrupt: %b\n", 421*6a527891SBigWhiteDog d.size, d.source, d.sink, d.denied, d.data, d.corrupt 422*6a527891SBigWhiteDog ) 423*6a527891SBigWhiteDog } 424*6a527891SBigWhiteDog } 425*6a527891SBigWhiteDog } 426*6a527891SBigWhiteDog 427*6a527891SBigWhiteDog is(GrantData) { 428*6a527891SBigWhiteDog switch(d.param) { 429*6a527891SBigWhiteDog is(toT) { 430*6a527891SBigWhiteDog XSDebug(false, true.B, 431*6a527891SBigWhiteDog d.channelName + " GrantData toT size: %x source: %d sink: %d denied: %b data: %x corrupt: %b\n", 432*6a527891SBigWhiteDog d.size, d.source, d.sink, d.denied, d.data, d.corrupt 433*6a527891SBigWhiteDog ) 434*6a527891SBigWhiteDog } 435*6a527891SBigWhiteDog is(toB) { 436*6a527891SBigWhiteDog XSDebug(false, true.B, 437*6a527891SBigWhiteDog d.channelName + " GrantData toB size: %x source: %d sink: %d denied: %b data: %x corrupt: %b\n", 438*6a527891SBigWhiteDog d.size, d.source, d.sink, d.denied, d.data, d.corrupt 439*6a527891SBigWhiteDog ) 440*6a527891SBigWhiteDog } 441*6a527891SBigWhiteDog is(toN) { 442*6a527891SBigWhiteDog XSDebug(false, true.B, 443*6a527891SBigWhiteDog d.channelName + " GrantData toN size: %x source: %d sink: %d denied: %b data: %x corrupt: %b\n", 444*6a527891SBigWhiteDog d.size, d.source, d.sink, d.denied, d.data, d.corrupt 445*6a527891SBigWhiteDog ) 446*6a527891SBigWhiteDog } 447*6a527891SBigWhiteDog } 448*6a527891SBigWhiteDog } 449*6a527891SBigWhiteDog 450*6a527891SBigWhiteDog is(ReleaseAck) { 451*6a527891SBigWhiteDog XSDebug(false, true.B, 452*6a527891SBigWhiteDog d.channelName + " ReleaseAck param: %x size: %x source: %d sink: %d denied: %b data: %x corrupt: %b\n", 453*6a527891SBigWhiteDog d.param, d.size, d.source, d.sink, d.denied, d.data, d.corrupt 454*6a527891SBigWhiteDog ) 455*6a527891SBigWhiteDog } 456*6a527891SBigWhiteDog 457*6a527891SBigWhiteDog } 458*6a527891SBigWhiteDog } 459*6a527891SBigWhiteDog 460*6a527891SBigWhiteDog def printChannelE(e: TLBundleE): Unit = { 461*6a527891SBigWhiteDog XSDebug(false, true.B, e.channelName + "GrantAck sink: %d\n", e.sink) 462*6a527891SBigWhiteDog } 463*6a527891SBigWhiteDog 4648f653805SLinJiawei} 465