Initial commit.
This commit is contained in:
0
re-bba/amaranth_boards/test/__init__.py
Normal file
0
re-bba/amaranth_boards/test/__init__.py
Normal file
48
re-bba/amaranth_boards/test/blinky.py
Normal file
48
re-bba/amaranth_boards/test/blinky.py
Normal file
@@ -0,0 +1,48 @@
|
||||
import itertools
|
||||
|
||||
from amaranth import *
|
||||
from amaranth.build import ResourceError
|
||||
|
||||
|
||||
__all__ = ["Blinky"]
|
||||
|
||||
|
||||
class Blinky(Elaboratable):
|
||||
def elaborate(self, platform):
|
||||
m = Module()
|
||||
|
||||
def get_all_resources(name):
|
||||
resources = []
|
||||
for number in itertools.count():
|
||||
try:
|
||||
resources.append(platform.request(name, number))
|
||||
except ResourceError:
|
||||
break
|
||||
return resources
|
||||
|
||||
rgb_leds = [res for res in get_all_resources("rgb_led")]
|
||||
leds = [res.o for res in get_all_resources("led")]
|
||||
leds.extend([led.r.o for led in rgb_leds])
|
||||
leds.extend([led.g.o for led in rgb_leds])
|
||||
leds.extend([led.b.o for led in rgb_leds])
|
||||
buttons = [res.i for res in get_all_resources("button")]
|
||||
switches = [res.i for res in get_all_resources("switch")]
|
||||
|
||||
inverts = [0 for _ in leds]
|
||||
for index, button in zip(itertools.cycle(range(len(inverts))), buttons):
|
||||
inverts[index] ^= button
|
||||
for index, switch in zip(itertools.cycle(range(len(inverts))), switches):
|
||||
inverts[index] ^= switch
|
||||
|
||||
clk_freq = platform.default_clk_frequency
|
||||
timer = Signal(range(int(clk_freq//2)), reset=int(clk_freq//2) - 1)
|
||||
flops = Signal(len(leds))
|
||||
|
||||
m.d.comb += Cat(leds).eq(flops ^ Cat(inverts))
|
||||
with m.If(timer == 0):
|
||||
m.d.sync += timer.eq(timer.reset)
|
||||
m.d.sync += flops.eq(~flops)
|
||||
with m.Else():
|
||||
m.d.sync += timer.eq(timer - 1)
|
||||
|
||||
return m
|
||||
Reference in New Issue
Block a user