diff --git a/src/main/scala/diplomacy/LazyModule.scala b/src/main/scala/diplomacy/LazyModule.scala index 49768120..c271fa60 100644 --- a/src/main/scala/diplomacy/LazyModule.scala +++ b/src/main/scala/diplomacy/LazyModule.scala @@ -97,9 +97,19 @@ abstract class LazyModule()(implicit val p: Parameters) nodes.filter(!_.omitGraphML) foreach { n => n.outputs.filter(!_._1.omitGraphML).foreach { case (o, l) => buf ++= pad buf ++= """" - buf ++= s"""""" + if (o.reverse) { + buf ++= s""" target=\"${index}::${n.index}\"""" + buf ++= s""" source=\"${o.lazyModule.index}::${o.index}\">""" + } else { + buf ++= s""" source=\"${index}::${n.index}\"""" + buf ++= s""" target=\"${o.lazyModule.index}::${o.index}\">""" + } + buf ++= s"""""" + if (o.reverse) { + buf ++= s"""""" + } else { + buf ++= s"""""" + } buf ++= s"""""" buf ++= s"""${l}""" buf ++= s"""\n""" diff --git a/src/main/scala/diplomacy/Nodes.scala b/src/main/scala/diplomacy/Nodes.scala index 1fdc0b9a..43db07b7 100644 --- a/src/main/scala/diplomacy/Nodes.scala +++ b/src/main/scala/diplomacy/Nodes.scala @@ -17,6 +17,7 @@ trait InwardNodeImp[DI, UI, EI, BI <: Data] def edgeI(pd: DI, pu: UI): EI def bundleI(ei: EI): BI def colour: String + def reverse: Boolean = false def connect(bindings: () => Seq[(EI, BI, BI)])(implicit p: Parameters, sourceInfo: SourceInfo): (Option[LazyModule], () => Unit) = { (None, () => bindings().foreach { case (_, i, o) => i <> o }) } @@ -67,6 +68,7 @@ abstract class BaseNode protected[diplomacy] def outputs: Seq[(BaseNode, String)] protected[diplomacy] def inputs: Seq[(BaseNode, String)] protected[diplomacy] def colour: String + protected[diplomacy] def reverse: Boolean } case class NodeHandle[DI, UI, BI <: Data, DO, UO, BO <: Data] @@ -261,6 +263,7 @@ abstract class MixedNode[DI, UI, EI, BI <: Data, DO, UO, EO, BO <: Data]( // meta-data for printing the node graph protected[diplomacy] def colour = inner.colour + protected[diplomacy] def reverse = inner.reverse protected[diplomacy] def outputs = oPorts.map(_._2) zip edgesOut.map(e => outer.labelO(e)) protected[diplomacy] def inputs = iPorts.map(_._2) zip edgesIn .map(e => inner.labelI(e)) } diff --git a/src/main/scala/uncore/tilelink2/IntNodes.scala b/src/main/scala/uncore/tilelink2/IntNodes.scala index 77aa2e3b..6459f341 100644 --- a/src/main/scala/uncore/tilelink2/IntNodes.scala +++ b/src/main/scala/uncore/tilelink2/IntNodes.scala @@ -70,6 +70,7 @@ object IntImp extends NodeImp[IntSourcePortParameters, IntSinkPortParameters, In def bundleI(ei: IntEdge): Vec[Bool] = Vec(ei.source.num, Bool()) def colour = "#0000ff" // blue + override def reverse = true override def labelI(ei: IntEdge) = ei.source.sources.map(_.range.size).sum.toString override def labelO(eo: IntEdge) = eo.source.sources.map(_.range.size).sum.toString