litex/misoclib/gpio/__init__.py

28 lines
832 B
Python
Raw Normal View History

2013-05-22 11:10:13 -04:00
from migen.fhdl.std import *
2013-05-16 11:43:20 -04:00
from migen.genlib.cdc import MultiReg
from migen.bank.description import *
class GPIOIn(Module, AutoCSR):
def __init__(self, signal):
2013-05-22 11:10:13 -04:00
self._r_in = CSRStatus(flen(signal))
2013-05-16 11:43:20 -04:00
self.specials += MultiReg(signal, self._r_in.status)
class GPIOOut(Module, AutoCSR):
def __init__(self, signal):
2013-05-22 11:10:13 -04:00
self._r_out = CSRStorage(flen(signal))
2013-05-16 11:43:20 -04:00
self.comb += signal.eq(self._r_out.storage)
2013-12-05 18:06:53 -05:00
class GPIOInOut(Module):
def __init__(self, in_signal, out_signal):
self.submodules.gpio_in = GPIOIn(in_signal)
self.submodules.gpio_out = GPIOOut(out_signal)
def get_csrs(self):
return self.gpio_in.get_csrs() + self.gpio_out.get_csrs()
2013-05-16 11:43:20 -04:00
class Blinker(Module):
def __init__(self, signal, divbits=26):
counter = Signal(divbits)
self.comb += signal.eq(counter[divbits-1])
self.sync += counter.eq(counter + 1)