pocs/lfps: add lfps polling generation (and local copy of gtp_7series)

This commit is contained in:
Florent Kermarrec 2019-09-19 19:39:48 +02:00
parent afdebbcd3c
commit 2e5c62ddbc
2 changed files with 1105 additions and 1 deletions

1077
pocs/lfps/gtp_7series.py Normal file

File diff suppressed because it is too large Load Diff

View File

@ -15,7 +15,7 @@ from litex.soc.integration.soc_core import *
from litex.soc.integration.builder import *
from litex.soc.cores.uart import UARTWishboneBridge
from liteiclink.transceiver.gtp_7series import GTPQuadPLL, GTP
from gtp_7series import GTPQuadPLL, GTP
from litescope import LiteScopeAnalyzer
@ -129,6 +129,33 @@ class USB3Sniffer(SoCMini):
o_RXELECIDLE = rxelecidle)
self.comb += platform.request("user_gpio", 0).eq(rxelecidle)
# LFPS Polling generation ------------------------------------------------------------------
# 5Gbps linerate / 4ns per words
# 25MHz burst can be generated with 5 all ones / 5 all zeroes cycles.
txelecidle = Signal()
lfps_polling_pattern = Signal(20)
lfps_polling_count = Signal(4)
self.sync.tx += [
lfps_polling_count.eq(lfps_polling_count + 1),
If(lfps_polling_count == 4,
lfps_polling_count.eq(0),
lfps_polling_pattern.eq(~lfps_polling_pattern),
)
]
lfps_burst_timer = WaitTimer(int(1e-6*sys_clk_freq))
lfps_repeat_timer = WaitTimer(int(10e-6*sys_clk_freq))
self.submodules += lfps_burst_timer, lfps_repeat_timer
self.comb += [
lfps_burst_timer.wait.eq(~lfps_repeat_timer.done),
lfps_repeat_timer.wait.eq(~lfps_repeat_timer.done),
]
self.comb += gtp.tx_produce_pattern.eq(1)
self.comb += gtp.tx_pattern.eq(lfps_polling_pattern)
self.comb += txelecidle.eq(lfps_burst_timer.done)
gtp.gtp_params.update(i_TXELECIDLE=txelecidle) # FIXME: check TX OOB settings
self.comb += platform.request("user_gpio", 1).eq(txelecidle)
# Analyzer ---------------------------------------------------------------------------------
analyzer_signals = [rxelecidle]
self.submodules.analyzer = LiteScopeAnalyzer(analyzer_signals, 4096, clock_domain="sys",