diff --git a/src/main/scala/diplomacy/LazyModule.scala b/src/main/scala/diplomacy/LazyModule.scala index a8e2c10b..5de4877c 100644 --- a/src/main/scala/diplomacy/LazyModule.scala +++ b/src/main/scala/diplomacy/LazyModule.scala @@ -62,7 +62,7 @@ abstract class LazyModule private def nodesGraphML(buf: StringBuilder, pad: String) { buf ++= s"""${pad}\n""" - buf ++= s"""${pad} ${module.name}\n""" + buf ++= s"""${pad} ${module.instanceName}\n""" buf ++= s"""${pad} \n""" nodes.filter(!_.omitGraphML).foreach { n => buf ++= s"""${pad} \n""" @@ -72,11 +72,15 @@ abstract class LazyModule buf ++= s"""${pad}\n""" } private def edgesGraphML(buf: StringBuilder, pad: String) { - nodes.filter(!_.omitGraphML) foreach { n => n.outputs.filter(!_.omitGraphML).foreach { o => + nodes.filter(!_.omitGraphML) foreach { n => n.outputs.filter(!_._1.omitGraphML).foreach { case (o, l) => buf ++= pad buf ++= "\n""" + buf ++= s""" target=\"${o.lazyModule.index}::${o.index}\">""" + buf ++= s"""""" + buf ++= s"""""" + buf ++= s"""${l}""" + buf ++= s"""\n""" } } children.filter(!_.omitGraphML).foreach { c => c.edgesGraphML(buf, pad) } } diff --git a/src/main/scala/diplomacy/Nodes.scala b/src/main/scala/diplomacy/Nodes.scala index 633ece07..88880a9f 100644 --- a/src/main/scala/diplomacy/Nodes.scala +++ b/src/main/scala/diplomacy/Nodes.scala @@ -20,6 +20,7 @@ trait InwardNodeImp[DI, UI, EI, BI <: Data] // optional methods to track node graph def mixI(pu: UI, node: InwardNode[DI, UI, BI]): UI = pu // insert node into parameters def getO(pu: UI): Option[BaseNode] = None // most-outward common node + def labelI(ei: EI) = "" } // DO = Downwards flowing Parameters generated by the outer side of the node @@ -34,6 +35,7 @@ trait OutwardNodeImp[DO, UO, EO, BO <: Data] // optional methods to track node graph def mixO(pd: DO, node: OutwardNode[DO, UO, BO]): DO = pd // insert node into parameters def getI(pd: DO): Option[BaseNode] = None // most-inward common node + def labelO(eo: EO) = "" } abstract class NodeImp[D, U, EO, EI, B <: Data] @@ -54,8 +56,8 @@ abstract class BaseNode protected[diplomacy] def gci: Option[BaseNode] // greatest common inner protected[diplomacy] def gco: Option[BaseNode] // greatest common outer - protected[diplomacy] def outputs: Seq[BaseNode] - protected[diplomacy] def inputs: Seq[BaseNode] + protected[diplomacy] def outputs: Seq[(BaseNode, String)] + protected[diplomacy] def inputs: Seq[(BaseNode, String)] protected[diplomacy] def colour: String } @@ -140,8 +142,8 @@ 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 outputs = oPorts.map(_._2) - protected[diplomacy] def inputs = iPorts.map(_._2) + 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)) private def reqE(o: Int, i: Int) = require(i == o, s"${name} has ${i} inputs and ${o} outputs; they must match${lazyModule.line}") protected[diplomacy] lazy val oParams: Seq[DO] = { diff --git a/src/main/scala/groundtest/Generator.scala b/src/main/scala/groundtest/Generator.scala index f5c6bb27..62a1f38c 100644 --- a/src/main/scala/groundtest/Generator.scala +++ b/src/main/scala/groundtest/Generator.scala @@ -5,6 +5,7 @@ package groundtest object Generator extends util.GeneratorApp { val longName = names.topModuleProject + "." + names.configs generateFirrtl + generateGraphML generateTestSuiteMakefrags // TODO: Needed only for legacy make targets generateParameterDump // TODO: Needed only for legacy make targets } diff --git a/src/main/scala/uncore/axi4/Nodes.scala b/src/main/scala/uncore/axi4/Nodes.scala index 2c728e06..b8fb1efd 100644 --- a/src/main/scala/uncore/axi4/Nodes.scala +++ b/src/main/scala/uncore/axi4/Nodes.scala @@ -20,6 +20,9 @@ object AXI4Imp extends NodeImp[AXI4MasterPortParameters, AXI4SlavePortParameters } def colour = "#00ccff" // bluish + override def labelI(ei: AXI4EdgeParameters) = (ei.slave.beatBytes * 8).toString + override def labelO(eo: AXI4EdgeParameters) = (eo.slave.beatBytes * 8).toString + def connect(bo: => AXI4Bundle, bi: => AXI4Bundle, ei: => AXI4EdgeParameters)(implicit sourceInfo: SourceInfo): (Option[LazyModule], () => Unit) = { (None, () => { bi <> bo }) } diff --git a/src/main/scala/uncore/tilelink2/IntNodes.scala b/src/main/scala/uncore/tilelink2/IntNodes.scala index 79fd4990..0c6474e9 100644 --- a/src/main/scala/uncore/tilelink2/IntNodes.scala +++ b/src/main/scala/uncore/tilelink2/IntNodes.scala @@ -62,6 +62,9 @@ object IntImp extends NodeImp[IntSourcePortParameters, IntSinkPortParameters, In } def colour = "#0000ff" // blue + 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 + def connect(bo: => Vec[Bool], bi: => Vec[Bool], ei: => IntEdge)(implicit sourceInfo: SourceInfo): (Option[LazyModule], () => Unit) = { (None, () => { // Cannot use bulk connect, because the widths could differ diff --git a/src/main/scala/uncore/tilelink2/Nodes.scala b/src/main/scala/uncore/tilelink2/Nodes.scala index 0941dc04..962517ba 100644 --- a/src/main/scala/uncore/tilelink2/Nodes.scala +++ b/src/main/scala/uncore/tilelink2/Nodes.scala @@ -25,6 +25,9 @@ object TLImp extends NodeImp[TLClientPortParameters, TLManagerPortParameters, TL var combinationalCheck = false def colour = "#000000" // black + override def labelI(ei: TLEdgeIn) = (ei.manager.beatBytes * 8).toString + override def labelO(eo: TLEdgeOut) = (eo.manager.beatBytes * 8).toString + def connect(bo: => TLBundle, bi: => TLBundle, ei: => TLEdgeIn)(implicit sourceInfo: SourceInfo): (Option[LazyModule], () => Unit) = { val monitor = if (emitMonitors) { Some(LazyModule(new TLMonitor(() => new TLBundleSnoop(bo.params), () => ei, sourceInfo))) @@ -159,6 +162,9 @@ object TLAsyncImp extends NodeImp[TLAsyncClientPortParameters, TLAsyncManagerPor } def colour = "#ff0000" // red + override def labelI(ei: TLAsyncEdgeParameters) = ei.manager.depth.toString + override def labelO(eo: TLAsyncEdgeParameters) = eo.manager.depth.toString + def connect(bo: => TLAsyncBundle, bi: => TLAsyncBundle, ei: => TLAsyncEdgeParameters)(implicit sourceInfo: SourceInfo): (Option[LazyModule], () => Unit) = { (None, () => { bi <> bo }) } diff --git a/src/main/scala/unittest/Generator.scala b/src/main/scala/unittest/Generator.scala index 95e114d1..36d64779 100644 --- a/src/main/scala/unittest/Generator.scala +++ b/src/main/scala/unittest/Generator.scala @@ -5,6 +5,7 @@ package unittest object Generator extends util.GeneratorApp { val longName = names.topModuleProject + "." + names.configs generateFirrtl + generateGraphML generateTestSuiteMakefrags // TODO: Needed only for legacy make targets generateParameterDump // TODO: Needed only for legacy make targets }