Skip to content

Commit c7614f2

Browse files
author
Oron Port
committed
refactor of ToggleIO
1 parent 7998764 commit c7614f2

File tree

4 files changed

+18
-17
lines changed

4 files changed

+18
-17
lines changed

lib/src/main/scala/dfhdl/platforms/resources/Button.scala

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,4 @@ import dfhdl.hw.constraints.io
55
enum Button extends Encoded.Toggle:
66
case Released, Pressed
77

8-
object Button:
9-
@io(standard = io.Standard.LVCMOS)
10-
class Resource(val activeState: Button = Button.Pressed) extends ToggleIO[Button]
8+
object Button extends ToggleIOComp[Button](Button.Pressed, io.Standard.LVCMOS)
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
package dfhdl.platforms.resources
22
import dfhdl.Encoded
33
import dfhdl.compiler.ir.constraints.IO
4+
import dfhdl.core.DFC
45

56
enum Led extends Encoded.Toggle:
67
case Off, On
78
object Led:
8-
class Resource(val activeState: Led = Led.On) extends ToggleIO[Led]:
9+
class Resource private[Led] (val activeState: Led = Led.On) extends ToggleIO[Led]:
910
private val pullMode = if (activeState == Led.On) IO.PullMode.DOWN else IO.PullMode.UP
1011
injectConstraint(IO(standard = IO.Standard.LVCMOS, unusedPullMode = pullMode))
12+
def apply(activeState: Led = Led.On)(using DFC): Resource = new Resource(activeState)

lib/src/main/scala/dfhdl/platforms/resources/Switches.scala

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,24 +4,16 @@ import dfhdl.hw.constraints.io
44

55
enum SwitchUD extends Encoded.Toggle:
66
case Down, Up
7-
object SwitchUD:
8-
@io(standard = io.Standard.LVCMOS)
9-
class Resource(val activeState: SwitchUD = SwitchUD.Up) extends ToggleIO[SwitchUD]
7+
object SwitchUD extends ToggleIOComp[SwitchUD](SwitchUD.Up, io.Standard.LVCMOS)
108

119
enum SwitchRL extends Encoded.Toggle:
1210
case Left, Right
13-
object SwitchRL:
14-
@io(standard = io.Standard.LVCMOS)
15-
class Resource(val activeState: SwitchRL = SwitchRL.Right) extends ToggleIO[SwitchRL]
11+
object SwitchRL extends ToggleIOComp[SwitchRL](SwitchRL.Right, io.Standard.LVCMOS)
1612

1713
enum SwitchNS extends Encoded.Toggle:
1814
case South, North
19-
object SwitchNS:
20-
@io(standard = io.Standard.LVCMOS)
21-
class Resource(val activeState: SwitchNS = SwitchNS.North) extends ToggleIO[SwitchNS]
15+
object SwitchNS extends ToggleIOComp[SwitchNS](SwitchNS.North, io.Standard.LVCMOS)
2216

2317
enum SwitchEW extends Encoded.Toggle:
2418
case West, East
25-
object SwitchEW:
26-
@io(standard = io.Standard.LVCMOS)
27-
class Resource(val activeState: SwitchEW = SwitchEW.East) extends ToggleIO[SwitchEW]
19+
object SwitchEW extends ToggleIOComp[SwitchEW](SwitchEW.East, io.Standard.LVCMOS)

core/src/main/scala/dfhdl/platforms/resources/ToggleIO.scala renamed to lib/src/main/scala/dfhdl/platforms/resources/ToggleIO.scala

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import dfhdl.Encoded.Toggle
33
import dfhdl.core.*
44
import Resource.CanConnect
55
import dfhdl.internals.*
6-
import dfhdl.compiler.ir.constraints
6+
import dfhdl.compiler.ir.{constraints, ConfigN}
77

88
trait ToggleIO[T <: Toggle] extends IO:
99
val activeState: T
@@ -25,6 +25,15 @@ object ToggleIO:
2525
)).connect(dfVal)
2626
end ToggleIO
2727

28+
abstract class ToggleIOComp[T <: Toggle](
29+
defaultActiveState: T,
30+
standard: ConfigN[constraints.IO.Standard] = None
31+
):
32+
class Resource private[ToggleIOComp] (val activeState: T = defaultActiveState)
33+
extends ToggleIO[T]:
34+
injectConstraint(constraints.IO(standard = standard))
35+
def apply(activeState: T = defaultActiveState)(using DFC): Resource = new Resource(activeState)
36+
2837
opaque type ExpectedActiveState[T <: Toggle] <: T = T
2938
object ExpectedActiveState:
3039
given [T <: Toggle]: Conversion[T, ExpectedActiveState[T]] = identity

0 commit comments

Comments
 (0)