usb3_pipe/tools/test_analyzer.py
2019-11-12 08:40:48 +01:00

92 lines
2.6 KiB
Python
Executable File

#!/usr/bin/env python3
import sys
import time
from litex import RemoteClient
from litescope import LiteScopeAnalyzerDriver
wb = RemoteClient()
wb.open()
# # #
def help():
print("Supported triggers:")
print(" - rx_polling")
print(" - tx_polling")
print("")
print(" - rx_tseq_first_word")
print(" - rx_tseq")
print(" - rx_ts1")
print(" - rx_ts2")
print(" - tx_ts2")
print("")
print(" - ready")
print(" - skip")
print("")
print(" - sink_ready")
print(" - source_valid")
print("")
print(" - now")
exit()
if len(sys.argv) < 2:
help()
if len(sys.argv) < 3:
length = 4096
else:
length = int(sys.argv[2])
# FPGA ID ------------------------------------------------------------------------------------------
fpga_id = ""
for i in range(256):
c = chr(wb.read(wb.bases.identifier_mem + 4*i) & 0xff)
fpga_id += c
if c == "\0":
break
print("FPGA: " + fpga_id)
# Analyzer dump ------------------------------------------------------------------------------------
analyzer = LiteScopeAnalyzerDriver(wb.regs, "analyzer", debug=True)
if sys.argv[1] == "rx_polling":
analyzer.add_rising_edge_trigger("soc_usb3_pipe_rx_polling")
elif sys.argv[1] == "tx_polling":
analyzer.add_rising_edge_trigger("soc_usb3_pipe_tx_polling")
elif sys.argv[1] == "rx_tseq_first_word":
from usb3_pipe.common import TSEQ
TSEQ_FIRST_WORD = int.from_bytes(TSEQ.to_bytes()[0:4], byteorder="little")
analyzer.configure_trigger(cond={
"soc_usb3_serdes_source_source_valid" : 1,
"soc_usb3_serdes_source_source_payload_data": TSEQ_FIRST_WORD})
elif sys.argv[1] == "rx_tseq":
analyzer.add_rising_edge_trigger("soc_usb3_pipe_rx_tseq")
elif sys.argv[1] == "rx_ts1":
analyzer.add_rising_edge_trigger("soc_usb3_pipe_rx_ts1")
elif sys.argv[1] == "rx_ts2":
analyzer.add_rising_edge_trigger("soc_usb3_pipe_rx_ts2")
elif sys.argv[1] == "tx_ts2":
analyzer.add_rising_edge_trigger("soc_usb3_pipe_tx_ts2")
elif sys.argv[1] == "ready":
analyzer.add_rising_edge_trigger("soc_usb3_pipe_ready")
elif sys.argv[1] == "skip":
analyzer.add_rising_edge_trigger("soc_usb3_serdes_rx_skip")
elif sys.argv[1] == "sink_ready":
analyzer.add_rising_edge_trigger("soc_usb3_pipe_sink_ready")
elif sys.argv[1] == "source_valid":
analyzer.add_rising_edge_trigger("soc_usb3_pipe_source_valid")
elif sys.argv[1] == "now":
analyzer.configure_trigger(cond={})
else:
raise ValueError
analyzer.configure_trigger(cond={})
analyzer.run(offset=32, length=length)
analyzer.wait_done()
analyzer.upload()
analyzer.save("analyzer.vcd")
# # #
wb.close()