• Stars
    star
    199
  • Rank 196,105 (Top 4 %)
  • Language Verilog
  • License
    BSD 2-Clause "Sim...
  • Created about 5 years ago
  • Updated over 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

USB3 PIPE interface for Xilinx 7-Series
                         __  _________  ____    ___  _______  ____
                        / / / / __/ _ )|_  /___/ _ \/  _/ _ \/ __/
                       / /_/ /\ \/ _  |/_ <___/ ___// // ___/ _/
                       \____/___/____/____/  /_/  /___/_/  /___/
                             Copyright (c) 2019-2022, EnjoyDigital
                                      Powered by LiteX

License

[> Intro

The aim of this project is to experiment with High Speed Transceivers (SERDES) of popular FPGAs to create a USB3.0 PIPE interface.

Current solutions for USB3 connectivity with an FPGA require the use of an external SerDes chip (TI TUSB1310A - SuperSpeed 5 Gbps USB 3.0 Transceiver with PIPE and ULPI Interfaces) or external FIFO chip (FTDI FT60X or Cypress FX3). With this project, we want to see if it's possible to just use the transceivers of the FPGA for the USB3 connectivity and have the USB3 PIPE directly implemented in the fabric (and then avoid any external chip!)

[> Targets

While we hope this wrapper will eventually support multiple protocols through the PIPE interface (such as PCIe, SATA, DisplayPort) it is currently targeting support for USB3.0 SuperSpeed when used with a customized Daisho USB3 core.

It currently targets Xilinx Kintex7 and Artix7.

[> Test Hardware

One of the following boards:

paired with the SFP2USB borrowed from XillyUSB project:

LiteX Acorn Baseboard + SFP2USB

or with the SFP2USBPCIsh-to-USB3.0 breakout board:

PCIsh-to-USB3.0

Note: Any 7-Series board with a SFP or PCIe connector with also be suitable but will require creating a platform/target file if not already supported in LiteX-Boards.

[> Toolchain

This project targets Xilinx Vivado for Kintex7 / Artix7 support. In the future, it should also be possible to use F4PGA toolchains to build the design.

[> Prerequisites

$ sudo apt install build-essential wget git python3-setuptools
$ git clone https://github.com/enjoy-digital/usb3_pipe/
$ cd usb3_pipe

[> Installing LiteX

Follow LiteX installation guide.

[> Installing Verilator

$ sudo apt install verilator
$ sudo apt install libevent-dev libjson-c-dev

[> Running the LiteX simulation

$ ./sim.py

You should see the USB3.0 initialization between a Host and Device:

[00000000] HOST entering Polling.LFPS state
[00000000] DEV  entering Polling.LFPS state
[00000000] HOST entering Polling.LFPS state
[00000000] DEV  entering Polling.LFPS state
[00026641] HOST entering Polling.RxEQ state
[00026641] DEV  entering Polling.RxEQ state
[01075207] HOST entering Polling.Active state
[01075207] DEV  entering Polling.Active state
[01075296] HOST entering Polling.Configuration state
[01075296] DEV  entering Polling.Configuration state
[01075423] HOST entering Polling.Idle state
[01075423] DEV  entering Polling.Idle state

At this point, all the steps of the USB3.0 PIPE initialization have succeeded and the USB3.0 Core can start transmitting packets.

To have a .vcd waveform of the simulation, run it with --trace:

$ ./sim.py --trace
$ gtkwave build/gateware/dut.vcd

[> Running on hardware

Build the FPGA bitstream

Once installed, build the bitstream with:

$ ./target.py --build (can be kc705 or acorn)

Prepare the hardware:

Hardware Setup

  • Put the SFP2USB module into the SFP cage of the board.
  • Connect the USB3.0 cable between the SFP2USB module and the computer.
  • Connect the JTAG programming cable to the FPGA board.
  • Power on the hardware

Load the FPGA bitstream

To load the bitstream to you board, run:

$ ./target.py --load

Verify USB3.0 link establishment

Once the FPGA is loaded, the link will be automatically established with the computer and an Openmoko, Inc USB3.0 device should be enumerated.

Note: Enumeration has only been done on a few hardware setups and there is still work in progress to improve reliability.

More Repositories

1

litex

Build your hardware, easily!
C
2,962
star
2

litepcie

Small footprint and configurable PCIe core
Python
476
star
3

litedram

Small footprint and configurable DRAM core
Python
378
star
4

liteeth

Small footprint and configurable Ethernet core
Python
212
star
5

litescope

Small footprint and configurable embedded FPGA logic analyzer
Python
169
star
6

pcie_screamer

PCIe Screamer - TLPs experiments...
C
164
star
7

litesata

Small footprint and configurable SATA core
Python
126
star
8

litesdcard

Small footprint and configurable SDCard core
Python
110
star
9

colorlite

Take control of your Colorlight FPGA board with LiteX/LiteEth :)
Python
95
star
10

daisho

Test of the USB3 IP Core from Daisho on a Xilinx device
Verilog
85
star
11

litex_m2sdr

LiteX based M2 SDR FPGA board.
C
58
star
12

litex-acorn-baseboard

LiteX development baseboards arround the SQRL Acorn.
Python
57
star
13

liteiclink

Small footprint and configurable Inter-Chip communication cores
Python
54
star
14

pcie_analyzer

PCIe analyzer experiments
Python
45
star
15

litejesd204b

Small footprint and configurable JESD204B core
Python
40
star
16

litex_vexriscv_smp_test

VexRiscv-SMP integration test with LiteX.
Verilog
24
star
17

xtrx_julia

XTRX LiteX/LitePCIe based design for Julia Computing
C
24
star
18

litex_rp2040_pmod_test

Test of a RP2040 PMOD attached to a LiteX SoC.
Python
24
star
19

thunderscope

LiteX based FPGA gateware for Thunderscope.
Python
22
star
20

litex_verilog_axi_test

Integration test of Verilog AXI modules (https://github.com/alexforencich/verilog-axi) with LiteX.
Python
15
star
21

litesata_axiom

Python
12
star
22

fk33_hbm2_test

HBM2 integration test on FK33 with LiteX
Python
9
star
23

litex_hw_ci

LiteX Hardware CI tests.
Python
8
star
24

litex_vexriscv_smp_usb_host_test

Integration test with SpinalHDL's OHCI USB Host core and LiteX/VexRiscv-SMP.
Python
7
star
25

litex_neorv32_test

NEORV32 integration test with LiteX
VHDL
6
star
26

litex_playground

Small LiteX related projects that have been or could be useful...
C
5
star
27

litex_soc_gen_test

Test of LiteX standalone SoC generator.
Python
5
star
28

litepcie_ptm_test

LitePCIe PTM support / test repo.
Python
5
star
29

tapcfg

tapcfg
C
5
star
30

litex_naxriscv_test

NaxRiscv integration test with LiteX
Python
4
star
31

litex_limesdr_mini_v2_test

LiteX alternative SoC/Gateware for the LimeSDR Mini 2.0
Python
3
star
32

litex_openwrt_test

Test of OpenWRT on LiteX SoCs.
C
3
star
33

betrusted_soc_power_tests

Python
3
star
34

vhdl2doc

JavaScript
3
star
35

litex_agilex5_test

Initial Test/Support of LiteX on Intel Agilex5 FPGAs.
Python
3
star
36

litex_mister_test

Simplification test of MiSTer with LiteX to try to help/contribute to MiSTeX project.
Verilog
2
star
37

mbd_poc

Python
1
star
38

litedram_halfrate

Python
1
star
39

acorn_pcie_compute_test

PCIe compute test on Acorn CLE 215+.
Python
1
star
40

litedram_ddr4_mig_phy_test

LiteDRAM Hybrid with DDR4 PHY
Python
1
star
41

litex_thunderscope_test

Test of LiteX component for ThunderScope project.
Python
1
star
42

litex_verilog_axis_test

Integration test of Verilog AXI Stream modules (https://github.com/alexforencich/verilog-axis) with LiteX.
Python
1
star
43

litex_xtrx

XTRX LiteX/LitePCIe based alternative Gateware/Software.
C++
1
star
44

litex_64bit_addressing_test

Test/PoC of 64-bit addressing in LiteX.
Python
1
star