From acadb6ae92528ea87e193baf70786e2f7190ccd5 Mon Sep 17 00:00:00 2001 From: Asherah Connor Date: Wed, 22 May 2024 19:18:54 +0300 Subject: [PATCH] big-endian naming. --- src/main/scala/ee/hrzn/chryse/ChryseApp.scala | 6 +-- ...oardPlatform.scala => PlatformBoard.scala} | 5 +- ...ces.scala => PlatformBoardResources.scala} | 11 +++-- .../hrzn/chryse/platform/ecp5/ECP5Top.scala | 6 +-- .../platform/ecp5/OrangeCrabPlatform.scala | 11 +++-- .../hrzn/chryse/platform/ice40/ICE40Top.scala | 8 ++-- .../platform/ice40/IceBreakerPlatform.scala | 13 ++++-- .../chryse/platform/resource/Button.scala | 2 +- .../platform/resource/ClockSource.scala | 2 +- .../chryse/platform/resource/Connector.scala | 8 ++-- .../hrzn/chryse/platform/resource/InOut.scala | 8 ++-- .../hrzn/chryse/platform/resource/LED.scala | 2 +- .../{Base.scala => ResourceBase.scala} | 16 +++---- ...{DataResource.scala => ResourceData.scala} | 4 +- ...Resource.scala => ResourceSinglePin.scala} | 2 +- .../chryse/platform/resource/SPIFlash.scala | 46 +++++++++++++++++++ .../hrzn/chryse/platform/resource/UART.scala | 10 ++-- .../chryse/platform/resource/implicits.scala | 10 ++-- .../ee/hrzn/chryse/tasks/BuildTask.scala | 6 +-- ...scala => PlatformBoardResourcesSpec.scala} | 4 +- 20 files changed, 119 insertions(+), 61 deletions(-) rename src/main/scala/ee/hrzn/chryse/platform/{BoardPlatform.scala => PlatformBoard.scala} (61%) rename src/main/scala/ee/hrzn/chryse/platform/{BoardResources.scala => PlatformBoardResources.scala} (56%) rename src/main/scala/ee/hrzn/chryse/platform/resource/{Base.scala => ResourceBase.scala} (52%) rename src/main/scala/ee/hrzn/chryse/platform/resource/{DataResource.scala => ResourceData.scala} (88%) rename src/main/scala/ee/hrzn/chryse/platform/resource/{SinglePinResource.scala => ResourceSinglePin.scala} (61%) create mode 100644 src/main/scala/ee/hrzn/chryse/platform/resource/SPIFlash.scala rename src/test/scala/ee/hrzn/chryse/platform/{BoardResourcesSpec.scala => PlatformBoardResourcesSpec.scala} (97%) diff --git a/src/main/scala/ee/hrzn/chryse/ChryseApp.scala b/src/main/scala/ee/hrzn/chryse/ChryseApp.scala index 6a566a0..4f1e0ee 100644 --- a/src/main/scala/ee/hrzn/chryse/ChryseApp.scala +++ b/src/main/scala/ee/hrzn/chryse/ChryseApp.scala @@ -2,9 +2,9 @@ package ee.hrzn.chryse import chisel3._ import circt.stage.ChiselStage -import ee.hrzn.chryse.platform.BoardPlatform -import ee.hrzn.chryse.platform.BoardResources import ee.hrzn.chryse.platform.Platform +import ee.hrzn.chryse.platform.PlatformBoard +import ee.hrzn.chryse.platform.PlatformBoardResources import ee.hrzn.chryse.platform.cxxrtl.CXXRTLOptions import org.rogach.scallop._ @@ -13,7 +13,7 @@ import scala.collection.mutable abstract class ChryseApp { val name: String val genTop: Platform => Module - val targetPlatforms: Seq[BoardPlatform[_ <: BoardResources]] + val targetPlatforms: Seq[PlatformBoard[_ <: PlatformBoardResources]] val cxxrtlOptions: Option[CXXRTLOptions] = None def main(args: Array[String]): Unit = { diff --git a/src/main/scala/ee/hrzn/chryse/platform/BoardPlatform.scala b/src/main/scala/ee/hrzn/chryse/platform/PlatformBoard.scala similarity index 61% rename from src/main/scala/ee/hrzn/chryse/platform/BoardPlatform.scala rename to src/main/scala/ee/hrzn/chryse/platform/PlatformBoard.scala index fa1edc0..9f0bb09 100644 --- a/src/main/scala/ee/hrzn/chryse/platform/BoardPlatform.scala +++ b/src/main/scala/ee/hrzn/chryse/platform/PlatformBoard.scala @@ -2,7 +2,8 @@ package ee.hrzn.chryse.platform import chisel3._ -trait BoardPlatform[BR <: BoardResources] extends ElaboratablePlatform { +trait PlatformBoard[PBR <: PlatformBoardResources] + extends ElaboratablePlatform { val nextpnrBinary: String val nextpnrArgs: Seq[String] @@ -10,5 +11,5 @@ trait BoardPlatform[BR <: BoardResources] extends ElaboratablePlatform { val programBinary: String - val resources: BR + val resources: PBR } diff --git a/src/main/scala/ee/hrzn/chryse/platform/BoardResources.scala b/src/main/scala/ee/hrzn/chryse/platform/PlatformBoardResources.scala similarity index 56% rename from src/main/scala/ee/hrzn/chryse/platform/BoardResources.scala rename to src/main/scala/ee/hrzn/chryse/platform/PlatformBoardResources.scala index ed20100..125cdbb 100644 --- a/src/main/scala/ee/hrzn/chryse/platform/BoardResources.scala +++ b/src/main/scala/ee/hrzn/chryse/platform/PlatformBoardResources.scala @@ -1,17 +1,17 @@ package ee.hrzn.chryse.platform import chisel3._ -import ee.hrzn.chryse.platform.resource.DataResource -import ee.hrzn.chryse.platform.resource.Base +import ee.hrzn.chryse.platform.resource.ResourceBase +import ee.hrzn.chryse.platform.resource.ResourceData import scala.collection.mutable.ArrayBuffer -abstract class BoardResources { +abstract class PlatformBoardResources { private[chryse] def setNames() = for { f <- this.getClass().getDeclaredFields() } { f.setAccessible(true) f.get(this) match { - case res: Base => + case res: ResourceBase => res.setName(f.getName()) case _ => } @@ -19,5 +19,6 @@ abstract class BoardResources { val clock: resource.ClockSource - def all: Seq[DataResource[_ <: Data]] = Base.allFromBoardResources(this) + def all: Seq[ResourceData[_ <: Data]] = + ResourceBase.allFromBoardResources(this) } diff --git a/src/main/scala/ee/hrzn/chryse/platform/ecp5/ECP5Top.scala b/src/main/scala/ee/hrzn/chryse/platform/ecp5/ECP5Top.scala index dfdd55f..a493b25 100644 --- a/src/main/scala/ee/hrzn/chryse/platform/ecp5/ECP5Top.scala +++ b/src/main/scala/ee/hrzn/chryse/platform/ecp5/ECP5Top.scala @@ -2,9 +2,9 @@ package ee.hrzn.chryse.platform.ecp5 import chisel3._ import ee.hrzn.chryse.ChryseModule -import ee.hrzn.chryse.platform.BoardPlatform -import ee.hrzn.chryse.platform.BoardResources import ee.hrzn.chryse.platform.Platform +import ee.hrzn.chryse.platform.PlatformBoard +import ee.hrzn.chryse.platform.PlatformBoardResources class ECP5Top[Top <: Module](platform: Platform, genTop: => Top) extends ChryseModule { @@ -28,7 +28,7 @@ class ECP5Top[Top <: Module](platform: Platform, genTop: => Top) object ECP5Top { def apply[Top <: Module]( - platform: BoardPlatform[_ <: BoardResources], + platform: PlatformBoard[_ <: PlatformBoardResources], genTop: => Top, ) = new ECP5Top(platform, genTop) diff --git a/src/main/scala/ee/hrzn/chryse/platform/ecp5/OrangeCrabPlatform.scala b/src/main/scala/ee/hrzn/chryse/platform/ecp5/OrangeCrabPlatform.scala index e8f9fd6..732abf9 100644 --- a/src/main/scala/ee/hrzn/chryse/platform/ecp5/OrangeCrabPlatform.scala +++ b/src/main/scala/ee/hrzn/chryse/platform/ecp5/OrangeCrabPlatform.scala @@ -1,12 +1,13 @@ package ee.hrzn.chryse.platform.ecp5 import chisel3._ -import ee.hrzn.chryse.platform.BoardPlatform -import ee.hrzn.chryse.platform.BoardResources import ee.hrzn.chryse.platform.Platform +import ee.hrzn.chryse.platform.PlatformBoard +import ee.hrzn.chryse.platform.PlatformBoardResources import ee.hrzn.chryse.platform.resource -case object OrangeCrabPlatform extends BoardPlatform[ECP5Resources] { +case object OrangeCrabPlatform + extends PlatformBoard[OrangeCrabPlatformResources] { val id = "orangecrab" val clockHz = 48_000_000 @@ -16,12 +17,12 @@ case object OrangeCrabPlatform extends BoardPlatform[ECP5Resources] { val packBinary = "ecppack" val programBinary = "dfu-util" - val resources = new ECP5Resources + val resources = new OrangeCrabPlatformResources override def apply[Top <: Module](genTop: Platform => Top) = ECP5Top(this, genTop(this)) } -class ECP5Resources extends BoardResources { +class OrangeCrabPlatformResources extends PlatformBoardResources { val clock = resource.ClockSource(48_000_000).onPin("A9") } diff --git a/src/main/scala/ee/hrzn/chryse/platform/ice40/ICE40Top.scala b/src/main/scala/ee/hrzn/chryse/platform/ice40/ICE40Top.scala index 8e3d6ae..5b4efae 100644 --- a/src/main/scala/ee/hrzn/chryse/platform/ice40/ICE40Top.scala +++ b/src/main/scala/ee/hrzn/chryse/platform/ice40/ICE40Top.scala @@ -7,20 +7,22 @@ import chisel3.util._ import chisel3.util.experimental.forceName import ee.hrzn.chryse.ChryseModule import ee.hrzn.chryse.chisel.DirectionOf -import ee.hrzn.chryse.platform.BoardPlatform -import ee.hrzn.chryse.platform.BoardResources import ee.hrzn.chryse.platform.Platform +import ee.hrzn.chryse.platform.PlatformBoard +import ee.hrzn.chryse.platform.PlatformBoardResources import ee.hrzn.chryse.platform.resource import java.lang.reflect.Modifier import scala.collection.mutable class ICE40Top[Top <: Module]( - platform: BoardPlatform[_ <: BoardResources], + platform: PlatformBoard[_ <: PlatformBoardResources], genTop: => Top, ) extends ChryseModule { var lastPCF: Option[PCF] = None + // TODO (iCE40): SB_GBs between a lot more things. + private val clki = Wire(Clock()) private val clk_gb = Module(new SB_GB) 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 07cdbb2..bf6c6e7 100644 --- a/src/main/scala/ee/hrzn/chryse/platform/ice40/IceBreakerPlatform.scala +++ b/src/main/scala/ee/hrzn/chryse/platform/ice40/IceBreakerPlatform.scala @@ -1,14 +1,14 @@ package ee.hrzn.chryse.platform.ice40 import chisel3._ -import ee.hrzn.chryse.platform.BoardPlatform -import ee.hrzn.chryse.platform.BoardResources import ee.hrzn.chryse.platform.Platform +import ee.hrzn.chryse.platform.PlatformBoard +import ee.hrzn.chryse.platform.PlatformBoardResources import ee.hrzn.chryse.platform.resource import ee.hrzn.chryse.platform.resource.Pin._ final case class IceBreakerPlatform(ubtnReset: Boolean = false) - extends BoardPlatform[IceBreakerResources] { + extends PlatformBoard[IceBreakerResources] { val id = "icebreaker" val clockHz = 12_000_000 @@ -25,7 +25,8 @@ final case class IceBreakerPlatform(ubtnReset: Boolean = false) } } -class IceBreakerResources extends BoardResources { +class IceBreakerResources extends PlatformBoardResources { + // TODO: IO_STANDARD=SB_LVCMOS needs to be set on most. val clock = resource.ClockSource(12_000_000).onPin(35) val ubtn = resource.Button().inverted.onPin(10) @@ -35,6 +36,10 @@ class IceBreakerResources extends BoardResources { val ledg = resource.LED().inverted.onPin(37) val ledr = resource.LED().inverted.onPin(11) + var spiFlash = resource + .SPIFlash() + .onPins(csN = 16, clock = 15, copi = 14, cipo = 17, wpN = 12, holdN = 13) + // Ideally (per Amaranth) a user can refer to these connectors to make their // own resources, instead of just getting pins out of them. val pmod1a = resource.Connector( diff --git a/src/main/scala/ee/hrzn/chryse/platform/resource/Button.scala b/src/main/scala/ee/hrzn/chryse/platform/resource/Button.scala index a8fbba4..5d65979 100644 --- a/src/main/scala/ee/hrzn/chryse/platform/resource/Button.scala +++ b/src/main/scala/ee/hrzn/chryse/platform/resource/Button.scala @@ -2,7 +2,7 @@ package ee.hrzn.chryse.platform.resource import chisel3._ -class Button extends DataResource[Bool](Input(Bool())) { +class Button extends ResourceData[Bool](Input(Bool())) { private var invert = false // TODO: invert possibly belongs in a higher class def inverted: this.type = { diff --git a/src/main/scala/ee/hrzn/chryse/platform/resource/ClockSource.scala b/src/main/scala/ee/hrzn/chryse/platform/resource/ClockSource.scala index 2ec473a..14f4592 100644 --- a/src/main/scala/ee/hrzn/chryse/platform/resource/ClockSource.scala +++ b/src/main/scala/ee/hrzn/chryse/platform/resource/ClockSource.scala @@ -2,7 +2,7 @@ package ee.hrzn.chryse.platform.resource import chisel3._ -case class ClockSource(hz: Int) extends DataResource[Clock](Input(Clock())) {} +case class ClockSource(hz: Int) extends ResourceData[Clock](Input(Clock())) {} object ClockSource { def apply(hz: Int) = new ClockSource(hz) 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 cf3ceda..9e3161b 100644 --- a/src/main/scala/ee/hrzn/chryse/platform/resource/Connector.scala +++ b/src/main/scala/ee/hrzn/chryse/platform/resource/Connector.scala @@ -2,10 +2,10 @@ package ee.hrzn.chryse.platform.resource import chisel3._ -class Connector[Ix, E <: SinglePinResource]( +class Connector[Ix, E <: ResourceSinglePin]( gen: => E, private val ixToPin: (Ix, Pin)*, -) extends Base { +) extends ResourceBase { private val mappings: Map[Ix, E] = ixToPin .map { case (i, p) => i -> gen.onPin(p) @@ -17,11 +17,11 @@ class Connector[Ix, E <: SinglePinResource]( def setName(name: String): Unit = mappings.foreach { case (i, e) => e.setName(s"$name$i") } - def data: Seq[DataResource[_ <: Data]] = + def data: Seq[ResourceData[_ <: Data]] = mappings.flatMap(_._2.data).toSeq } object Connector { - def apply[Ix, E <: SinglePinResource](gen: => E, ixToPin: (Ix, Pin)*) = + def apply[Ix, E <: ResourceSinglePin](gen: => E, ixToPin: (Ix, Pin)*) = new Connector(gen, ixToPin: _*) } diff --git a/src/main/scala/ee/hrzn/chryse/platform/resource/InOut.scala b/src/main/scala/ee/hrzn/chryse/platform/resource/InOut.scala index 74ad8af..37079cb 100644 --- a/src/main/scala/ee/hrzn/chryse/platform/resource/InOut.scala +++ b/src/main/scala/ee/hrzn/chryse/platform/resource/InOut.scala @@ -4,9 +4,9 @@ import chisel3._ // TODO: it's an error to use both "i" and "o" (tristate is a different kettle // of fish entirely). -class InOut extends Base with SinglePinResource { - val i = new DataResource[Bool](Input(Bool())) {} - val o = new DataResource[Bool](Output(Bool())) {} +class InOut extends ResourceBase with ResourceSinglePin { + val i = new ResourceData[Bool](Input(Bool())) {} + val o = new ResourceData[Bool](Output(Bool())) {} def setName(name: String): Unit = { i.setName(s"$name") @@ -19,7 +19,7 @@ class InOut extends Base with SinglePinResource { this } - def data: Seq[DataResource[_ <: Data]] = Seq(i, o) + def data: Seq[ResourceData[_ <: Data]] = Seq(i, o) } object InOut { diff --git a/src/main/scala/ee/hrzn/chryse/platform/resource/LED.scala b/src/main/scala/ee/hrzn/chryse/platform/resource/LED.scala index 7991c49..08721f0 100644 --- a/src/main/scala/ee/hrzn/chryse/platform/resource/LED.scala +++ b/src/main/scala/ee/hrzn/chryse/platform/resource/LED.scala @@ -2,7 +2,7 @@ package ee.hrzn.chryse.platform.resource import chisel3._ -class LED extends DataResource[Bool](Output(Bool())) { +class LED extends ResourceData[Bool](Output(Bool())) { private var invert = false // TODO: invert possibly belongs in a higher class def inverted: this.type = { diff --git a/src/main/scala/ee/hrzn/chryse/platform/resource/Base.scala b/src/main/scala/ee/hrzn/chryse/platform/resource/ResourceBase.scala similarity index 52% rename from src/main/scala/ee/hrzn/chryse/platform/resource/Base.scala rename to src/main/scala/ee/hrzn/chryse/platform/resource/ResourceBase.scala index cf7411c..91f61d1 100644 --- a/src/main/scala/ee/hrzn/chryse/platform/resource/Base.scala +++ b/src/main/scala/ee/hrzn/chryse/platform/resource/ResourceBase.scala @@ -1,24 +1,24 @@ package ee.hrzn.chryse.platform.resource import chisel3._ -import ee.hrzn.chryse.platform.BoardResources +import ee.hrzn.chryse.platform.PlatformBoardResources import scala.collection.mutable.ArrayBuffer -trait Base { +trait ResourceBase { def setName(name: String): Unit - def data: Seq[DataResource[_ <: Data]] + def data: Seq[ResourceData[_ <: Data]] } -object Base { - def allFromBoardResources[T <: BoardResources]( +object ResourceBase { + def allFromBoardResources[T <: PlatformBoardResources]( br: T, - ): Seq[DataResource[_ <: Data]] = { - var out = ArrayBuffer[DataResource[_ <: Data]]() + ): Seq[ResourceData[_ <: Data]] = { + var out = ArrayBuffer[ResourceData[_ <: Data]]() for { f <- br.getClass().getDeclaredFields().iterator } { f.setAccessible(true) f.get(br) match { - case res: Base => + case res: ResourceBase => out.appendAll(res.data) case _ => } diff --git a/src/main/scala/ee/hrzn/chryse/platform/resource/DataResource.scala b/src/main/scala/ee/hrzn/chryse/platform/resource/ResourceData.scala similarity index 88% rename from src/main/scala/ee/hrzn/chryse/platform/resource/DataResource.scala rename to src/main/scala/ee/hrzn/chryse/platform/resource/ResourceData.scala index 089d618..4da3448 100644 --- a/src/main/scala/ee/hrzn/chryse/platform/resource/DataResource.scala +++ b/src/main/scala/ee/hrzn/chryse/platform/resource/ResourceData.scala @@ -2,7 +2,7 @@ package ee.hrzn.chryse.platform.resource import chisel3._ -abstract class DataResource[HW <: Data](gen: => HW) extends SinglePinResource { +abstract class ResourceData[HW <: Data](gen: => HW) extends ResourceSinglePin { final private[chryse] var pinId: Option[Pin] = None final var name: Option[String] = None @@ -31,7 +31,7 @@ abstract class DataResource[HW <: Data](gen: => HW) extends SinglePinResource { this } - def data: Seq[DataResource[_ <: Data]] = Seq(this) + def data: Seq[ResourceData[_ <: Data]] = Seq(this) } case class InstSides[HW](user: HW, top: HW) diff --git a/src/main/scala/ee/hrzn/chryse/platform/resource/SinglePinResource.scala b/src/main/scala/ee/hrzn/chryse/platform/resource/ResourceSinglePin.scala similarity index 61% rename from src/main/scala/ee/hrzn/chryse/platform/resource/SinglePinResource.scala rename to src/main/scala/ee/hrzn/chryse/platform/resource/ResourceSinglePin.scala index 9a1c514..31c84c3 100644 --- a/src/main/scala/ee/hrzn/chryse/platform/resource/SinglePinResource.scala +++ b/src/main/scala/ee/hrzn/chryse/platform/resource/ResourceSinglePin.scala @@ -1,5 +1,5 @@ package ee.hrzn.chryse.platform.resource -trait SinglePinResource extends Base { +trait ResourceSinglePin extends ResourceBase { def onPin(id: Pin): this.type } diff --git a/src/main/scala/ee/hrzn/chryse/platform/resource/SPIFlash.scala b/src/main/scala/ee/hrzn/chryse/platform/resource/SPIFlash.scala new file mode 100644 index 0000000..d9546ac --- /dev/null +++ b/src/main/scala/ee/hrzn/chryse/platform/resource/SPIFlash.scala @@ -0,0 +1,46 @@ +package ee.hrzn.chryse.platform.resource + +import chisel3._ + +class SPIFlash extends ResourceBase { + // TODO NEXT: refactoring out inversion (and other interposed) logic here should be fruitful. + val cs = new ResourceData[Bool](Output(Bool())) {} // TODO: invert + val clock = new ResourceData[Clock](Output(Clock())) {} // XXX: Clock here OK? + val copi = new ResourceData[Bool](Output(Bool())) {} + val cipo = new ResourceData[Bool](Input(Bool())) {} + val wp = new ResourceData[Bool](Output(Bool())) {} // TODO: invert + val hold = new ResourceData[Bool](Output(Bool())) {} // TODO: invert + + def setName(name: String): Unit = { + cs.setName(s"${name}_cs") + clock.setName(s"${name}_clock") + copi.setName(s"${name}_copi") + cipo.setName(s"${name}_cipo") + wp.setName(s"${name}_wp") + hold.setName(s"${name}_hold") + } + + def onPins( + csN: Pin, + clock: Pin, + copi: Pin, + cipo: Pin, + wpN: Pin, + holdN: Pin, + ): this.type = { + this.cs.onPin(csN) + this.clock.onPin(clock) + this.copi.onPin(copi) + this.cipo.onPin(cipo) + this.wp.onPin(wpN) + this.hold.onPin(holdN) + this + } + + def data: Seq[ResourceData[_ <: Data]] = + Seq(cs, clock, copi, cipo, wp, hold) +} + +object SPIFlash { + def apply() = new SPIFlash +} diff --git a/src/main/scala/ee/hrzn/chryse/platform/resource/UART.scala b/src/main/scala/ee/hrzn/chryse/platform/resource/UART.scala index e13f9fb..20c7523 100644 --- a/src/main/scala/ee/hrzn/chryse/platform/resource/UART.scala +++ b/src/main/scala/ee/hrzn/chryse/platform/resource/UART.scala @@ -2,9 +2,11 @@ package ee.hrzn.chryse.platform.resource import chisel3._ -class UART extends Base { - val rx = new DataResource[Bool](Input(Bool())) {} - val tx = new DataResource[Bool](Output(Bool())) {} +class UART extends ResourceBase { + // TODO (iCE40): lower IO_STANDARD=SB_LVTTL and PULLUP=1. + // TODO: these will differ per-platform so need to come in from outside. + val rx = new ResourceData[Bool](Input(Bool())) {} + val tx = new ResourceData[Bool](Output(Bool())) {} def setName(name: String): Unit = { rx.setName(s"${name}_rx") @@ -17,7 +19,7 @@ class UART extends Base { this } - def data: Seq[DataResource[_ <: Data]] = Seq(rx, tx) + def data: Seq[ResourceData[_ <: Data]] = Seq(rx, tx) } object UART { diff --git a/src/main/scala/ee/hrzn/chryse/platform/resource/implicits.scala b/src/main/scala/ee/hrzn/chryse/platform/resource/implicits.scala index 55b2c91..7cba078 100644 --- a/src/main/scala/ee/hrzn/chryse/platform/resource/implicits.scala +++ b/src/main/scala/ee/hrzn/chryse/platform/resource/implicits.scala @@ -9,18 +9,18 @@ object implicits { // Note that the DataView doesn't really need or care about the generated // data's direction or lack thereof. - implicit def BaseProduct[HW <: Data]: DataProduct[DataResource[HW]] = - new DataProduct[DataResource[HW]] { + implicit def BaseProduct[HW <: Data]: DataProduct[ResourceData[HW]] = + new DataProduct[ResourceData[HW]] { def dataIterator( - res: DataResource[HW], + res: ResourceData[HW], path: String, ): Iterator[(Data, String)] = Seq(res.ioInst.get.user -> path).iterator } - implicit def viewBool: DataView[DataResource[Bool], Bool] = + implicit def viewBool: DataView[ResourceData[Bool], Bool] = DataView(res => Bool(), _.ioInstOrMake().user -> _) - implicit def base2Bool(res: DataResource[Bool]): Bool = + implicit def base2Bool(res: ResourceData[Bool]): Bool = res.viewAs[Bool] } diff --git a/src/main/scala/ee/hrzn/chryse/tasks/BuildTask.scala b/src/main/scala/ee/hrzn/chryse/tasks/BuildTask.scala index 69a5a93..f3ccbde 100644 --- a/src/main/scala/ee/hrzn/chryse/tasks/BuildTask.scala +++ b/src/main/scala/ee/hrzn/chryse/tasks/BuildTask.scala @@ -2,8 +2,8 @@ package ee.hrzn.chryse.tasks import chisel3._ import circt.stage.ChiselStage -import ee.hrzn.chryse.platform.BoardPlatform -import ee.hrzn.chryse.platform.BoardResources +import ee.hrzn.chryse.platform.PlatformBoard +import ee.hrzn.chryse.platform.PlatformBoardResources import ee.hrzn.chryse.platform.Platform import ee.hrzn.chryse.platform.ice40.ICE40Top import ee.hrzn.chryse.platform.ice40.PCF @@ -21,7 +21,7 @@ object BuildTask extends BaseTask { // after synthesis. def apply[Top <: Module]( name: String, - platform: BoardPlatform[_ <: BoardResources], + platform: PlatformBoard[_ <: PlatformBoardResources], genTop: Platform => Top, options: Options, ): Unit = { diff --git a/src/test/scala/ee/hrzn/chryse/platform/BoardResourcesSpec.scala b/src/test/scala/ee/hrzn/chryse/platform/PlatformBoardResourcesSpec.scala similarity index 97% rename from src/test/scala/ee/hrzn/chryse/platform/BoardResourcesSpec.scala rename to src/test/scala/ee/hrzn/chryse/platform/PlatformBoardResourcesSpec.scala index bf8fa3f..d148253 100644 --- a/src/test/scala/ee/hrzn/chryse/platform/BoardResourcesSpec.scala +++ b/src/test/scala/ee/hrzn/chryse/platform/PlatformBoardResourcesSpec.scala @@ -12,8 +12,8 @@ import ee.hrzn.chryse.verilog import org.scalatest.flatspec.AnyFlatSpec import org.scalatest.matchers.should._ -class BoardResourcesSpec extends AnyFlatSpec with Matchers { - behavior.of("BoardResources") +class PlatformBoardResourcesSpec extends AnyFlatSpec with Matchers { + behavior.of("PlatformBoardResources") def iceBreakerSVAndTop[Top <: Module]( gen: Platform => Top,