1/*************************************************************************************** 2* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences 3* Copyright (c) 2020-2021 Peng Cheng Laboratory 4* 5* XiangShan is licensed under Mulan PSL v2. 6* You can use this software according to the terms and conditions of the Mulan PSL v2. 7* You may obtain a copy of Mulan PSL v2 at: 8* http://license.coscl.org.cn/MulanPSL2 9* 10* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, 11* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, 12* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. 13* 14* See the Mulan PSL v2 for more details. 15***************************************************************************************/ 16 17package utils 18 19import chisel3._ 20import chipsalliance.rocketchip.config.Parameters 21import chisel3.util.DecoupledIO 22import freechips.rocketchip.diplomacy.{LazyModule, LazyModuleImp} 23import freechips.rocketchip.tilelink.{TLBundle, TLClientNode, TLIdentityNode, TLMasterParameters, TLMasterPortParameters} 24 25class DebugIdentityNode()(implicit p: Parameters) extends LazyModule { 26 27 val node = TLIdentityNode() 28 29 val n = TLClientNode(Seq(TLMasterPortParameters.v1( 30 Seq( 31 TLMasterParameters.v1("debug node") 32 ) 33 ))) 34 35 lazy val module = new LazyModuleImp(this) with HasTLDump{ 36 val (out, _) = node.out(0) 37 val (in, _) = node.in(0) 38 39 def debug(t: TLBundle, valid: Boolean = false): Unit ={ 40 def fire[T <: Data](x: DecoupledIO[T]) = if(valid) x.valid else x.fire() 41 val channels = Seq(t.a, t.b, t.c, t.d, t.e) 42 channels.foreach(c => 43 when(fire(c)){ 44 XSDebug(" isFire:%d ",c.fire()) 45 c.bits.dump 46 } 47 ) 48 } 49 debug(in, false) 50 } 51} 52 53object DebugIdentityNode { 54 def apply()(implicit p: Parameters): TLIdentityNode = { 55 val identityNode = LazyModule(new DebugIdentityNode()) 56 identityNode.node 57 } 58} 59