1*c6d43980SLemover/*************************************************************************************** 2*c6d43980SLemover* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences 3*c6d43980SLemover* 4*c6d43980SLemover* XiangShan is licensed under Mulan PSL v2. 5*c6d43980SLemover* You can use this software according to the terms and conditions of the Mulan PSL v2. 6*c6d43980SLemover* You may obtain a copy of Mulan PSL v2 at: 7*c6d43980SLemover* http://license.coscl.org.cn/MulanPSL2 8*c6d43980SLemover* 9*c6d43980SLemover* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, 10*c6d43980SLemover* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, 11*c6d43980SLemover* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. 12*c6d43980SLemover* 13*c6d43980SLemover* See the Mulan PSL v2 for more details. 14*c6d43980SLemover***************************************************************************************/ 15*c6d43980SLemover 16618fb109Slinjiaweipackage utils 17618fb109Slinjiawei 18618fb109Slinjiaweiimport chisel3._ 19618fb109Slinjiaweiimport chipsalliance.rocketchip.config.Parameters 208f653805SLinJiaweiimport chisel3.util.DecoupledIO 21618fb109Slinjiaweiimport freechips.rocketchip.diplomacy.{LazyModule, LazyModuleImp} 228f653805SLinJiaweiimport freechips.rocketchip.tilelink.{TLBundle, TLClientNode, TLIdentityNode, TLMasterParameters, TLMasterPortParameters} 23618fb109Slinjiawei 24618fb109Slinjiaweiclass DebugIdentityNode()(implicit p: Parameters) extends LazyModule { 25618fb109Slinjiawei 26618fb109Slinjiawei val node = TLIdentityNode() 27618fb109Slinjiawei 28618fb109Slinjiawei val n = TLClientNode(Seq(TLMasterPortParameters.v1( 29618fb109Slinjiawei Seq( 30618fb109Slinjiawei TLMasterParameters.v1("debug node") 31618fb109Slinjiawei ) 32618fb109Slinjiawei ))) 33618fb109Slinjiawei 345c5bd416Sljw lazy val module = new LazyModuleImp(this) with HasTLDump{ 35618fb109Slinjiawei val (out, _) = node.out(0) 36618fb109Slinjiawei val (in, _) = node.in(0) 378f653805SLinJiawei 388f653805SLinJiawei def debug(t: TLBundle, valid: Boolean = false): Unit ={ 398f653805SLinJiawei def fire[T <: Data](x: DecoupledIO[T]) = if(valid) x.valid else x.fire() 408f653805SLinJiawei val channels = Seq(t.a, t.b, t.c, t.d, t.e) 418f653805SLinJiawei channels.foreach(c => 428f653805SLinJiawei when(fire(c)){ 43ab3aa7eeSBigWhiteDog XSDebug(" isFire:%d ",c.fire()) 448f653805SLinJiawei c.bits.dump 45618fb109Slinjiawei } 468f653805SLinJiawei ) 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