提交 8f653805 编写于 作者: L LinJiawei

TLDump: opt print

上级 6ef34ce8
......@@ -2,8 +2,9 @@ package utils
import chisel3._
import chipsalliance.rocketchip.config.Parameters
import chisel3.util.DecoupledIO
import freechips.rocketchip.diplomacy.{LazyModule, LazyModuleImp}
import freechips.rocketchip.tilelink.{TLClientNode, TLIdentityNode, TLMasterParameters, TLMasterPortParameters}
import freechips.rocketchip.tilelink.{TLBundle, TLClientNode, TLIdentityNode, TLMasterParameters, TLMasterPortParameters}
import xiangshan.HasXSLog
class DebugIdentityNode()(implicit p: Parameters) extends LazyModule {
......@@ -19,14 +20,18 @@ class DebugIdentityNode()(implicit p: Parameters) extends LazyModule {
lazy val module = new LazyModuleImp(this) with HasXSLog with HasTLDump{
val (out, _) = node.out(0)
val (in, _) = node.in(0)
when(in.a.fire()){
XSDebug(" ")
in.a.bits.dump
}
when(in.d.fire()){
XSDebug(" ")
in.d.bits.dump
def debug(t: TLBundle, valid: Boolean = false): Unit ={
def fire[T <: Data](x: DecoupledIO[T]) = if(valid) x.valid else x.fire()
val channels = Seq(t.a, t.b, t.c, t.d, t.e)
channels.foreach(c =>
when(fire(c)){
XSDebug(" ")
c.bits.dump
}
)
}
debug(in, true)
}
}
......
......@@ -6,40 +6,30 @@ import xiangshan.HasXSLog
trait HasTLDump { this: HasXSLog =>
implicit class dumpA(a: TLBundleA) {
def dump =
XSDebug(false, true.B,
a.channelName + " opcode: %x param: %x size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n",
a.opcode, a.param, a.size, a.source, a.address, a.mask, a.data, a.corrupt
)
}
implicit class dumpB(b: TLBundleB) {
def dump =
XSDebug(false, true.B,
b.channelName + " opcode: %x param: %x size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n",
b.opcode, b.param, b.size, b.source, b.address, b.mask, b.data, b.corrupt
)
}
implicit class dumpC(c: TLBundleC) {
def dump =
XSDebug(false, true.B,
c.channelName + " opcode: %x param: %x size: %x source: %d address: %x data: %x corrupt: %b\n",
c.opcode, c.param, c.size, c.source, c.address, c.data, c.corrupt
)
}
implicit class dumpD(d: TLBundleD) {
def dump =
XSDebug(false, true.B,
d.channelName + " opcode: %x param: %x size: %x source: %d sink: %d denied: %b data: %x corrupt: %b\n",
d.opcode, d.param, d.size, d.source, d.sink, d.denied, d.data, d.corrupt
)
}
implicit class dumpE(e: TLBundleE) {
def dump =
XSDebug(false, true.B, e.channelName + " sink: %d\n", e.sink)
implicit class TLDump(channel: TLChannel) {
def dump = channel match {
case a: TLBundleA =>
XSDebug(false, true.B,
a.channelName + " opcode: %x param: %x size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n",
a.opcode, a.param, a.size, a.source, a.address, a.mask, a.data, a.corrupt
)
case b: TLBundleB =>
XSDebug(false, true.B,
b.channelName + " opcode: %x param: %x size: %x source: %d address: %x mask: %x data: %x corrupt: %b\n",
b.opcode, b.param, b.size, b.source, b.address, b.mask, b.data, b.corrupt
)
case c: TLBundleC =>
XSDebug(false, true.B,
c.channelName + " opcode: %x param: %x size: %x source: %d address: %x data: %x corrupt: %b\n",
c.opcode, c.param, c.size, c.source, c.address, c.data, c.corrupt
)
case d: TLBundleD =>
XSDebug(false, true.B,
d.channelName + " opcode: %x param: %x size: %x source: %d sink: %d denied: %b data: %x corrupt: %b\n",
d.opcode, d.param, d.size, d.source, d.sink, d.denied, d.data, d.corrupt
)
case e: TLBundleE =>
XSDebug(false, true.B, e.channelName + " sink: %d\n", e.sink)
}
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册