from migen import * class BiDirectionalIO(Module): def __init__(self, i_pads, o_pads): self.i = Signal(4) self.o = Signal(4) self.t = Signal(4) for i in range(4): self.specials += Instance("OBUFTDS", i_I=self.i[i], o_O=o_pads[i].p, o_OB=o_pads[i].n, # Always chain the 3-states input to serializer # Vivado will complain otherwise i_T=self.t[i], ) for i in range(4): self.specials += Instance("IBUFDS", i_I=i_pads[i].p, i_IB=i_pads[i].n, o_O=self.o[i], )