Regarding the L2 usb usage question, you could use the usb core for some other operations which may give you more room for manoeuvre see the following from the XUD library docs:
regardsDue to I/O requirements the library requires a guaranteed MIPS rate to ensure cor-
rect operation. This means that thread count restrictions are in place that depend
on the speed of the device. The USB thread must run at at least 80 MIPS, and the
threads that communicate with the USB thread must have a guaranteed 80 MIPS.
This means that for an XS1 running at 400MHz there should be no more than five
threads executing at any one time that USB is being used. For a 500MHz device no
more than 6 threads shall execute at any one time.
Al