[lowrisc-dev] Nexys debug communication [was: Multiple Rockets and Minions memory hierarchy]

Peter Stuge peter at stuge.se
Sat Jun 17 22:13:09 BST 2017

Stefan Wallentowitz wrote:
> > FT245 async mode yields 10-12 MByte/s throughput so it's slower than
> > sync, but it is reliable, and having a single connection to the board
> > for both programming and debugging would be convenient. As would not
> > needing to buy a separate interface board. :)
> Yes, that would be very desirable.

Ok - so that's still usable throughput? Then we should give this a go.

Another question up front is portability requirement. Obviously the
more portable the better, but just how important are Windows and macOS
in this equation? Both of them make things more complicated, but I think
there is still a solution to be had. (Is there Vivado for macOS at all?)

> > I am happy to write software to make debug communication over channel A
> > work in parallell with Vivado JTAG if there is interest. I can't do the
> > FPGA side FT245-style async interface however, so someone would have to
> > help me with that part. It seems to me that we could finish it in a
> > single day if we worked together.
> That would be awesome. I have limited bandwidth currently, but I think
> we can work it out between Cambridge and Munich to assist with the glip
> hardware side.

Great! I don't have an actual Nexys at the moment, and the first
thing to investigate would be whether Vivado cares about channel A.

For that I would like to ask for some help. I've attached a small
program claim.c, which uses libusb to claim one interface on an
attached device and then pauses. Build and run it on a Linux system.

By default, it claims the interface with bInterfaceNumber 0, this is
a guess since I don't have an FT2232H at hand. If lsusb -v output shows
channel A to have a different bInterfaceNumber, then that number can be
provided as a second parameter on the command line.

gcc -o claim claim.c $(pkg-config --cflags --libs libusb-1.0)

* Close Vivado

* Connect Nexys FT2232H USB to PC and power on the Nexys

* Run lsusb, note xxx and yyy in "Bus xxx Device yyy" line for the board

* Run ./claim xxx.yyy, possibly as root, expect output such as:
$ ./claim 1.4
looking for bus.addr 1.4 bInterfaceNumber 0
try libusb_init
try libusb_get_device_list
try libusb_open
try libusb_claim_interface
OK! Please try Vivado JTAG now. Press Enter to release and exit when done..

* Start Vivado

* Try using JTAG

=> If it works, great, then try pressing Enter in the claim program and
rerunning it again. It should still be able to claim the interface
immediately, without a "BUSY" message in between.

=> If it doesn't work, then Vivado wants to grab the whole device even
though it only needs one channel, and we may have to go to FT600.

When pressing Enter in claim, expect such output:
try libusb_release_interface
exit status 0

If claim ever exits with status 1, please send the full output.
Either in a reply directly to me or just to the list. Thanks!

> > If the async mode throughput is insufficient, or if Vivado is clumsy
> > and falls over when someone else uses channel A, then the next best
> > option seems to be a FT600 FMC board connected to the Nexys.
> That was indeed the case when I used Vivado. When channel A is used
> for serial communication, I couldn't use the ICE-JTAG.

How did you use channel A? Through libftdi[1], /dev/ttyUSB0 or another way?

I wonder what exactly Vivado tries to do in USB terms to access the JTAG.

The claim.c program will provide some information, but even if it
fails we can still look a little bit closer. Then I'd either use
strace or write a preload .so to see exactly what it tries to do.

> Alternatively we can use the FX3 superspeed board, which we support
> for some weeks now:
> https://github.com/TUM-LIS/glip/tree/master/src/backend_cypressfx3

The ZTEX boards look nice! :)

> > Unlike previous FTDI products, the FT600 actually uses USB very well. 
> > FTDI drivers are irrelevant, we would just use our own software,
> > which I would also be happy to write. The required effort is low.
> This would be highly appreciated. I have one of those for testing, too.
> I am happy to coordinate the hardware side again here. The FIFO
> interface at least in the spec seems simpler than in the FX3.

Sounds good. Which of the two FMC boards do you have? 16 or 32 bit?

Would it be useful to make FT600 work even if we get onboard FT2232H
to work? For higher bandwidth I guess yes.

> I didn't work with the board so far, but if you are confident that you
> can work it out using libusb, this would be an awesome alternative to
> the FX3, mostly because it doesn't even need an extra firmware.

I too like that the FT600 doesn't need firmware. I remember that software
support looked very straight forward when I looked at the documentation
last time. I'll order hardware and look at it again.

> > requirements, or wishlist
> The more the better ;)

Sure. :) I wanted to ask if the 10-12 MByte/s with FT2232H would be at all

> Looking forward to move this forward!

Me too. Glad that I can help.


More information about the lowrisc-dev mailing list