2
2
3
3
from amaranth import *
4
4
from amaranth .build import ResourceError
5
+ from amaranth .lib import io
5
6
6
7
7
8
__all__ = ["Blinky" ]
@@ -15,32 +16,34 @@ def get_all_resources(name):
15
16
resources = []
16
17
for number in itertools .count ():
17
18
try :
18
- resources .append (platform .request (name , number ))
19
+ resources .append (platform .request (name , number , dir = "-" ))
19
20
except ResourceError :
20
21
break
21
22
return resources
22
23
23
24
rgb_leds = [res for res in get_all_resources ("rgb_led" )]
24
- leds = [res .o for res in get_all_resources ("led" )]
25
- leds .extend ([led .r .o for led in rgb_leds ])
26
- leds .extend ([led .g .o for led in rgb_leds ])
27
- leds .extend ([led .b .o for led in rgb_leds ])
28
- buttons = [res .i for res in get_all_resources ("button" )]
29
- switches = [res .i for res in get_all_resources ("switch" )]
25
+ leds = [io .Buffer ("o" , res ) for res in get_all_resources ("led" )]
26
+ leds .extend ([io .Buffer ("o" , led .r ) for led in rgb_leds ])
27
+ leds .extend ([io .Buffer ("o" , led .g ) for led in rgb_leds ])
28
+ leds .extend ([io .Buffer ("o" , led .b ) for led in rgb_leds ])
29
+ buttons = [io .Buffer ("i" , res ) for res in get_all_resources ("button" )]
30
+ switches = [io .Buffer ("i" , res ) for res in get_all_resources ("switch" )]
31
+
32
+ m .submodules += leds + buttons + switches
30
33
31
34
inverts = [0 for _ in leds ]
32
35
for index , button in zip (itertools .cycle (range (len (inverts ))), buttons ):
33
- inverts [index ] ^= button
36
+ inverts [index ] ^= button . i
34
37
for index , switch in zip (itertools .cycle (range (len (inverts ))), switches ):
35
- inverts [index ] ^= switch
38
+ inverts [index ] ^= switch . i
36
39
37
40
clk_freq = platform .default_clk_frequency
38
- timer = Signal (range (int (clk_freq // 2 )), reset = int (clk_freq // 2 ) - 1 )
41
+ timer = Signal (range (int (clk_freq // 2 )), init = int (clk_freq // 2 ) - 1 )
39
42
flops = Signal (len (leds ))
40
43
41
- m .d .comb += Cat (leds ).eq (flops ^ Cat (inverts ))
44
+ m .d .comb += Cat (led . o for led in leds ).eq (flops ^ Cat (inverts ))
42
45
with m .If (timer == 0 ):
43
- m .d .sync += timer .eq (timer .reset )
46
+ m .d .sync += timer .eq (timer .init )
44
47
m .d .sync += flops .eq (~ flops )
45
48
with m .Else ():
46
49
m .d .sync += timer .eq (timer - 1 )
0 commit comments