May 12, 2022

FPGA - Zedboard and Xilinx Vivado tutorials

I am going to try to work through the following tutorials and collect some of my own notes as I go along.

Setup

The unit needs 12 volt power. My unit came with a 12 volt 3 amp wall adapter that connects to the barrel connector on the board. The unit has a power switch next to the barrel connector.

Next a micro-USB cable is needed. There are 3 places where it could be plugged into the board. The connector next to the barrel connector is labeled "PROG" and that is what I used. (The other USB connectors are labeled UART and USB_OTG, we will ignore those for now.

For fun, I switch on the board and look at my unix logs. I see:

May 13 08:34:42 trona kernel: usb 3-1: new high-speed USB device number 19 using xhci_hcd
May 13 08:34:42 trona kernel: usb 3-1: New USB device found, idVendor=0403, idProduct=6014, bcdDevice= 9.00
May 13 08:34:42 trona kernel: usb 3-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
May 13 08:34:42 trona kernel: usb 3-1: Product: Digilent USB Device
May 13 08:34:42 trona kernel: usb 3-1: Manufacturer: Digilent
May 13 08:34:42 trona kernel: ftdi_sio 3-1:1.0: FTDI USB Serial Device converter detected
May 13 08:34:42 trona kernel: usb 3-1: Detected FT232H
May 13 08:34:42 trona kernel: usb 3-1: FTDI USB Serial Device converter now attached to ttyUSB0
May 13 08:34:42 trona kernel: ftdi_sio ttyUSB0: FTDI USB Serial Device converter now disconnected from ttyUSB0
May 13 08:34:42 trona kernel: ftdi_sio 3-1:1.0: device disconnected
It seems odd that we were recognized then almost immediately disconnected. For now that is a mystery.

Board files

Vivado and Vitis need "board files" for each board they are expected to deal with. These need to be installed for the Zedboard. I have Vivado 2021.2 installed on my linux system. I can badgered every time I log in about a newer version (2022.1) I could/should install, but I am putting that off so far.

The above "board file" guide discusses the Vivado install process, then gets into "cable drivers" for linux users.

Cable drivers

I just went through this for Xilinx ISE and it was ugly. I follow instructions, as follows:
cd /u1/Xilinx/Vivado/2021.2/data/xicom/cable_drivers/lin64/install_script/install_drivers
su
./install_drivers
This seemed to work just fine. It added the following files to /etc/udev/rules.d:
-rw-r--r-- 1 root root 3797 May 13 08:49 52-xilinx-digilent-usb.rules
-rw-r--r-- 1 tom  tom  3315 Oct 15  2021 52-xilinx-ftdi-usb.rules
-rw-r--r-- 1 tom  tom   435 Oct 15  2021 52-xilinx-pcusb.rules
-rw-r--r-- 1 root root 3848 May 12 18:01 52-digilent-usb.rules
(maybe not the last file, that may be from my ISE cable driver setup, but I don't think so). It tells me I need to unplug and replug my board for these to take effect.

Nothing seems to happen, but I know why. I have to tell the udev system to reload rules.
The following ought to do it, but I am not convinced that things are right.

udevadm control --reload-rules
udevadm trigger
I resorted to rebooting my system. Now when I plug the device in, I don't get a disconnect and it remains at /dev/ttyUSB0. Maybe that is proper.

Just for the record, some time ago I added the file 99-usbusers.rules to /etc/udev/rules.d with the following:

SUBSYSTEM=="usb", MODE="0666", GROUP="usbusers"
Since "tom" belongs to the usbusers group, this allows me to access any USB device without stupid permission hassles. Also note that "tom" also belongs to the dialout group, which is the method the digilent guide uses to solve this issue.

It turns out that everything now "just works". Using this setup, I have loaded and run FPGA designs from Vivado to both my Zynq and Zedboards.

The following link doesn't add anything particulary useful to what I already did, but here it is for reference.

Back to the board files

I download the zip file on the second link given above. Then I do this:
cd /u1/Xilinx/Vivado/2021.2/data/boards
mkdir board_files
cd /u1/Xilinix
unzip vivado-boards-master.zip
ls vivado-boards-master/new/board_files
The zip archive is well behaved and extracts into its own directory. Note that I am getting ALL the board files (including those for my Zybo). I ensured that there was no "board_files" directory already in /u1/Xilinx/Vivado/2021.2/data/boards, then I did:
cd vivado-boards-master/new
cp -var cp -var board_files /u1/Xilinx/Vivado/2021.2/data/boards
There is a directory for every Digilent board, so it is necessary to use the "-var" scheme to copy the entire structure.
Feedback? Questions? Drop me a line!

Tom's Computer Info / tom@mmto.org