diff --git a/src/main/scala/diplomacy/Nodes.scala b/src/main/scala/diplomacy/Nodes.scala index 6a218cc5..949921b9 100644 --- a/src/main/scala/diplomacy/Nodes.scala +++ b/src/main/scala/diplomacy/Nodes.scala @@ -161,8 +161,12 @@ class MixedNode[DI, UI, EI, BI <: Data, DO, UO, EO, BO <: Data]( lazy val edgesOut = (oPorts zip oParams).map { case ((i, n), o) => outer.edgeO(o, n.iParams(i)) } lazy val edgesIn = (iPorts zip iParams).map { case ((o, n), i) => inner.edgeI(n.oParams(o), i) } - lazy val bundleOut = outer.bundleO(edgesOut) - lazy val bundleIn = inner.bundleI(edgesIn) + val flip = false // needed for blind nodes + private def flipO(b: Vec[BO]) = if (flip) b.flip else b + private def flipI(b: Vec[BI]) = if (flip) b else b.flip + + lazy val bundleOut = flipO(outer.bundleO(edgesOut)) + lazy val bundleIn = flipI(inner.bundleI(edgesIn)) // connects the outward part of a node with the inward part of this node override def := (h: OutwardNodeHandle[DI, UI, BI])(implicit sourceInfo: SourceInfo): Option[LazyModule] = { diff --git a/src/main/scala/uncore/axi4/Nodes.scala b/src/main/scala/uncore/axi4/Nodes.scala index 0613a70b..3417e8f0 100644 --- a/src/main/scala/uncore/axi4/Nodes.scala +++ b/src/main/scala/uncore/axi4/Nodes.scala @@ -16,7 +16,7 @@ object AXI4Imp extends NodeImp[AXI4MasterPortParameters, AXI4SlavePortParameters } def bundleI(ei: Seq[AXI4EdgeParameters]): Vec[AXI4Bundle] = { require (!ei.isEmpty) - Vec(ei.size, AXI4Bundle(ei.map(_.bundle).reduce(_.union(_)))).flip + Vec(ei.size, AXI4Bundle(ei.map(_.bundle).reduce(_.union(_)))) } def colour = "#00ccff" // bluish diff --git a/src/main/scala/uncore/tilelink2/IntNodes.scala b/src/main/scala/uncore/tilelink2/IntNodes.scala index 639d03ed..79fd4990 100644 --- a/src/main/scala/uncore/tilelink2/IntNodes.scala +++ b/src/main/scala/uncore/tilelink2/IntNodes.scala @@ -58,7 +58,7 @@ object IntImp extends NodeImp[IntSourcePortParameters, IntSinkPortParameters, In } def bundleI(ei: Seq[IntEdge]): Vec[Vec[Bool]] = { require (!ei.isEmpty) - Vec(ei.size, Vec(ei.map(_.source.num).max, Bool())).flip + Vec(ei.size, Vec(ei.map(_.source.num).max, Bool())) } def colour = "#0000ff" // blue diff --git a/src/main/scala/uncore/tilelink2/Nodes.scala b/src/main/scala/uncore/tilelink2/Nodes.scala index 24668401..b395461b 100644 --- a/src/main/scala/uncore/tilelink2/Nodes.scala +++ b/src/main/scala/uncore/tilelink2/Nodes.scala @@ -17,7 +17,7 @@ object TLImp extends NodeImp[TLClientPortParameters, TLManagerPortParameters, TL } def bundleI(ei: Seq[TLEdgeIn]): Vec[TLBundle] = { require (!ei.isEmpty) - Vec(ei.size, TLBundle(ei.map(_.bundle).reduce(_.union(_)))).flip + Vec(ei.size, TLBundle(ei.map(_.bundle).reduce(_.union(_)))) } var emitMonitors = true @@ -149,7 +149,7 @@ object TLAsyncImp extends NodeImp[TLAsyncClientPortParameters, TLAsyncManagerPor } def bundleI(ei: Seq[TLAsyncEdgeParameters]): Vec[TLAsyncBundle] = { require (ei.size == 1) - Vec(ei.size, new TLAsyncBundle(ei(0).bundle)).flip + Vec(ei.size, new TLAsyncBundle(ei(0).bundle)) } def colour = "#ff0000" // red