better xbar naming in smem system

This commit is contained in:
Richard Yan
2024-04-17 18:09:30 -07:00
parent 824cae7c50
commit ad504a5607

View File

@@ -96,10 +96,14 @@ class RadianceCluster (
guard_monitors { implicit p => t := from } guard_monitors { implicit p => t := from }
t 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 = { def connect_xbar(from: TLNode): TLNode = {
val t = TLXbar() connect_xbar_name(from, None)
guard_monitors { implicit p => t := from }
t
} }
val radiance_smem_fanout = radianceTiles.zipWithIndex.flatMap { case (tile, cid) => 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)(filter_nodes.map(_.map(_._2).map(connect_xbar)))
val f_unaligned = Seq.fill(2) { val f_unaligned = Seq.fill(2) {
val serialized_node = TLEphemeralNode() val serialized_node = TLEphemeralNode()
val serialized_in_xbar = TLXbar() val serialized_in_xbar = LazyModule(new TLXbar())
val serialized_out_xbar = 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 => guard_monitors { implicit p =>
filter_nodes.foreach(_.map(_._2).foreach(serialized_in_xbar := _)) filter_nodes.foreach(_.map(_._2).foreach(serialized_in_xbar.node := _))
serialized_node := serialized_in_xbar serialized_node := serialized_in_xbar.node
serialized_out_xbar := serialized_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) } (wb zip spad_sp_write_nodes).map { case (ww, sw) => Seq(ww, sw) }
} }
// these nodes are random access // these nodes are random access
val nonuniform_r_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) 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) (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) => smem_bank_mgrs.grouped(smem_subbanks).zipWithIndex.foreach { case (bank_mgrs, bid) =>
bank_mgrs.zipWithIndex.foreach { case (Seq(r, w), wid) => bank_mgrs.zipWithIndex.foreach { case (Seq(r, w), wid) =>
// TODO: this should be a coordinated round robin // TODO: this should be a coordinated round robin
val subbank_r_xbar = TLXbar(TLArbiter.lowestIndexFirst) val subbank_r_xbar = LazyModule(new TLXbar(TLArbiter.lowestIndexFirst))
val subbank_w_xbar = 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 => guard_monitors { implicit p =>
r := subbank_r_xbar r := subbank_r_xbar.node
w := subbank_w_xbar w := subbank_w_xbar.node
uniform_r_nodes(bid)(wid).foreach( subbank_r_xbar := _ ) uniform_r_nodes(bid)(wid).foreach( subbank_r_xbar.node := _ )
uniform_w_nodes(bid)(wid).foreach( subbank_w_xbar := _ ) uniform_w_nodes(bid)(wid).foreach( subbank_w_xbar.node := _ )
nonuniform_r_nodes.foreach( subbank_r_xbar := _ ) nonuniform_r_nodes.foreach( subbank_r_xbar.node := _ )
nonuniform_w_nodes.foreach( subbank_w_xbar := _ ) nonuniform_w_nodes.foreach( subbank_w_xbar.node := _ )
} }
} }
} }