4 from nmigen
.build
import ResourceError
10 class Blinky(Elaboratable
):
11 def elaborate(self
, platform
):
14 def get_all_resources(name
):
16 for number
in itertools
.count():
18 resources
.append(platform
.request(name
, number
))
23 leds
= [res
.o
for res
in get_all_resources("led")]
24 buttons
= [res
.i
for res
in get_all_resources("button")]
25 switches
= [res
.i
for res
in get_all_resources("switch")]
27 inverts
= [0 for _
in leds
]
28 for index
, button
in zip(itertools
.cycle(range(len(inverts
))), buttons
):
29 inverts
[index
] ^
= button
30 for index
, switch
in zip(itertools
.cycle(range(len(inverts
))), switches
):
31 inverts
[index
] ^
= switch
33 clk_freq
= platform
.default_clk_frequency
34 timer
= Signal(max=int(clk_freq
//2), reset
=int(clk_freq
//2) - 1)
35 flops
= Signal(len(leds
))
37 m
.d
.comb
+= Cat(leds
).eq(flops ^
Cat(inverts
))
38 with m
.If(timer
== 0):
39 m
.d
.sync
+= timer
.eq(timer
.reset
)
40 m
.d
.sync
+= flops
.eq(~flops
)
42 m
.d
.sync
+= timer
.eq(timer
- 1)