text: 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
  