better xbar naming in smem system
This commit is contained in:
@@ -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 := _ )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user