From 5994714970c7c0ee5687e6c4c6701b5ad4372bd7 Mon Sep 17 00:00:00 2001 From: "Wesley W. Terpstra" Date: Thu, 1 Jun 2017 15:16:01 -0700 Subject: [PATCH] diplomacy: move manager unification to meta-data only Now that PMA circuits already perform address unification, there is no QoR gained by throwing away the true and complete diplomatic address+node information. Defer the unification to pretty printing the DTS address map only. --- src/main/scala/coreplex/CoreplexNetwork.scala | 6 ++++-- src/main/scala/uncore/tilelink2/Xbar.scala | 4 ++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/scala/coreplex/CoreplexNetwork.scala b/src/main/scala/coreplex/CoreplexNetwork.scala index 1da55214..e14858ae 100644 --- a/src/main/scala/coreplex/CoreplexNetwork.scala +++ b/src/main/scala/coreplex/CoreplexNetwork.scala @@ -82,8 +82,10 @@ trait CoreplexNetwork extends HasCoreplexParameters { } } + // Make topManagers an Option[] so as to avoid LM name reflection evaluating it... + lazy val topManagers = Some(ManagerUnification(l1tol2.node.edgesIn.headOption.map(_.manager.managers).getOrElse(Nil))) ResourceBinding { - val managers = l1tol2.node.edgesIn.headOption.map(_.manager.managers).getOrElse(Nil) + val managers = topManagers.get val max = managers.flatMap(_.address).map(_.max).max val width = ResourceInt((log2Ceil(max)+31) / 32) Resource(root, "width").bind(width) @@ -113,7 +115,7 @@ trait CoreplexNetworkModule extends HasCoreplexParameters { val io: CoreplexNetworkBundle println("Generated Address Map") - val ranges = outer.l1tol2.node.edgesIn(0).manager.managers.flatMap { manager => + val ranges = outer.topManagers.get.flatMap { manager => val prot = (if (manager.supportsGet) "R" else "") + (if (manager.supportsPutFull) "W" else "") + (if (manager.executable) "X" else "") + diff --git a/src/main/scala/uncore/tilelink2/Xbar.scala b/src/main/scala/uncore/tilelink2/Xbar.scala index f59c6ba5..baa3a969 100644 --- a/src/main/scala/uncore/tilelink2/Xbar.scala +++ b/src/main/scala/uncore/tilelink2/Xbar.scala @@ -57,14 +57,14 @@ class TLXbar(policy: TLArbiter.Policy = TLArbiter.lowestIndexFirst)(implicit p: seq(0).copy( minLatency = seq.map(_.minLatency).min, endSinkId = outputIdRanges.map(_.map(_.end).getOrElse(0)).max, - managers = ManagerUnification(seq.flatMap { port => + managers = seq.flatMap { port => require (port.beatBytes == seq(0).beatBytes, s"Xbar data widths don't match: ${port.managers.map(_.name)} has ${port.beatBytes}B vs ${seq(0).managers.map(_.name)} has ${seq(0).beatBytes}B") val fifoIdMapper = fifoIdFactory() port.managers map { manager => manager.copy( fifoId = manager.fifoId.map(fifoIdMapper(_)) )} - }) + } ) })