blob: b0a190e534e94409559c02cc6987d04d6fb44f1e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
import itertools
from nmigen import *
from nmigen.build import ResourceError
class Blinky(Elaboratable):
def __init__(self, clk_name):
self.clk_name = clk_name
def elaborate(self, platform):
m = Module()
clk = platform.request(self.clk_name)
clk_freq = platform.get_clock_constraint(clk)
m.domains.sync = ClockDomain()
m.d.comb += ClockSignal().eq(clk.i)
leds = []
for n in itertools.count():
try:
leds.append(platform.request("user_led", n))
except ResourceError:
break
leds = Cat(led.o for led in leds)
ctr = Signal(max=int(clk_freq//2), reset=int(clk_freq//2) - 1)
with m.If(ctr == 0):
m.d.sync += ctr.eq(ctr.reset)
m.d.sync += leds.eq(~leds)
with m.Else():
m.d.sync += ctr.eq(ctr - 1)
return m
def build_and_program(platform_cls, clk_name, **kwargs):
platform_cls().build(Blinky(clk_name), do_program=True, **kwargs)
|