aboutsummaryrefslogtreecommitdiff
path: root/nmigen_boards/_blinky.py
diff options
context:
space:
mode:
Diffstat (limited to 'nmigen_boards/_blinky.py')
-rw-r--r--nmigen_boards/_blinky.py35
1 files changed, 35 insertions, 0 deletions
diff --git a/nmigen_boards/_blinky.py b/nmigen_boards/_blinky.py
new file mode 100644
index 0000000..1e533ef
--- /dev/null
+++ b/nmigen_boards/_blinky.py
@@ -0,0 +1,35 @@
+import itertools
+
+from nmigen import *
+from nmigen.build import ConstraintError
+
+
+class Blinky(Elaboratable):
+ def elaborate(self, platform):
+ m = Module()
+
+ clk_name, clk_freq = next(iter(platform.clocks.items()))
+ clk = platform.request(*clk_name)
+ 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 ConstraintError:
+ 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, **kwargs):
+ platform_cls().build(Blinky(), do_program=True, **kwargs)