From 9e7fcc0f4e36fa64cfad35fa6c4b81466b6bc0dd Mon Sep 17 00:00:00 2001 From: abejgonzalez Date: Thu, 30 Nov 2023 10:12:52 -0800 Subject: [PATCH 1/4] Add HasHarnessInstantiators into MultiHarnessBinder --- .../main/scala/harness/MultiHarnessBinders.scala | 16 ++++++++-------- .../src/main/scala/harness/package.scala | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/generators/chipyard/src/main/scala/harness/MultiHarnessBinders.scala b/generators/chipyard/src/main/scala/harness/MultiHarnessBinders.scala index 1200208c9d..c4e96a3e6c 100644 --- a/generators/chipyard/src/main/scala/harness/MultiHarnessBinders.scala +++ b/generators/chipyard/src/main/scala/harness/MultiHarnessBinders.scala @@ -24,18 +24,18 @@ object ApplyMultiHarnessBinders { Seq.tabulate(chips.size, chips.size) { case (i, j) => if (i != j) { (chips(i), chips(j)) match { case (l0: HasChipyardPorts, l1: HasChipyardPorts) => p(MultiHarnessBinders(i, j)).foreach { f => - f(l0.ports, l1.ports) + f(th, l0.ports, l1.ports) } } }} } } -class MultiHarnessBinder[T <: Port[_]]( +class MultiHarnessBinder[T <: Port[_], S <: HasHarnessInstantiators]( chip0: Int, chip1: Int, chip0portFn: T => Boolean, chip1portFn: T => Boolean, - connectFn: (T, T) => Unit -)(implicit tag: ClassTag[T]) extends Config((site, here, up) => { + connectFn: (S, T, T) => Unit +)(implicit tag0: ClassTag[T], tag1: ClassTag[S]) extends Config((site, here, up) => { // Override any HarnessBinders for chip0/chip1 case MultiChipParameters(`chip0`) => new Config( new HarnessBinder({case (th, port: T) if chip0portFn(port) => }) ++ up(MultiChipParameters(chip0)) @@ -45,21 +45,21 @@ class MultiHarnessBinder[T <: Port[_]]( ) // Set the multiharnessbinder key case MultiHarnessBinders(`chip0`, `chip1`) => up(MultiHarnessBinders(chip0, chip1)) :+ { - ((chip0Ports: Seq[Port[_]], chip1Ports: Seq[Port[_]]) => { + ((th: S, chip0Ports: Seq[Port[_]], chip1Ports: Seq[Port[_]]) => { val chip0Port: Seq[T] = chip0Ports.collect { case (p: T) if chip0portFn(p) => p } val chip1Port: Seq[T] = chip1Ports.collect { case (p: T) if chip1portFn(p) => p } require(chip0Port.size == 1 && chip1Port.size == 1) - connectFn(chip0Port(0), chip1Port(0)) + connectFn(th, chip0Port(0), chip1Port(0)) }) } }) -class WithMultiChipSerialTL(chip0: Int, chip1: Int, chip0portId: Int = 0, chip1portId: Int = 0) extends MultiHarnessBinder[SerialTLPort]( +class WithMultiChipSerialTL(chip0: Int, chip1: Int, chip0portId: Int = 0, chip1portId: Int = 0) extends MultiHarnessBinder( chip0, chip1, (p0: SerialTLPort) => p0.portId == chip0portId, (p1: SerialTLPort) => p1.portId == chip1portId, - (p0: SerialTLPort, p1: SerialTLPort) => { + (th: HasHarnessInstantiators, p0: SerialTLPort, p1: SerialTLPort) => { (DataMirror.directionOf(p0.io.clock), DataMirror.directionOf(p1.io.clock)) match { case (Direction.Input, Direction.Output) => p0.io.clock := p1.io.clock case (Direction.Output, Direction.Input) => p1.io.clock := p0.io.clock diff --git a/generators/chipyard/src/main/scala/harness/package.scala b/generators/chipyard/src/main/scala/harness/package.scala index 258655a7cc..7586e8c668 100644 --- a/generators/chipyard/src/main/scala/harness/package.scala +++ b/generators/chipyard/src/main/scala/harness/package.scala @@ -7,5 +7,5 @@ package object harness { import chipyard.iobinders.Port type HarnessBinderFunction = PartialFunction[(HasHarnessInstantiators, Port[_]), Unit] - type MultiHarnessBinderFunction = (Seq[Port[_]], Seq[Port[_]]) => Unit + type MultiHarnessBinderFunction = (HasHarnessInstantiator, Seq[Port[_]], Seq[Port[_]]) => Unit } From 53b33d56d4ee6240b63bc94c760b17cc2e5cf5ad Mon Sep 17 00:00:00 2001 From: Abraham Gonzalez Date: Thu, 30 Nov 2023 10:32:12 -0800 Subject: [PATCH 2/4] Update generators/chipyard/src/main/scala/harness/package.scala --- generators/chipyard/src/main/scala/harness/package.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/generators/chipyard/src/main/scala/harness/package.scala b/generators/chipyard/src/main/scala/harness/package.scala index 7586e8c668..d0366c5518 100644 --- a/generators/chipyard/src/main/scala/harness/package.scala +++ b/generators/chipyard/src/main/scala/harness/package.scala @@ -7,5 +7,5 @@ package object harness { import chipyard.iobinders.Port type HarnessBinderFunction = PartialFunction[(HasHarnessInstantiators, Port[_]), Unit] - type MultiHarnessBinderFunction = (HasHarnessInstantiator, Seq[Port[_]], Seq[Port[_]]) => Unit + type MultiHarnessBinderFunction = (HasHarnessInstantiators, Seq[Port[_]], Seq[Port[_]]) => Unit } From ab1b77f3a44e74f76265021a76d3738f0dfc4583 Mon Sep 17 00:00:00 2001 From: Abraham Gonzalez Date: Thu, 30 Nov 2023 10:33:26 -0800 Subject: [PATCH 3/4] Update generators/chipyard/src/main/scala/harness/MultiHarnessBinders.scala --- .../chipyard/src/main/scala/harness/MultiHarnessBinders.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/generators/chipyard/src/main/scala/harness/MultiHarnessBinders.scala b/generators/chipyard/src/main/scala/harness/MultiHarnessBinders.scala index c4e96a3e6c..f60ec4187c 100644 --- a/generators/chipyard/src/main/scala/harness/MultiHarnessBinders.scala +++ b/generators/chipyard/src/main/scala/harness/MultiHarnessBinders.scala @@ -38,7 +38,7 @@ class MultiHarnessBinder[T <: Port[_], S <: HasHarnessInstantiators]( )(implicit tag0: ClassTag[T], tag1: ClassTag[S]) extends Config((site, here, up) => { // Override any HarnessBinders for chip0/chip1 case MultiChipParameters(`chip0`) => new Config( - new HarnessBinder({case (th, port: T) if chip0portFn(port) => }) ++ up(MultiChipParameters(chip0)) + new HarnessBinder({case (th: S, port: T) if chip0portFn(port) => }) ++ up(MultiChipParameters(chip0)) ) case MultiChipParameters(`chip1`) => new Config( new HarnessBinder({case (th, port: T) if chip1portFn(port) => }) ++ up(MultiChipParameters(chip1)) From ebf0c7452700fb4fa232dfe7e5677e95aa8b5476 Mon Sep 17 00:00:00 2001 From: Abraham Gonzalez Date: Thu, 30 Nov 2023 10:33:44 -0800 Subject: [PATCH 4/4] Update generators/chipyard/src/main/scala/harness/MultiHarnessBinders.scala --- .../chipyard/src/main/scala/harness/MultiHarnessBinders.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/generators/chipyard/src/main/scala/harness/MultiHarnessBinders.scala b/generators/chipyard/src/main/scala/harness/MultiHarnessBinders.scala index f60ec4187c..d3371dfdf6 100644 --- a/generators/chipyard/src/main/scala/harness/MultiHarnessBinders.scala +++ b/generators/chipyard/src/main/scala/harness/MultiHarnessBinders.scala @@ -41,7 +41,7 @@ class MultiHarnessBinder[T <: Port[_], S <: HasHarnessInstantiators]( new HarnessBinder({case (th: S, port: T) if chip0portFn(port) => }) ++ up(MultiChipParameters(chip0)) ) case MultiChipParameters(`chip1`) => new Config( - new HarnessBinder({case (th, port: T) if chip1portFn(port) => }) ++ up(MultiChipParameters(chip1)) + new HarnessBinder({case (th: S, port: T) if chip1portFn(port) => }) ++ up(MultiChipParameters(chip1)) ) // Set the multiharnessbinder key case MultiHarnessBinders(`chip0`, `chip1`) => up(MultiHarnessBinders(chip0, chip1)) :+ {