from amaranth import * from amaranth.lib import wiring class Debounce(wiring.Component): i: wiring.In(1) o: wiring.Out(1) def __init__(self, cycles): super().__init__() self._cycles = cycles def elaborate(self, platform): m = Module() cnt = Signal(range(self._cycles + 1)) with m.If(cnt > 0): m.d.sync += cnt.eq(cnt - 1) with m.Elif(self.o != self.i): m.d.sync += self.o.eq(self.i) m.d.sync += cnt.eq(self._cycles) return m