drtio/gth_ultrascale: support OBUFDS_GTE3

This commit is contained in:
Sebastien Bourdeauducq 2019-11-20 19:15:50 +08:00
parent fe0c324b38
commit ae50da09c4

View File

@ -37,6 +37,8 @@ class GTHSingle(Module):
self.rx_ready = Signal() self.rx_ready = Signal()
# transceiver direct clock outputs # transceiver direct clock outputs
# for OBUFDS_GTE3
self.rxrecclkout = Signal()
# useful to specify clock constraints in a way palatable to Vivado # useful to specify clock constraints in a way palatable to Vivado
self.txoutclk = Signal() self.txoutclk = Signal()
self.rxoutclk = Signal() self.rxoutclk = Signal()
@ -521,6 +523,7 @@ class GTHSingle(Module):
i_RXSYSCLKSEL=0b00, i_RXSYSCLKSEL=0b00,
i_RXOUTCLKSEL=0b010, i_RXOUTCLKSEL=0b010,
i_RXPLLCLKSEL=0b00, i_RXPLLCLKSEL=0b00,
o_RXRECCLKOUT=self.rxrecclkout,
o_RXOUTCLK=self.rxoutclk, o_RXOUTCLK=self.rxoutclk,
i_RXUSRCLK=ClockSignal("rtio_rx"), i_RXUSRCLK=ClockSignal("rtio_rx"),
i_RXUSRCLK2=ClockSignal("rtio_rx"), i_RXUSRCLK2=ClockSignal("rtio_rx"),
@ -633,7 +636,7 @@ class GTHTXPhaseAlignement(Module):
class GTH(Module, TransceiverInterface): class GTH(Module, TransceiverInterface):
def __init__(self, clock_pads, data_pads, sys_clk_freq, rtio_clk_freq, rtiox_mul=2, dw=20, master=0): def __init__(self, clock_pads, data_pads, sys_clk_freq, rtio_clk_freq, rtiox_mul=2, dw=20, master=0, clock_recout_pads=None):
self.nchannels = nchannels = len(data_pads) self.nchannels = nchannels = len(data_pads)
self.gths = [] self.gths = []
@ -689,3 +692,9 @@ class GTH(Module, TransceiverInterface):
getattr(self, "cd_rtio_rx" + str(i)).clk.eq(self.gths[i].cd_rtio_rx.clk), getattr(self, "cd_rtio_rx" + str(i)).clk.eq(self.gths[i].cd_rtio_rx.clk),
getattr(self, "cd_rtio_rx" + str(i)).rst.eq(self.gths[i].cd_rtio_rx.rst) getattr(self, "cd_rtio_rx" + str(i)).rst.eq(self.gths[i].cd_rtio_rx.rst)
] ]
if clock_recout_pads is not None:
self.specials += Instance("OBUFDS_GTE3",
i_I=self.gths[0].rxrecclkout,
i_CEB=0,
o_O=clock_recout_pads.p, o_OB=clock_recout_pads.n)