1618fb109Slinjiaweipackage utils 2618fb109Slinjiawei 3618fb109Slinjiaweiimport chisel3._ 4618fb109Slinjiaweiimport chipsalliance.rocketchip.config.Parameters 58f653805SLinJiaweiimport chisel3.util.DecoupledIO 6618fb109Slinjiaweiimport freechips.rocketchip.diplomacy.{LazyModule, LazyModuleImp} 78f653805SLinJiaweiimport freechips.rocketchip.tilelink.{TLBundle, TLClientNode, TLIdentityNode, TLMasterParameters, TLMasterPortParameters} 8618fb109Slinjiawei 9618fb109Slinjiaweiclass DebugIdentityNode()(implicit p: Parameters) extends LazyModule { 10618fb109Slinjiawei 11618fb109Slinjiawei val node = TLIdentityNode() 12618fb109Slinjiawei 13618fb109Slinjiawei val n = TLClientNode(Seq(TLMasterPortParameters.v1( 14618fb109Slinjiawei Seq( 15618fb109Slinjiawei TLMasterParameters.v1("debug node") 16618fb109Slinjiawei ) 17618fb109Slinjiawei ))) 18618fb109Slinjiawei 19*5c5bd416Sljw lazy val module = new LazyModuleImp(this) with HasTLDump{ 20618fb109Slinjiawei val (out, _) = node.out(0) 21618fb109Slinjiawei val (in, _) = node.in(0) 228f653805SLinJiawei 238f653805SLinJiawei def debug(t: TLBundle, valid: Boolean = false): Unit ={ 248f653805SLinJiawei def fire[T <: Data](x: DecoupledIO[T]) = if(valid) x.valid else x.fire() 258f653805SLinJiawei val channels = Seq(t.a, t.b, t.c, t.d, t.e) 268f653805SLinJiawei channels.foreach(c => 278f653805SLinJiawei when(fire(c)){ 28ab3aa7eeSBigWhiteDog XSDebug(" isFire:%d ",c.fire()) 298f653805SLinJiawei c.bits.dump 30618fb109Slinjiawei } 318f653805SLinJiawei ) 32618fb109Slinjiawei } 33fd8d353aSBigWhiteDog debug(in, false) 34618fb109Slinjiawei } 35618fb109Slinjiawei} 360ccdef88Slinjiawei 370ccdef88Slinjiaweiobject DebugIdentityNode { 380ccdef88Slinjiawei def apply()(implicit p: Parameters): TLIdentityNode = { 390ccdef88Slinjiawei val identityNode = LazyModule(new DebugIdentityNode()) 400ccdef88Slinjiawei identityNode.node 410ccdef88Slinjiawei } 420ccdef88Slinjiawei} 43