diff --git a/src/main/scala/ee/hrzn/chryse/platform/ice40/IceBreakerPlatform.scala b/src/main/scala/ee/hrzn/chryse/platform/ice40/IceBreakerPlatform.scala index 471c10e..f35a478 100644 --- a/src/main/scala/ee/hrzn/chryse/platform/ice40/IceBreakerPlatform.scala +++ b/src/main/scala/ee/hrzn/chryse/platform/ice40/IceBreakerPlatform.scala @@ -46,22 +46,26 @@ class IceBreakerResources extends BoardResources { 9 -> 46, 10 -> 44, ) - - val pmod1b1 = resource.InOut().onPin(43) - val pmod1b2 = resource.InOut().onPin(38) - val pmod1b3 = resource.InOut().onPin(34) - val pmod1b4 = resource.InOut().onPin(31) - val pmod1b7 = resource.InOut().onPin(42) - val pmod1b8 = resource.InOut().onPin(36) - val pmod1b9 = resource.InOut().onPin(32) - val pmod1b10 = resource.InOut().onPin(28) - - val pmod2_1 = resource.InOut().onPin(27) - val pmod2_2 = resource.InOut().onPin(25) - val pmod2_3 = resource.InOut().onPin(21) - val pmod2_4 = resource.InOut().onPin(19) - val pmod2_7 = resource.InOut().onPin(26) - val pmod2_8 = resource.InOut().onPin(23) - val pmod2_9 = resource.InOut().onPin(20) - val pmod2_10 = resource.InOut().onPin(18) + val pmod1b = resource.Connector( + resource.InOut(), + 1 -> 43, + 2 -> 38, + 3 -> 34, + 4 -> 31, + 7 -> 42, + 8 -> 36, + 9 -> 32, + 10 -> 28, + ) + val pmod2 = resource.Connector( + resource.InOut(), + 1 -> 27, + 2 -> 25, + 3 -> 21, + 4 -> 19, + 7 -> 26, + 8 -> 23, + 9 -> 20, + 10 -> 18, + ) } diff --git a/src/main/scala/ee/hrzn/chryse/platform/resource/Connector.scala b/src/main/scala/ee/hrzn/chryse/platform/resource/Connector.scala index f6ffd61..6503402 100644 --- a/src/main/scala/ee/hrzn/chryse/platform/resource/Connector.scala +++ b/src/main/scala/ee/hrzn/chryse/platform/resource/Connector.scala @@ -2,17 +2,17 @@ package ee.hrzn.chryse.platform.resource import chisel3._ -class Connector[E <: SinglePinResource]( +class Connector[Ix, E <: SinglePinResource]( gen: => E, - private val ixToPin: (Int, Pin)*, + private val ixToPin: (Ix, Pin)*, ) extends Resource { - private val mappings: Map[Int, E] = ixToPin + private val mappings: Map[Ix, E] = ixToPin .map { case (i, p) => i -> gen.onPin(p) } .to(Map) - def apply(ix: Int): E = mappings(ix) + def apply(ix: Ix): E = mappings(ix) def setName(name: String): Unit = mappings.foreach { case (i, e) => e.setName(s"$name$i") } @@ -21,6 +21,6 @@ class Connector[E <: SinglePinResource]( } object Connector { - def apply[E <: SinglePinResource](gen: => E, ixToPin: (Int, Pin)*) = + def apply[Ix, E <: SinglePinResource](gen: => E, ixToPin: (Ix, Pin)*) = new Connector(gen, ixToPin: _*) } diff --git a/src/test/scala/ee/hrzn/chryse/platform/BoardResourcesSpec.scala b/src/test/scala/ee/hrzn/chryse/platform/BoardResourcesSpec.scala index 869f8d8..bf8fa3f 100644 --- a/src/test/scala/ee/hrzn/chryse/platform/BoardResourcesSpec.scala +++ b/src/test/scala/ee/hrzn/chryse/platform/BoardResourcesSpec.scala @@ -134,6 +134,6 @@ class InOutTop(platform: Platform) extends Module { plat.resources.uart.tx := plat.resources.pmod1a(2).i // Do the same with 1b1 and 1b2, but use inverted inputs/outputs. - plat.resources.pmod1b1.o := plat.resources.ubtn - plat.resources.ledr := plat.resources.pmod1b2.i + plat.resources.pmod1b(1).o := plat.resources.ubtn + plat.resources.ledr := plat.resources.pmod1b(2).i }