Xilinx ISE 10.1 on OpenSuSE 10.3 x86_64

Xilinx ISE 10.1 works pretty well on my OpenSuSE 10.3/x86_64 on Intel’s Core2Quad processor. However, I couldn’t compile the included Platform Cable USB driver, so I couldn’t program my FPGA cards. There’s a possible solution (with a non-proprietary driver) on a wiki page in University of Heiderberg, but it was a little bit old and written in German.
Here’s my solution with the non-proprietary driver (the master site of the driver is written in English! I didn’t know…) I took yesterday:
[ Step 1: Things to be installed by YaST ]
– libusb-devel (a library to handle USB devices)
– fxload (something to load firmware on some USB devices, including the Xilinx cable)
[ Step 2: get driver stuff ]
– Checkout the driver by: wget ‘http://git.zerfleddert.de/cgi-bin/gitweb.cgi/usb-driver?a=snapshot;h=HEAD’
– Official documentation at http://www.rmdir.de/~michael/xilinx/.
[ Step 3: setup udev ]
– Confirm that Platform Cable USB’s firmware exists at: YOUR_ISE_HOME/bin/lin64/xusbdfwu.hex (it must be, if you have a valid ISE installation)
– Edit /etc/udev/rules.d/xusbdfwu.rules. You may want to write /usr/share/xusbdfwu.hex to ISE_HOME/bin/lin64/xusbdfwu.hex.
SYSFS{idVendor}==”03fd”, SYSFS{idProduct}==”0008″, NAME=”windrvr6″
BUS==”usb”, ACTION==”add”, SYSFS{idVendor}==”03fd”,SYSFS{idProduct}==”0007″, RUN+=”/sbin/fxload -v -t fx2 -I /usr/share/xusbdfwu.hex -D $TEMPNODE”
BUS==”usb”, ACTION==”add”, SYSFS{idVendor}==”03fd”,SYSFS{idProduct}==”0009″, RUN+=”/sbin/fxload -v -t fx2 -I /usr/share/xusbdfwu.hex -D $TEMPNODE”
BUS==”usb”, ACTION==”add”, SYSFS{idVendor}==”03fd”,SYSFS{idProduct}==”000b”, RUN+=”/sbin/fxload -v -t fx2 -I /usr/share/xusbdfwu.hex -D $TEMPNODE”
BUS==”usb”, ACTION==”add”, SYSFS{idVendor}==”03fd”,SYSFS{idProduct}==”000d”, RUN+=”/sbin/fxload -v -t fx2 -I /usr/share/xusbdfwu.hex -D $TEMPNODE”
BUS==”usb”, ACTION==”add”, SYSFS{idVendor}==”03fd”,SYSFS{idProduct}==”000f”, RUN+=”/sbin/fxload -v -t fx2 -I /usr/share/xusbdfwu.hex -D $TEMPNODE”
ACTION==”add”, BUS==”usb”, SYSFS{idVendor}==”03fd”, MODE=”666″
– Restart udev, or reboot the Linux box to load the firmware. Once the firmware is loaded successfully, the status LED of the cable will light.
[ Step 3: build the driver ]
– Extract the driver you got from gitweb in step 2.
– just do: cd usb-driver; make lib, and you’ll get libusb-driver.so. This library emulates the driver (I don’t know how, but this is really great…). If you’re running 32bit Linux, you may have to run “make lib32” instead, but I’m not sure.
– Copy libusb-driver.so to anywhere you like.
[ Step 4: hack iMPACT to use the driver ]
– cd to YOUR_ISE_HOME/bin/lin64
– mv _impact _impact.bin
– vi _impact
#!/bin/sh
LD_PRELOAD=/YOUR_PATH/TO/LIBUSB_DRIVER_DOT_SO/libusb-driver.so $0.bin $*
– chmod a+x _impact
And try to launch “impact”. Then you’ll get connected!
[ Appendix: problems currently I have ]
– iMPACT fails to detect the cable when iMPACT is launched from ISE.
– Once iMPACT have failed to connect, I have to reboot my Linux box 🙁