File tree Expand file tree Collapse file tree 4 files changed +18
-17
lines changed
lib/src/main/scala/dfhdl/platforms/resources Expand file tree Collapse file tree 4 files changed +18
-17
lines changed Original file line number Diff line number Diff line change @@ -5,6 +5,4 @@ import dfhdl.hw.constraints.io
5
5
enum Button extends Encoded .Toggle :
6
6
case Released , Pressed
7
7
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 )
Original file line number Diff line number Diff line change 1
1
package dfhdl .platforms .resources
2
2
import dfhdl .Encoded
3
3
import dfhdl .compiler .ir .constraints .IO
4
+ import dfhdl .core .DFC
4
5
5
6
enum Led extends Encoded .Toggle :
6
7
case Off , On
7
8
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 ]:
9
10
private val pullMode = if (activeState == Led .On ) IO .PullMode .DOWN else IO .PullMode .UP
10
11
injectConstraint(IO (standard = IO .Standard .LVCMOS , unusedPullMode = pullMode))
12
+ def apply (activeState : Led = Led .On )(using DFC ): Resource = new Resource (activeState)
Original file line number Diff line number Diff line change @@ -4,24 +4,16 @@ import dfhdl.hw.constraints.io
4
4
5
5
enum SwitchUD extends Encoded .Toggle :
6
6
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 )
10
8
11
9
enum SwitchRL extends Encoded .Toggle :
12
10
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 )
16
12
17
13
enum SwitchNS extends Encoded .Toggle :
18
14
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 )
22
16
23
17
enum SwitchEW extends Encoded .Toggle :
24
18
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 )
Original file line number Diff line number Diff line change @@ -3,7 +3,7 @@ import dfhdl.Encoded.Toggle
3
3
import dfhdl .core .*
4
4
import Resource .CanConnect
5
5
import dfhdl .internals .*
6
- import dfhdl .compiler .ir .constraints
6
+ import dfhdl .compiler .ir .{ constraints , ConfigN }
7
7
8
8
trait ToggleIO [T <: Toggle ] extends IO :
9
9
val activeState : T
@@ -25,6 +25,15 @@ object ToggleIO:
25
25
)).connect(dfVal)
26
26
end ToggleIO
27
27
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
+
28
37
opaque type ExpectedActiveState [T <: Toggle ] <: T = T
29
38
object ExpectedActiveState :
30
39
given [T <: Toggle ]: Conversion [T , ExpectedActiveState [T ]] = identity
You can’t perform that action at this time.
0 commit comments