mirror of
https://github.com/enjoy-digital/usb3_pipe.git
synced 2025-01-04 10:18:41 +08:00
219 lines
7.7 KiB
Plaintext
219 lines
7.7 KiB
Plaintext
|
|
|
|
USB 3.0 Device Controller Core
|
|
------------------------------
|
|
|
|
Copyright (c) 2012-2014 Marshall H. All rights reserved.
|
|
Code in this folder is released under the terms of the simplified BSD license.
|
|
See LICENSE.TXT for details.
|
|
|
|
Part of the Daisho project, by Michael Ossmann. http://greatscottgadgets.com/
|
|
|
|
|
|
Revision 0.1, 06/01/14
|
|
--------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
Overview
|
|
--------
|
|
|
|
This is a device-side controller. This means you can use it to implement a
|
|
device talking to a host, whether it be a PC, smartphone, embedded platform...
|
|
|
|
The controller supports both USB 3.0 (5.0Gbps) and USB 2.0 (480Mbps) operation.
|
|
During enumeration if a SuperSpeed receiver is not detected, it will fall
|
|
back to 2.0 operation.
|
|
|
|
Written in Verilog-2001, it aims to be somewhat easily adaptable to other
|
|
devices. It handles PHY strapping and initialization, LFPS with partner, link
|
|
training and receiver equalization, link layer data scrambling, elastic buffer
|
|
management, device enumeration, and block data transfer.
|
|
|
|
If you don't know anything about USB, you will have a rough time. If you have
|
|
no experience with FPGAs, you will suffer even more. Read the USB 2.0 spec
|
|
overview, then read about USB 3.0 functionality and how they are incorporated
|
|
into each other. Be familiar with the PHY you will use.
|
|
|
|
|
|
|
|
Capabilities
|
|
------------
|
|
|
|
The following transfer modes are supported in USB 2.0:
|
|
- Control (intrinsic)
|
|
- Bulk
|
|
- Interrupt
|
|
- Isochronous
|
|
|
|
And in USB 3.0 mode:
|
|
- Control, Link management
|
|
- Bulk
|
|
|
|
By default, both controllers implement one BULK IN and one BULK OUT endpoint
|
|
in addition to the default Endpoint0 for control transfers.
|
|
Additional endpoints may be added with some rework of the protocol layers.
|
|
|
|
Setting the endpoints to different transfer modes requires editing of the RTL
|
|
and also the device descriptors. Consult the USB specifications or your
|
|
favorite search engine for details on the descriptors.
|
|
|
|
|
|
|
|
Limitations
|
|
-----------
|
|
|
|
Does not implement the following USB 2.0 functionality:
|
|
- Power saving via SuspendM bit in ULPI
|
|
- Low speed (1.5Mbps) is unimplemented
|
|
- Full speed (11Mbps) is unsupported, but may work
|
|
|
|
Does not implement the following USB 3.0 functionality:
|
|
- Compliance testing mode
|
|
- Loopback BERT
|
|
- Assertion of disabled data scrambling
|
|
- Tolerance of link command glitches
|
|
- Stream transfer mode
|
|
|
|
Details:
|
|
1. USB devices operating via the 2.0 connection should enter suspend when
|
|
not transmitting any data on the bus for over 3.0ms. After a total of 10ms
|
|
have passed, it may not draw more than the rated suspend-mode
|
|
current instead of the normal current draw.
|
|
This is normally entered when the host stops sending StartOfFrame packets
|
|
and allows this idle condition. Due to the target platform's fixed current
|
|
draw this is not an option that can be supported.
|
|
2. For compliance testing, the USB 3.0 LTSSM should support a special
|
|
Compliance state that is entered under certain conditions detailed in the
|
|
USB specification, for PHY characterization. This mode is not implemented.
|
|
3. Also, USB 3.0 Loopback mode is used for benchmarking the bit error rate of
|
|
a connection. As this is not used under normal operation, it is omitted to
|
|
save device resources.
|
|
4. During link training, one partner may choose to signal it wishes to disable
|
|
data scrambling. The other partner should signal its acknowledgement in the
|
|
next training sequence. This is supported but basically untested.
|
|
5. Per the specification, link commands (which are 4 consecutive, redundant
|
|
K-symbols) can have up to 1 invalid symbol and still be considered valid.
|
|
To simplify functionality the controller will simply ignore these and
|
|
cause a sequence error. Because the protocol is robust anyway, these will
|
|
at most cause a small performance blip in adverse environments (poor
|
|
cabling, bad connectors, etc)
|
|
6. Streams are unsupported, if you need them in your application you are
|
|
exceeding the expected use case
|
|
|
|
|
|
Implementation Results
|
|
----------------------
|
|
|
|
Logic utilization:
|
|
Approx. 1100 LEs for USB 2.0
|
|
Approx. 6300 LEs for USB 3.0
|
|
1 PLL
|
|
~40 DDR I/O
|
|
8-10Kbyte distributed block RAM (flexible)
|
|
|
|
Targeted PHY:
|
|
Texas Instruments TUSB1310A SuperSpeed PHY
|
|
|
|
Targeted FPGA:
|
|
Altera Cyclone IV EP4CE30 speed grade 8
|
|
|
|
Build system:
|
|
Altera Quartus II 13.1sp1
|
|
|
|
|
|
|
|
Porting Notes
|
|
-------------
|
|
|
|
This controller relies upon several vendor and family-specific features such as
|
|
PLLs, pipelined DDR I/O, distributed block RAM, and so on.
|
|
Altera calls these "Megafunctions" and they are denoted by "mf_*.v" filenames.
|
|
|
|
If you are going to port this to Xilinx, Lattice, silicon then you will want to
|
|
blow these away and use the vendor's equivalent tools to get the same result.
|
|
|
|
I would recommend that you download Quartus and use the Megawizard Plug-in
|
|
Manager to open these files so that you can see how they are supposed to work,
|
|
and how you would write wrappers for slightly different device functionality.
|
|
|
|
You're on your own here, this is not something I would recommend to an FPGA
|
|
newcomer (though arguably using this core itself is not trivial.)
|
|
|
|
|
|
|
|
Usage Considerations
|
|
--------------------
|
|
|
|
There are a number of design decisions and small things that may affect your
|
|
success using the code.
|
|
|
|
1. Device descriptors
|
|
When running the core with only USB 2.0, edit the device descriptors so that
|
|
the "bcdDevice" entry denotes 200h instead of 210h. The latter indicates the
|
|
device has latent SuperSpeed functionality.
|
|
And obviously, if you want to change the enumerated display name you'll want
|
|
to change these. They must always match the RTL endpoint configuration.
|
|
|
|
2. I/O constraints
|
|
It's your responsibility to constrain the top level I/O to meet your PCB
|
|
layout. Consult your PHY datasheet, and read FPGA vendor datasheets.
|
|
PIPE bus I/O is fast enough that timing driven synthesis is recommended
|
|
|
|
3. SSRX/TX polarity
|
|
The core can tell when the RX data pair has its polarity swapped and will
|
|
configure the PHY accordingly during link training. You can swap either TX
|
|
or RX pairs for more convenient PCB routing. Consult your PHY documentation.
|
|
|
|
4. Reset
|
|
To reset the core to its power-on state, assert reset for at least a few
|
|
hundred cycles (around 10 uS would be a safe bet.). Additionally, your PHY
|
|
chip may have its own requirements for this. Reset for whichever duration is
|
|
longest.
|
|
|
|
|
|
|
|
Troubleshooting
|
|
---------------
|
|
|
|
It's highly unlikely that things will work properly the first time. You would
|
|
be well advised to buy/lease/borrow a competent protocol analyzer. Units are
|
|
available from the major vendors, which include:
|
|
|
|
- Teledyne Lecroy
|
|
- Agilent
|
|
- Tektronix
|
|
- Total Phase
|
|
|
|
The Beagle 5000v2 from Total Phase was used for the core's development. It
|
|
runs about $5-6k. Additionally, the Lecroy Voyagyer M3x was used to test
|
|
compliance cases to identify rare problems.
|
|
Other vendors provide add-on packages for their higher end scopes, but if
|
|
you could afford those, you'd be licensing a USB core from DesignWare
|
|
anyhow. :)
|
|
If you have access to proper verification IP you'd probably want to test this
|
|
core against it. I welcome any changes that will make the core more robust.
|
|
|
|
If you have some knowledge of the protocols you can trigger on the RTL with
|
|
Chipscope, Signaltap, Reveal, et al. This will only give you a very narrow
|
|
window but it's better than nothing.
|
|
|
|
|
|
|
|
Contact
|
|
-------
|
|
|
|
I do not provide support! I will not answer STUPID questions or ones that
|
|
make it clear you are going to be wasting not only your own time but mine too.
|
|
|
|
Bugfixes are welcome if you can clearly demonstrate what is fixed and that no
|
|
regressions are caused.
|
|
|
|
If you successfully implement the core and ship a product I would appreciate
|
|
sending an email to let me know it worked.
|
|
|
|
usb3ipcore, at outlookdotcom
|
|
|
|
|
|
|
|
EOF |