From ecda2a1d08af7c226c87c5bd40fc5d634a4b06a9 Mon Sep 17 00:00:00 2001 From: whitequark Date: Tue, 4 Jun 2019 11:06:01 +0000 Subject: Blink all LEDs at 1 Hz if any board is run as __main__. --- nmigen_boards/_blinky.py | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 nmigen_boards/_blinky.py (limited to 'nmigen_boards/_blinky.py') 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) -- cgit v1.2.3