Skip to content

Commit

Permalink
rtio: support differential ttl
Browse files Browse the repository at this point in the history
jordens committed Nov 24, 2016
1 parent d0a55e5 commit 95c885b
Showing 1 changed file with 22 additions and 10 deletions.
32 changes: 22 additions & 10 deletions artiq/gateware/rtio/phy/ttl_serdes_7series.py
Original file line number Diff line number Diff line change
@@ -4,28 +4,35 @@


class _OSERDESE2_8X(Module):
def __init__(self, pad):
def __init__(self, pad, pad_n=None):
self.o = Signal(8)
self.t_in = Signal()
self.t_out = Signal()

# # #

o = self.o
pad_o = Signal()
self.specials += Instance("OSERDESE2",
p_DATA_RATE_OQ="DDR", p_DATA_RATE_TQ="BUF",
p_DATA_WIDTH=8, p_TRISTATE_WIDTH=1,
o_OQ=pad, o_TQ=self.t_out,
o_OQ=pad_o, o_TQ=self.t_out,
i_CLK=ClockSignal("rtiox4"),
i_CLKDIV=ClockSignal("rio_phy"),
i_D1=o[0], i_D2=o[1], i_D3=o[2], i_D4=o[3],
i_D5=o[4], i_D6=o[5], i_D7=o[6], i_D8=o[7],
i_TCE=1, i_OCE=1, i_RST=0,
i_T1=self.t_in)
if pad_n is None:
self.comb += pad.eq(pad_o)
else:
self.specials += Instance("OBUFDS",
i_I=pad_o,
o_O=pad, o_OB=pad_n)


class _IOSERDESE2_8X(Module):
def __init__(self, pad):
def __init__(self, pad, pad_n=None):
self.o = Signal(8)
self.i = Signal(8)
self.oe = Signal()
@@ -47,24 +54,29 @@ def __init__(self, pad):
i_CLKDIV=ClockSignal("rio_phy"))
oserdes = _OSERDESE2_8X(pad_o)
self.submodules += oserdes
self.specials += Instance("IOBUF",
i_I=pad_o, o_O=pad_i, i_T=oserdes.t_out,
io_IO=pad)
if pad_n is None:
self.specials += Instance("IOBUF",
i_I=pad_o, o_O=pad_i, i_T=oserdes.t_out,
io_IO=pad)
else:
self.specials += Instance("IOBUFDS",
i_I=pad_o, o_O=pad_i, i_T=oserdes.t_out,
io_IO=pad, io_IOB=pad_n)
self.comb += [
oserdes.t_in.eq(~self.oe),
oserdes.o.eq(self.o)
]


class Output_8X(ttl_serdes_generic.Output):
def __init__(self, pad):
serdes = _OSERDESE2_8X(pad)
def __init__(self, pad, pad_n=None):
serdes = _OSERDESE2_8X(pad, pad_n)
self.submodules += serdes
ttl_serdes_generic.Output.__init__(self, serdes)


class Inout_8X(ttl_serdes_generic.Inout):
def __init__(self, pad):
serdes = _IOSERDESE2_8X(pad)
def __init__(self, pad, pad_n=None):
serdes = _IOSERDESE2_8X(pad, pad_n)
self.submodules += serdes
ttl_serdes_generic.Inout.__init__(self, serdes)

0 comments on commit 95c885b

Please sign in to comment.