xref: /XiangShan/src/main/scala/utils/TLDump.scala (revision 6a527891ae3bafc8db0dde9739051bf1913e00d9)
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