1c6d43980SLemover/*************************************************************************************** 2c6d43980SLemover* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences 3f320e0f0SYinan Xu* Copyright (c) 2020-2021 Peng Cheng Laboratory 4c6d43980SLemover* 5c6d43980SLemover* XiangShan is licensed under Mulan PSL v2. 6c6d43980SLemover* You can use this software according to the terms and conditions of the Mulan PSL v2. 7c6d43980SLemover* You may obtain a copy of Mulan PSL v2 at: 8c6d43980SLemover* http://license.coscl.org.cn/MulanPSL2 9c6d43980SLemover* 10c6d43980SLemover* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, 11c6d43980SLemover* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, 12c6d43980SLemover* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. 13c6d43980SLemover* 14c6d43980SLemover* See the Mulan PSL v2 for more details. 15c6d43980SLemover***************************************************************************************/ 16c6d43980SLemover 17618fb109Slinjiaweipackage utils 18618fb109Slinjiawei 19618fb109Slinjiaweiimport chisel3._ 208891a219SYinan Xuimport org.chipsalliance.cde.config.Parameters 218f653805SLinJiaweiimport chisel3.util.DecoupledIO 22618fb109Slinjiaweiimport freechips.rocketchip.diplomacy.{LazyModule, LazyModuleImp} 238f653805SLinJiaweiimport freechips.rocketchip.tilelink.{TLBundle, TLClientNode, TLIdentityNode, TLMasterParameters, TLMasterPortParameters} 24bb2f3f51STang Haojinimport utility.XSDebug 25618fb109Slinjiawei 26618fb109Slinjiaweiclass DebugIdentityNode()(implicit p: Parameters) extends LazyModule { 27618fb109Slinjiawei 28618fb109Slinjiawei val node = TLIdentityNode() 29618fb109Slinjiawei 30618fb109Slinjiawei val n = TLClientNode(Seq(TLMasterPortParameters.v1( 31618fb109Slinjiawei Seq( 32618fb109Slinjiawei TLMasterParameters.v1("debug node") 33618fb109Slinjiawei ) 34618fb109Slinjiawei ))) 35618fb109Slinjiawei 365c5bd416Sljw lazy val module = new LazyModuleImp(this) with HasTLDump { 37618fb109Slinjiawei val (out, _) = node.out(0) 38618fb109Slinjiawei val (in, _) = node.in(0) 398f653805SLinJiawei 408f653805SLinJiawei def debug(t: TLBundle, valid: Boolean = false): Unit ={ 41935edac4STang Haojin def fire[T <: Data](x: DecoupledIO[T]) = if(valid) x.valid else x.fire 428f653805SLinJiawei val channels = Seq(t.a, t.b, t.c, t.d, t.e) 43*8b33cd30Sklin02 channels.foreach { c => 44*8b33cd30Sklin02 XSDebug(fire(c), " isFire:%d ", c.fire) 45*8b33cd30Sklin02 c.bits.dump(fire(c)) 46618fb109Slinjiawei } 47618fb109Slinjiawei } 48fd8d353aSBigWhiteDog debug(in, false) 49618fb109Slinjiawei } 50618fb109Slinjiawei} 510ccdef88Slinjiawei 520ccdef88Slinjiaweiobject DebugIdentityNode { 530ccdef88Slinjiawei def apply()(implicit p: Parameters): TLIdentityNode = { 540ccdef88Slinjiawei val identityNode = LazyModule(new DebugIdentityNode()) 550ccdef88Slinjiawei identityNode.node 560ccdef88Slinjiawei } 570ccdef88Slinjiawei} 58