diff --git a/src/main/scala/radiance/tile/RadianceCluster.scala b/src/main/scala/radiance/tile/RadianceCluster.scala index af94f4d..e5d1e10 100644 --- a/src/main/scala/radiance/tile/RadianceCluster.scala +++ b/src/main/scala/radiance/tile/RadianceCluster.scala @@ -96,10 +96,14 @@ class RadianceCluster ( guard_monitors { implicit p => t := from } t } + def connect_xbar_name(from: TLNode, name: Option[String] = None): TLNode = { + val t = LazyModule(new TLXbar(TLArbiter.roundRobin)) + name.map(t.suggestName) + guard_monitors { implicit p => t.node := from } + t.node + } def connect_xbar(from: TLNode): TLNode = { - val t = TLXbar() - guard_monitors { implicit p => t := from } - t + connect_xbar_name(from, None) } val radiance_smem_fanout = radianceTiles.zipWithIndex.flatMap { case (tile, cid) => @@ -215,19 +219,21 @@ class RadianceCluster ( } } } - val f_aligned = Seq.fill(2)(filter_nodes.map(_.map(_._1).map(connect_xbar))) + val f_aligned = Seq.fill(2)(filter_nodes.map(_.map(_._1).map(connect_xbar_name(_, Some("rad_aligned"))))) // val f_unaligned = Seq.fill(2)(filter_nodes.map(_.map(_._2).map(connect_xbar))) val f_unaligned = Seq.fill(2) { val serialized_node = TLEphemeralNode() - val serialized_in_xbar = TLXbar() - val serialized_out_xbar = TLXbar() + val serialized_in_xbar = LazyModule(new TLXbar()) + val serialized_out_xbar = LazyModule(new TLXbar()) + serialized_in_xbar.suggestName("unaligned_serialized_in_xbar") + serialized_out_xbar.suggestName("unaligned_serialized_out_xbar") guard_monitors { implicit p => - filter_nodes.foreach(_.map(_._2).foreach(serialized_in_xbar := _)) - serialized_node := serialized_in_xbar - serialized_out_xbar := serialized_node + filter_nodes.foreach(_.map(_._2).foreach(serialized_in_xbar.node := _)) + serialized_node := serialized_in_xbar.node + serialized_out_xbar.node := serialized_node } - Seq(serialized_out_xbar) + Seq(serialized_out_xbar.node) } @@ -254,8 +260,8 @@ class RadianceCluster ( (wb zip spad_sp_write_nodes).map { case (ww, sw) => Seq(ww, sw) } } // these nodes are random access - val nonuniform_r_nodes: Seq[TLNode] = splitter_nodes.map(connect_xbar) - val nonuniform_w_nodes: Seq[TLNode] = splitter_nodes.map(connect_xbar) + val nonuniform_r_nodes: Seq[TLNode] = splitter_nodes.map(connect_xbar_name(_, Some("rad_unaligned_r"))) + val nonuniform_w_nodes: Seq[TLNode] = splitter_nodes.map(connect_xbar_name(_, Some("rad_unaligned_w"))) (uniform_r_nodes, uniform_w_nodes, nonuniform_r_nodes, nonuniform_w_nodes) } @@ -265,17 +271,19 @@ class RadianceCluster ( smem_bank_mgrs.grouped(smem_subbanks).zipWithIndex.foreach { case (bank_mgrs, bid) => bank_mgrs.zipWithIndex.foreach { case (Seq(r, w), wid) => // TODO: this should be a coordinated round robin - val subbank_r_xbar = TLXbar(TLArbiter.lowestIndexFirst) - val subbank_w_xbar = TLXbar(TLArbiter.lowestIndexFirst) + val subbank_r_xbar = LazyModule(new TLXbar(TLArbiter.lowestIndexFirst)) + val subbank_w_xbar = LazyModule(new TLXbar(TLArbiter.lowestIndexFirst)) + subbank_r_xbar.suggestName(s"smem_b${bid}_w${wid}_r_xbar") + subbank_w_xbar.suggestName(s"smem_b${bid}_w${wid}_w_xbar") guard_monitors { implicit p => - r := subbank_r_xbar - w := subbank_w_xbar - uniform_r_nodes(bid)(wid).foreach( subbank_r_xbar := _ ) - uniform_w_nodes(bid)(wid).foreach( subbank_w_xbar := _ ) + r := subbank_r_xbar.node + w := subbank_w_xbar.node + uniform_r_nodes(bid)(wid).foreach( subbank_r_xbar.node := _ ) + uniform_w_nodes(bid)(wid).foreach( subbank_w_xbar.node := _ ) - nonuniform_r_nodes.foreach( subbank_r_xbar := _ ) - nonuniform_w_nodes.foreach( subbank_w_xbar := _ ) + nonuniform_r_nodes.foreach( subbank_r_xbar.node := _ ) + nonuniform_w_nodes.foreach( subbank_w_xbar.node := _ ) } } }