diff --git a/src/main/scala/diplomacy/Nodes.scala b/src/main/scala/diplomacy/Nodes.scala index e160e3b1..834022dd 100644 --- a/src/main/scala/diplomacy/Nodes.scala +++ b/src/main/scala/diplomacy/Nodes.scala @@ -271,6 +271,23 @@ abstract class MixedNode[DI, UI, EI, BI <: Data, DO, UO, EO, BO <: Data]( protected[diplomacy] def inputs = iPorts.map(_._2) zip edgesIn .map(e => inner.labelI(e)) } +abstract class MixedCustomNode[DI, UI, EI, BI <: Data, DO, UO, EO, BO <: Data]( + inner: InwardNodeImp [DI, UI, EI, BI], + outer: OutwardNodeImp[DO, UO, EO, BO])( + numPO: Range.Inclusive, + numPI: Range.Inclusive) + extends MixedNode(inner, outer)(numPO, numPI) +{ + def resolveStar(iKnown: Int, oKnown: Int, iStars: Int, oStars: Int): (Int, Int) + def mapParamsD(n: Int, p: Seq[DI]): Seq[DO] + def mapParamsU(n: Int, p: Seq[UO]): Seq[UI] +} + +abstract class CustomNode[D, U, EO, EI, B <: Data](imp: NodeImp[D, U, EO, EI, B])( + numPO: Range.Inclusive, + numPI: Range.Inclusive) + extends MixedCustomNode(imp, imp)(numPO, numPI) + class MixedAdapterNode[DI, UI, EI, BI <: Data, DO, UO, EO, BO <: Data]( inner: InwardNodeImp [DI, UI, EI, BI], outer: OutwardNodeImp[DO, UO, EO, BO])( diff --git a/src/main/scala/uncore/tilelink2/Nodes.scala b/src/main/scala/uncore/tilelink2/Nodes.scala index 3857812c..5f23e2e6 100644 --- a/src/main/scala/uncore/tilelink2/Nodes.scala +++ b/src/main/scala/uncore/tilelink2/Nodes.scala @@ -99,6 +99,11 @@ case class TLSplitterNode( numManagerPorts: Range.Inclusive = 0 to 999) extends SplitterNode(TLImp)(clientFn, managerFn, numClientPorts, numManagerPorts) +abstract class TLCustomNode( + numClientPorts: Range.Inclusive, + numManagerPorts: Range.Inclusive) + extends CustomNode(TLImp)(numClientPorts, numManagerPorts) + // Nodes passed from an inner module case class TLOutputNode() extends OutputNode(TLImp) case class TLInputNode() extends InputNode(TLImp)