mirror of
https://github.com/enjoy-digital/usb3_pipe.git
synced 2025-01-04 10:18:41 +08:00
pocs/kc705: add TSEQ Receiver, TS1 Receiver
This commit is contained in:
parent
43f089281d
commit
e4ffdaf9fc
@ -19,8 +19,10 @@ from litex.boards.platforms import kc705
|
|||||||
|
|
||||||
from litescope import LiteScopeAnalyzer
|
from litescope import LiteScopeAnalyzer
|
||||||
|
|
||||||
|
from usb3_pipe.common import TSEQ, TS1
|
||||||
from usb3_pipe.gtx_7series import GTXChannelPLL, GTX
|
from usb3_pipe.gtx_7series import GTXChannelPLL, GTX
|
||||||
from usb3_pipe.lfps import LFPSReceiver, LFPSTransmitter
|
from usb3_pipe.lfps import LFPSReceiver, LFPSTransmitter
|
||||||
|
from usb3_pipe.ordered_set import OrderedSetReceiver
|
||||||
|
|
||||||
# USB3 IOs -----------------------------------------------------------------------------------------
|
# USB3 IOs -----------------------------------------------------------------------------------------
|
||||||
|
|
||||||
@ -165,6 +167,18 @@ class USB3SoC(SoCMini):
|
|||||||
gtx.tx_pattern.eq(lfps_transmitter.tx_pattern),
|
gtx.tx_pattern.eq(lfps_transmitter.tx_pattern),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
# TSEQ Receiver ----------------------------------------------------------------------------
|
||||||
|
tseq_receiver = OrderedSetReceiver(ordered_set=TSEQ, n_ordered_sets=1024, data_width=32)
|
||||||
|
tseq_receiver = ClockDomainsRenamer("rx")(tseq_receiver)
|
||||||
|
self.submodules += tseq_receiver
|
||||||
|
self.comb += gtx.source.connect(tseq_receiver.sink)
|
||||||
|
|
||||||
|
# TS1 Receiver ----------------------------------------------------------------------------
|
||||||
|
ts1_receiver = OrderedSetReceiver(ordered_set=TS1, n_ordered_sets=1, data_width=32)
|
||||||
|
ts1_receiver = ClockDomainsRenamer("rx")(ts1_receiver)
|
||||||
|
self.submodules += ts1_receiver
|
||||||
|
self.comb += gtx.source.connect(ts1_receiver.sink)
|
||||||
|
|
||||||
# Leds -------------------------------------------------------------------------------------
|
# Leds -------------------------------------------------------------------------------------
|
||||||
self.comb += platform.request("user_led", 0).eq(gtx.tx_ready)
|
self.comb += platform.request("user_led", 0).eq(gtx.tx_ready)
|
||||||
self.comb += platform.request("user_led", 1).eq(gtx.rx_ready)
|
self.comb += platform.request("user_led", 1).eq(gtx.rx_ready)
|
||||||
@ -176,7 +190,7 @@ class USB3SoC(SoCMini):
|
|||||||
platform.request("user_led", 2).eq(~polling_timer.done)
|
platform.request("user_led", 2).eq(~polling_timer.done)
|
||||||
]
|
]
|
||||||
|
|
||||||
# LFPS Analyzer ---------------------------------------------------------------------------------
|
# LFPS Analyzer ----------------------------------------------------------------------------
|
||||||
if with_lfps_analyzer:
|
if with_lfps_analyzer:
|
||||||
analyzer_signals = [
|
analyzer_signals = [
|
||||||
rxelecidle,
|
rxelecidle,
|
||||||
@ -192,7 +206,14 @@ class USB3SoC(SoCMini):
|
|||||||
|
|
||||||
# RX Analyzer ---------------------------------------------------------------------------------
|
# RX Analyzer ---------------------------------------------------------------------------------
|
||||||
if with_rx_analyzer:
|
if with_rx_analyzer:
|
||||||
analyzer_signals = [gtx.source]
|
analyzer_signals = [
|
||||||
|
gtx.source,
|
||||||
|
tseq_receiver.detected,
|
||||||
|
ts1_receiver.detected,
|
||||||
|
ts1_receiver.reset,
|
||||||
|
ts1_receiver.loopback,
|
||||||
|
ts1_receiver.scrambling,
|
||||||
|
]
|
||||||
self.submodules.rx_analyzer = LiteScopeAnalyzer(analyzer_signals, 4096, clock_domain="rx", csr_csv="rx_analyzer.csv")
|
self.submodules.rx_analyzer = LiteScopeAnalyzer(analyzer_signals, 4096, clock_domain="rx", csr_csv="rx_analyzer.csv")
|
||||||
self.add_csr("rx_analyzer")
|
self.add_csr("rx_analyzer")
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@ import time
|
|||||||
from litex import RemoteClient
|
from litex import RemoteClient
|
||||||
from litescope import LiteScopeAnalyzerDriver
|
from litescope import LiteScopeAnalyzerDriver
|
||||||
|
|
||||||
from usb3_pipe.common import TSEQ
|
from usb3_pipe.common import TSEQ, TS1
|
||||||
|
|
||||||
wb = RemoteClient()
|
wb = RemoteClient()
|
||||||
wb.open()
|
wb.open()
|
||||||
@ -14,6 +14,8 @@ wb.open()
|
|||||||
# # #
|
# # #
|
||||||
|
|
||||||
TSEQ_FIRST_WORD = int.from_bytes(TSEQ.to_bytes()[0:4], byteorder="little")
|
TSEQ_FIRST_WORD = int.from_bytes(TSEQ.to_bytes()[0:4], byteorder="little")
|
||||||
|
TS1_FIRST_WORD = int.from_bytes(TS1.to_bytes()[0:4], byteorder="little")
|
||||||
|
print("%08x" %TS1_FIRST_WORD)
|
||||||
|
|
||||||
# FPGA ID ------------------------------------------------------------------------------------------
|
# FPGA ID ------------------------------------------------------------------------------------------
|
||||||
fpga_id = ""
|
fpga_id = ""
|
||||||
@ -28,17 +30,22 @@ print("FPGA: " + fpga_id)
|
|||||||
wb.regs.gtx_rx_polarity.write(1)
|
wb.regs.gtx_rx_polarity.write(1)
|
||||||
wb.regs.gtx_tx_enable.write(1)
|
wb.regs.gtx_tx_enable.write(1)
|
||||||
while (wb.regs.gtx_tx_ready.read() == 0):
|
while (wb.regs.gtx_tx_ready.read() == 0):
|
||||||
pass
|
pass
|
||||||
wb.regs.gtx_rx_enable.write(1)
|
wb.regs.gtx_rx_enable.write(1)
|
||||||
while (wb.regs.gtx_rx_ready.read() == 0):
|
while (wb.regs.gtx_rx_ready.read() == 0):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
# Analyzer dump ------------------------------------------------------------------------------------
|
# Analyzer dump ------------------------------------------------------------------------------------
|
||||||
analyzer = LiteScopeAnalyzerDriver(wb.regs, "rx_analyzer", debug=True)
|
analyzer = LiteScopeAnalyzerDriver(wb.regs, "rx_analyzer", debug=True)
|
||||||
analyzer.configure_subsampler(1)
|
analyzer.configure_subsampler(1)
|
||||||
analyzer.configure_trigger(cond={
|
analyzer.configure_trigger(cond={
|
||||||
"soc_source_payload_ctrl": 1,
|
"soc_gtx0_source_payload_ctrl": 0b0001,
|
||||||
"soc_source_payload_data": TSEQ_FIRST_WORD})
|
"soc_gtx0_source_payload_data": TSEQ_FIRST_WORD})
|
||||||
|
analyzer.configure_trigger(cond={
|
||||||
|
"soc_gtx0_source_payload_ctrl": 0b1111,
|
||||||
|
"soc_gtx0_source_payload_data": TS1_FIRST_WORD})
|
||||||
|
#analyzer.configure_trigger(cond={"soc_tseq_receiver_detected": 1})
|
||||||
|
#analyzer.configure_trigger(cond={"soc_ts1_receiver_detected": 1})
|
||||||
analyzer.run(offset=32, length=4096)
|
analyzer.run(offset=32, length=4096)
|
||||||
analyzer.wait_done()
|
analyzer.wait_done()
|
||||||
analyzer.upload()
|
analyzer.upload()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user