
The data generator is a counter counting up and inserting the count into the FIFO. Flow control is incorporated into the data generator so that a continuous count is seen in the FIFO when reading it from the AXI slave interface. TLast generation causes packets of 1024 bytes (256 x 32 bits) to be inserted into the FIFO which correlates to 1K byte packets used for USB 3.0 bulk transfers. The AXI GPIO to enable the data generator is probably not required since throttling is incorporated. The Vivado system was tuned for performance by increasing the PL frequency to 300 MHz, the R5 frequency to 534 MHz, and setting the width of the AXI HPM0 LPD interface to 128 bits. The software running on MPSoC as a USB device is based on the mass storage example provided in the Vitis embedded software and is also available in the embedded software repository at GitHub. For this application, a mass storage protocol has a lot of overhead and complexity that is not required such that a vendor specific device class is more appropriate.

A vendor specific device class for USB 3.0 allows the USB host to perform large bulk transfers with the USB device after the enumeration.Ī USB communications device class (CDC) is another possible device class that was considered for this application.

As with the mass storage device class, it appears to have some complexity and protocol that is un-needed. The mass storage and CDC device classes are also very typical such that many USB hosts have installed drivers which will bind to the device which can require manual intervention for the test system. The mass storage example, along with all the other examples for the driver, are a bit complex for a newbie to USB due to minimal documentation. Performing a baseline of the example can be worthwhile to get ensure the hardware is working well.

The ZCU102 acts as the USB device emulating a mass storage device.
