Difference between revisions of "Xilinx ISE WebPACK"

From ArchWiki
Jump to: navigation, search
(Node-Locked Licenses)
(Dependencies: More deps)
 
(40 intermediate revisions by 19 users not shown)
Line 1: Line 1:
 
[[Category:Development]]
 
[[Category:Development]]
 
[[Category:Mathematics and science]]
 
[[Category:Mathematics and science]]
 +
[[ja:Xilinx ISE WebPACK]]
 +
{{Style|See in particular [[Help:Style#Command line text]].}}
 +
 
The Xilinx ISE WebPACK is a complete FPGA/CPLD programmable logic design suite providing:
 
The Xilinx ISE WebPACK is a complete FPGA/CPLD programmable logic design suite providing:
 
* Specification of programmable logic via schematic capture or Verilog/VHDL
 
* Specification of programmable logic via schematic capture or Verilog/VHDL
Line 6: Line 9:
 
* Functional (Behavioral) and Timing (post-Place & Route) simulation
 
* Functional (Behavioral) and Timing (post-Place & Route) simulation
 
* Download of configuration data into target device via communications cable
 
* Download of configuration data into target device via communications cable
 +
 +
The development of the ISE WebPACK has been stopped in favor of the [[Xilinx Vivado|Vivaldo Suite]], but it is still useful to develop for older devices not supported by the new suite.
  
 
While Arch Linux is not one of the officially supported distributions, many features are known to work on Arch Linux.
 
While Arch Linux is not one of the officially supported distributions, many features are known to work on Arch Linux.
  
 
== Prerequisites ==
 
== Prerequisites ==
 +
=== Download ISE WebPACK ===
 +
The Xilinx ISE WebPACK is a freeware software released under a proprietary license which does not allow redistribution. To obtain the install data visit [http://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/design-tools.html the official download page].
  
 
=== Dependencies ===
 
=== Dependencies ===
If you plan to develop software for an embedded ARM core (e.g. for Xilinx Zynq SoC devices), you will want to install the GCC cross-compiler bundled included with the Xilinx Embedded Development Kit (EDK). This compiler requires the {{Pkg|glibc}} and {{Pkg|ncurses}} packages. For i686 installations, these will most likely be already present.
+
Several tools included in the ISE Webpack (and the installer itself) depends on {{AUR|ncurses5-compat-libs}}. [https://forums.xilinx.com/t5/General-Technical-Discussion/Xilinx-issues-on-Linux/td-p/194576 Additionally] other tools (e.g. the FPGA editor) requires {{Pkg|libstdc++5}}, {{Pkg|openmotif}}, {{Pkg|xorg-fonts-75dpi}} and {{Pkg|xorg-fonts-100dpi}}.
  
If you are on a 64-bit Arch installation, you need to install them from the [[multilib]] repository ({{Pkg|lib32-glibc}} and {{Pkg|lib32-ncurses}}).
+
If you plan to develop software for an embedded ARM core (e.g. for Xilinx Zynq SoC devices), you will want to install the GCC cross-compiler bundled included with the Xilinx Embedded Development Kit (EDK). This compiler requires the {{Pkg|glibc}} and {{Pkg|ncurses}} packages. On 64-bit systems, you also need to install the 32-bit versions {{Pkg|lib32-glibc}} from the [[multilib]] repository and {{AUR|lib32-ncurses5-compat-libs}} from the [[AUR]].
  
 
=== Default Shell ===
 
=== Default Shell ===
During the installation, the Mentor CodeSourcery toolchains for embedded processors can be installed along with the Xilinx tools. This installation silently fails when the default shell is set to "dash". Make sure {{ic|/usr/bin/sh}} points to {{ic|/usr/bin/bash}}.
+
During the installation, the Mentor CodeSourcery toolchains for embedded processors can be installed along with the Xilinx tools. This installation silently fails when the default shell is set to [[dash]]. Make sure {{ic|/usr/bin/sh}} points to {{ic|/usr/bin/bash}}.
  
 
This can be checked by running this command:
 
This can be checked by running this command:
Line 24: Line 31:
 
If the output looks like this:
 
If the output looks like this:
 
  {{ic|lrwxrwxrwx 1 root root 15 13 Mar 06:47 /usr/bin/sh -> bash}}
 
  {{ic|lrwxrwxrwx 1 root root 15 13 Mar 06:47 /usr/bin/sh -> bash}}
then {{ic|/usr/bin/sh}} already points to {{ic|/usr/bin/bash}} (the default in Arch Linux).
+
then {{ic|/usr/bin/sh}} already points to {{ic|/usr/bin/bash}}. (the default in Arch Linux).
  
If not, run the following commands as root:
+
If not, link {{ic|/usr/bin/sh}} to bash:
$ rm /usr/bin/sh
+
  # ln -sfT bash /usr/bin/sh
  $ ln -s bash /usr/bin/sh
+
  
 
== Installation ==
 
== Installation ==
{{Note|The installation is last known to work with Xilinx ISE 14.6, requiring the dynamic library fix described below.}}
+
=== Install from AUR ===
 +
Install the package {{AUR|xilinx-ise}}, you will have to place the tarball with the installation data in the same folder of the {{ic|PKGBUILD}} before starting the building process.
  
The ISE Design Tools can be downloaded from [http://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/design-tools.html the official download page]. It requires registration and licensing agreement, but there is no charge, i.e. it's free as in "free beer", but not free as in "free speech".
+
=== Manual installation ===
 +
{{Note|The installation is last known to work with Xilinx ISE 14.7, requiring the dynamic library fix described below.}}
  
Once the tarballs has been downloaded, unpack it:
+
Extract the tarball containing the installation data:
  $ tar -xvf Xilinx_ISE_DS_14.6_P.68d_3.tar
+
  $ tar -xvf Xilinx_ISE_DS_Lin_14.7_1015_1.tar
  
 
The ISE design tools installer is a Qt application. If you are running the KDE desktop environment, the installer may try to load the "Oxygen" widget theme, which will fail due to the older Qt framework bundled with the Xilinx ISE design tools. You need to remove the {{ic|QT_PLUGIN_PATH}} environment variable before executing the installer:
 
The ISE design tools installer is a Qt application. If you are running the KDE desktop environment, the installer may try to load the "Oxygen" widget theme, which will fail due to the older Qt framework bundled with the Xilinx ISE design tools. You need to remove the {{ic|QT_PLUGIN_PATH}} environment variable before executing the installer:
Line 42: Line 50:
  
 
Then, install the ISE Design Tools:
 
Then, install the ISE Design Tools:
  $ cd Xilinx_ISE_DS_14.6_P.68d_3
+
  $ cd Xilinx_ISE_DS_Lin_14.7_1015_1
 
  $ ./xsetup
 
  $ ./xsetup
  
Line 50: Line 58:
  
 
=== Launching the ISE design tools ===
 
=== Launching the ISE design tools ===
The ISE design tools include a shell script that modifies the environment variables (mostly PATH and LD_LIBRARY_PATH). This script must be sourced before starting the ISE tools:
+
The ISE design tools include a shell script that modifies the environment variables (mostly {{ic|PATH}} and {{ic|LD_LIBRARY_PATH}}). This script must be sourced before starting the ISE tools:
  $ source /opt/Xilinx/14.6/ISE_DS/settings64.sh
+
  $ source /opt/Xilinx/14.7/ISE_DS/settings64.sh
 
or, for a 32-bit installation:
 
or, for a 32-bit installation:
  $ source /opt/Xilinx/14.6/ISE_DS/settings32.sh
+
  $ source /opt/Xilinx/14.7/ISE_DS/settings32.sh
  
Then, the ISE design tools will be found in your PATH and can be started by typing their name in the terminal (e.g. {{ic|ise}}, {{ic|planAhead}}, {{ic|xsdk}}, ...)
+
Then, the ISE design tools will be found in your {{ic|PATH}} and can be started by typing their name in the terminal (e.g. {{ic|ise}}, {{ic|planAhead}}, {{ic|xsdk}}, ...)
 +
 
 +
==== Launching via desktop icons ====
 +
You can also create a [[Desktop_entries|desktop entry]] at {{ic|/usr/share/applications/}}
 +
 
 +
{{hc|/usr/share/applications/ise.desktop|2=
 +
#!/usr/bin/env xdg-open
 +
[Desktop Entry]
 +
Version=1.0
 +
Type=Application
 +
Name=Xilinx ISE
 +
Exec=sh -c "unset LANG && unset QT_PLUGIN_PATH && source /opt/Xilinx/14.7/ISE_DS/settings64.sh && ise"
 +
Icon=/opt/Xilinx/14.7/ISE_DS/ISE/data/images/pn-ise.png
 +
Categories=Development;
 +
Comment=Xilinx ISE
 +
StartupWMClass=_pn
 +
}}
 +
 
 +
After that you can copy this file to the {{ic|~/Desktop}} folder and launch ISE tools from the desktop.
  
 
=== License Installation ===
 
=== License Installation ===
 
After requesting a WebPACK license from Xilinx using their [http://www.xilinx.com/getlicense/ Licensing Site], you will be e-mailed a license file. This file can be imported with the Xilinx License Manager (run {{ic|xlcm -manage}} from the terminal).
 
After requesting a WebPACK license from Xilinx using their [http://www.xilinx.com/getlicense/ Licensing Site], you will be e-mailed a license file. This file can be imported with the Xilinx License Manager (run {{ic|xlcm -manage}} from the terminal).
  
Another way to import the license is to simply copy it to the {{ic|~/.Xilinx}} directory.
+
Another way to import the license is to simply copy it to the {{ic|~/.Xilinx}} or {{ic|/opt/Xilinx/14.7/ISE_DS/ISE/coregen/core_licenses}} directory.
  
 
=== Node-Locked Licenses ===
 
=== Node-Locked Licenses ===
Arch Linux by default uses systemd's [[Network_Configuration#Device_names|Predictable Network Interface Names]]. This means that your system will most likely not have its network interfaces named "eth0", "eth1" and so forth.
+
Arch Linux by default uses systemd's [[Network configuration#Device_names|Predictable Network Interface Names]]. This means that your system will most likely not have its network interfaces named "eth0", "eth1" and so forth.
  
However, the Xilinx License Manager looks for these names to find out the system's MAC addresses, which are used for node-locked licenses. If you require node-locked licenses, unfortunately but you have to disable this feature to re-gain the kernel naming scheme for network interfaces and fix the name of NIC that you obtained your license.
+
However, the Xilinx License Manager looks for these names to find out the system's MAC addresses, which are used for node-locked licenses. If you want to use node-locked licenses, you will have to manually assign to your interface a name in the format expected by the License Manager. The [[Network_configuration#Change_device_name|change device name]] article subsection explain how to write an [[udev]] rule to do so.
The code below will be your help:
+
 
+
# echo 'SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="xx:xx:xx:xx:xx:xx", NAME="eth1"' > /etc/udev/rules.d/10-net-naming.rules
+
 
+
For more specific, reffer the page [http://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames systemd wiki] describes how to work and what you have other(formal) ways.
+
  
 
== Post-Installation Fixes and Tweaks ==
 
== Post-Installation Fixes and Tweaks ==
Line 76: Line 97:
  
 
=== Dynamic Library Fix (libstdc++.so) ===
 
=== Dynamic Library Fix (libstdc++.so) ===
The ISE tools supply an outdated version of the libstdc++.so library, which may cause segfaults when using the Xilinx Microprocessor Debugger and prevents the usage of the oxygen-gtk theme. This outdated version is located in two directories within the installation tree: {{ic|/opt/Xilinx/14.6/ISE_DS/ISE/lib/lin64/}} and {{ic|/opt/Xilinx/14.6/ISE_DS/common/lib/lin64}}. To use Arch's newer version of libstdc++, rename or delete the original files and replace them with symlinks:
+
{{Note|This workaround is already applied in the AUR package}}
  # cd /opt/Xilinx/14.6/ISE_DS/ISE/lib/lin64/
+
 
  # mv libstdc++.so libstdc++.so-orig
+
The ISE tools supply an outdated version of the libstdc++.so library, which may cause segfaults when using the Xilinx Microprocessor Debugger and prevents the usage of the oxygen-gtk theme. This outdated version is located in two directories within the installation tree: {{ic|/opt/Xilinx/14.7/ISE_DS/ISE/lib/lin64/}} and {{ic|/opt/Xilinx/14.7/ISE_DS/common/lib/lin64}}. To use Arch's newer version of libstdc++, rename or delete the original files and replace them with symlinks:
  # mv libstdc++.so.6 libstdc++.so.6-orig
+
  $ cd /opt/Xilinx/14.7/ISE_DS/ISE/lib/lin64/
  # mv libstdc++.so.6.0.8 libstdc++.so.6.0.8-orig
+
  $ mv libstdc++.so libstdc++.so.bak
  # ln -s /usr/lib/libstdc++.so
+
  $ mv libstdc++.so.6 libstdc++.so.6.bak
  # ln -s libstdc++.so libstdc++.so.6
+
  $ mv libstdc++.so.6.0.8 libstdc++.so.6.0.8.bak
  # ln -s libstdc++.so libstdc++.so.6.0.8
+
  $ ln -s /usr/lib/libstdc++.so
 +
  $ ln -s libstdc++.so libstdc++.so.6
 +
  $ ln -s libstdc++.so libstdc++.so.6.0.8
  
Then, repeat this process in the {{ic|/opt/Xilinx/14.6/ISE_DS/common/lib/lin64}} directory.
+
Then, repeat this process in the {{ic|/opt/Xilinx/14.7/ISE_DS/common/lib/lin64}} directory.
  
 
=== Digilent USB-JTAG Drivers ===
 
=== Digilent USB-JTAG Drivers ===
To use Digilent Adept USB-JTAG adapters (e.g. the onboard JTAG adapter on the [http://www.zedboard.org ZedBoard]) from within the Xilinx design tools, you need to install the Digilent [http://www.digilentinc.com/Products/Detail.cfm?Prod=ADEPT2 Adept Runtime] and [http://www.digilentinc.com/Products/Detail.cfm?Prod=DIGILENT-PLUGIN Plugin].  
+
To use Digilent Adept USB-JTAG adapters (e.g. the onboard JTAG adapter on the [http://www.zedboard.org ZedBoard]) from within the Xilinx design tools, you need to install the Digilent [http://store.digilentinc.com/digilent-adept-2-download-only/ Adept Runtime] and [http://store.digilentinc.com/digilent-plugin-for-xilinx-tools-download-only/ Plugin].  
  
 
Make sure you have installed {{AUR|fxload}}  from the [[Arch User Repository]] .  
 
Make sure you have installed {{AUR|fxload}}  from the [[Arch User Repository]] .  
  
To install the Digilent Adept Runtime, it is recommended to build and install {{AUR|adept-runtime-xilinx}} and its dependencies {{AUR|libftd2xx-digilent}} and {{AUR|usbdrv}} from the [[Arch User Repository]].
+
To install the Digilent Adept Runtime, it is recommended to install {{AUR|digilent.adept.runtime}} from the [[Arch User Repository]].
 +
 
 +
In addition, installing {{AUR|digilent.adept.utilities}} may do good to configuring your board.
  
 
To install the Digilent plugin, you have to copy two files to the ISE plugin directory. Run the following commands as root:
 
To install the Digilent plugin, you have to copy two files to the ISE plugin directory. Run the following commands as root:
  $ mkdir -p /opt/Xilinx/14.6/ISE_DS/ISE/lib/lin64/plugins/Digilent/libCseDigilent
+
  $ mkdir -p /opt/Xilinx/14.7/ISE_DS/ISE/lib/lin64/plugins/Digilent/libCseDigilent
  $ cd /opt/Xilinx/14.6/ISE_DS/ISE/bin/lin64/digilent/libCseDigilent_2.4.4-x86_64/lin64/14.1/libCseDigilent
+
  $ cd /opt/Xilinx/14.7/ISE_DS/ISE/bin/lin64/digilent/libCseDigilent_2.4.4-x86_64/lin64/14.1/libCseDigilent
  $ cp libCseDigilent.{so,xml} /opt/Xilinx/14.6/ISE_DS/ISE/lib/lin64/plugins/Digilent/libCseDigilent
+
  $ cp libCseDigilent.{so,xml} /opt/Xilinx/14.7/ISE_DS/ISE/lib/lin64/plugins/Digilent/libCseDigilent
  $ chmod -x /opt/Xilinx/14.6/ISE_DS/ISE/lib/lin64/plugins/Digilent/libCseDigilent/libCseDigilent.xml
+
  $ chmod -x /opt/Xilinx/14.7/ISE_DS/ISE/lib/lin64/plugins/Digilent/libCseDigilent/libCseDigilent.xml
  
  
Line 104: Line 129:
 
Finally, add every user that should have access to the Digilent USB-JTAG adapter to the "uucp" group.
 
Finally, add every user that should have access to the Digilent USB-JTAG adapter to the "uucp" group.
  
You may have to add the USB Vendor/Product IDs of your JTAG adapter which can be found with  
+
To grant access to the usb driver for normal users you may have to add the USB Vendor/Product IDs of your JTAG adapter which can be found with  
 
  $ lsusb | grep Xilinx
 
  $ lsusb | grep Xilinx
to the udev rules in {{ic|/etc/udev/rules.d/20-digilent.rules}}.
+
to the udev rules in {{ic|/etc/udev/rules.d/20-digilent.rules}}:
 +
SUBSYSTEM=="usb", ATTRS{idVendor}=="xxxx", ATTRS{idProduct}=="xxxx", GROUP="users", MODE="666"
  
 
If it still doesn't work, you can make further reading in [http://www.george-smart.co.uk/wiki/Xilinx_JTAG_Linux Xilinx_JTAG_Linux]. The magic git repo there may be help.
 
If it still doesn't work, you can make further reading in [http://www.george-smart.co.uk/wiki/Xilinx_JTAG_Linux Xilinx_JTAG_Linux]. The magic git repo there may be help.
 +
 +
=== Xilinx Platform Cable USB-JTAG Drivers ===
 +
 +
{{Accuracy|Building as root is dangerous!}}
 +
 +
Make sure you have installed {{AUR|fxload}} or {{AUR|fxload-libusb}} from the [[Arch User Repository]] .
 +
We need to build driver from source (git and some make stuff need to be installed, make will say what programs or libraries are missed):
 +
 +
$ cd /opt/Xilinx
 +
$ sudo git clone git://git.zerfleddert.de/usb-driver
 +
$ cd usb-driver/
 +
$ sudo make
 +
 +
If you using 32-bit version of ISE on 64-bit system, pass "lib32" to make:
 +
 +
$ sudo make lib32
 +
 +
And install driver (replace 14.7 to your version):
 +
 +
$ ./setup_pcusb /opt/Xilinx/14.7/ISE_DS/ISE/
 +
 +
Or in older versions:
 +
 +
$ ./setup_pcusb /opt/Xilinx/10.x/ISE/
 +
 +
For the new fxload version: {{AUR|fxload-libusb}}, the file /etc/udev/rules.d/xusbdfwu.rules needs to be changed to:
 +
 +
{{hc|$ /etc/udev/rules.d/xusbdfwu.rules|<nowiki>
 +
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="03fd", ATTRS{idProduct}=="0008", MODE="666"
 +
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="03fd", ATTRS{idProduct}=="0007", RUN+="/usr/bin/fxload-libusb -t fx2 -I /usr/share/xusbdfwu.hex -d 03fd:0007"
 +
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="03fd", ATTRS{idProduct}=="0009", RUN+="/usr/bin/fxload-libusb -t fx2 -I /usr/share/xusb_xup.hex -d 03fd:0009"
 +
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="03fd", ATTRS{idProduct}=="000d", RUN+="/usr/bin/fxload-libusb -t fx2 -I /usr/share/xusb_emb.hex -d 03fd:000d"
 +
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="03fd", ATTRS{idProduct}=="000f", RUN+="/usr/bin/fxload-libusb -t fx2 -I /usr/share/xusb_xlp.hex -d 03fd:000f"
 +
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="03fd", ATTRS{idProduct}=="0013", RUN+="/usr/bin/fxload-libusb -t fx2 -I /usr/share/xusb_xp2.hex -d 03fd:0013"
 +
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="03fd", ATTRS{idProduct}=="0015", RUN+="/usr/bin/fxload-libusb -t fx2 -I /usr/share/xusb_xse.hex -d 03fd:0015"
 +
</nowiki>}}
 +
 +
When performing this command, the udev rules file will be created. You can reload udev rules to apply changes immediately:
 +
 +
$ sudo udevadm control --reload-rules
 +
 +
If driver installed correctly and udev rule works, STATUS led should turn on (green or red depending on voltage presence on VREF PIN)
 +
 +
{{Note|This step is only required for versions of Xilinx ISE older than 11.1:
 +
 +
In older versions, iMPACT doesn't correctly load the right drivers (it still tries to use windrvr6 drivers). To fix this, the environment variable LD_PRELOAD must be set so that the libusb drivers are loaded into iMPACT without recompiling it.}}
 +
 +
$ export LD_PRELOAD=/opt/Xilinx/usb-driver/libusb-driver.so
  
 
=== Locale Issues ===
 
=== Locale Issues ===
Line 116: Line 190:
 
=== Segmentation Fault on PlanAhead ===
 
=== Segmentation Fault on PlanAhead ===
 
When launching PlanAhead to generate a .ucf file, a segmentation fault may occur. The issue seems unrelated to the previous topic. The ISE console will show
 
When launching PlanAhead to generate a .ucf file, a segmentation fault may occur. The issue seems unrelated to the previous topic. The ISE console will show
  "/opt/Xilinx/13.1/ISE_DS/PlanAhead/bin/rdiArgs.sh: line 64: 14275 Segmentation fault      $RDI_PROG $*"
+
  "/opt/Xilinx/14.7/ISE_DS/PlanAhead/bin/rdiArgs.sh: line 64: 14275 Segmentation fault      $RDI_PROG $*"
 
The problem seems to come from the bundled JRE as described [http://forums.xilinx.com/t5/Installation-and-Licensing/RHEL5-64-bit-ISE-13-1-PlanAhead-launch-from-w-in-ISE-fails/td-p/148624/page/2 here]. To fix the issue, symlink the OpenJDK libjvm.so into the Xilinx's installation directory.
 
The problem seems to come from the bundled JRE as described [http://forums.xilinx.com/t5/Installation-and-Licensing/RHEL5-64-bit-ISE-13-1-PlanAhead-launch-from-w-in-ISE-fails/td-p/148624/page/2 here]. To fix the issue, symlink the OpenJDK libjvm.so into the Xilinx's installation directory.
  # cd /opt/Xilinx/14.6/ISE_DS/PlanAhead/tps/lnx64/jre/lib/amd64/server
+
  # cd /opt/Xilinx/14.7/ISE_DS/PlanAhead/tps/lnx64/jre/lib/amd64/server
 
  # mv libjvm.so{,-orig}
 
  # mv libjvm.so{,-orig}
 
  # ln -s /usr/lib/jvm/java-7-openjdk/jre/lib/amd64/server/libjvm.so
 
  # ln -s /usr/lib/jvm/java-7-openjdk/jre/lib/amd64/server/libjvm.so
Line 136: Line 210:
  
 
  $ unset QT_PLUGIN_PATH
 
  $ unset QT_PLUGIN_PATH
 +
 +
=== CORE Generator fails to generate core ===
 +
In some cases, the CORE Generator will fails to generate a core and output something like this to its console:
 +
 +
ERROR:sim - Unable to evaluate Tcl file:
 +
    /opt/Xilinx/14.7/ISE_DS/ISE/coregen/ip/xilinx/primary/com/xilinx/ip/clk_wiz_v3_6/generate/run_legacy_tcl_flow.tcl
 +
ERROR:sim - Failed executing Tcl generator.
 +
 +
If that happens, make sure you don't have _JAVA_OPTIONS set in your environment. If you normally run coregen with
 +
 +
$ source /opt/Xilinx/14.7/ISE_DS/settings64.sh && coregen
 +
 +
you need to prepend that with an "unset _JAVA_OPTIONS":
 +
 +
$ unset _JAVA_OPTIONS && source /opt/Xilinx/14.7/ISE_DS/settings64.sh && coregen

Latest revision as of 18:26, 6 December 2016

Tango-edit-clear.pngThis article or section needs language, wiki syntax or style improvements.Tango-edit-clear.png

Reason: See in particular Help:Style#Command line text. (Discuss in Talk:Xilinx ISE WebPACK#)

The Xilinx ISE WebPACK is a complete FPGA/CPLD programmable logic design suite providing:

  • Specification of programmable logic via schematic capture or Verilog/VHDL
  • Synthesis and Place & Route of specified logic for various Xilinx FPGAs and CPLDs
  • Functional (Behavioral) and Timing (post-Place & Route) simulation
  • Download of configuration data into target device via communications cable

The development of the ISE WebPACK has been stopped in favor of the Vivaldo Suite, but it is still useful to develop for older devices not supported by the new suite.

While Arch Linux is not one of the officially supported distributions, many features are known to work on Arch Linux.

Prerequisites

Download ISE WebPACK

The Xilinx ISE WebPACK is a freeware software released under a proprietary license which does not allow redistribution. To obtain the install data visit the official download page.

Dependencies

Several tools included in the ISE Webpack (and the installer itself) depends on ncurses5-compat-libsAUR. Additionally other tools (e.g. the FPGA editor) requires libstdc++5, openmotif, xorg-fonts-75dpi and xorg-fonts-100dpi.

If you plan to develop software for an embedded ARM core (e.g. for Xilinx Zynq SoC devices), you will want to install the GCC cross-compiler bundled included with the Xilinx Embedded Development Kit (EDK). This compiler requires the glibc and ncurses packages. On 64-bit systems, you also need to install the 32-bit versions lib32-glibc from the multilib repository and lib32-ncurses5-compat-libsAUR from the AUR.

Default Shell

During the installation, the Mentor CodeSourcery toolchains for embedded processors can be installed along with the Xilinx tools. This installation silently fails when the default shell is set to dash. Make sure /usr/bin/sh points to /usr/bin/bash.

This can be checked by running this command:

$ ls -l /usr/bin/sh

If the output looks like this:

lrwxrwxrwx 1 root root 15 13 Mar 06:47 /usr/bin/sh -> bash

then /usr/bin/sh already points to /usr/bin/bash. (the default in Arch Linux).

If not, link /usr/bin/sh to bash:

# ln -sfT bash /usr/bin/sh

Installation

Install from AUR

Install the package xilinx-iseAUR, you will have to place the tarball with the installation data in the same folder of the PKGBUILD before starting the building process.

Manual installation

Note: The installation is last known to work with Xilinx ISE 14.7, requiring the dynamic library fix described below.

Extract the tarball containing the installation data:

$ tar -xvf Xilinx_ISE_DS_Lin_14.7_1015_1.tar

The ISE design tools installer is a Qt application. If you are running the KDE desktop environment, the installer may try to load the "Oxygen" widget theme, which will fail due to the older Qt framework bundled with the Xilinx ISE design tools. You need to remove the QT_PLUGIN_PATH environment variable before executing the installer:

$ unset QT_PLUGIN_PATH

Then, install the ISE Design Tools:

$ cd Xilinx_ISE_DS_Lin_14.7_1015_1
$ ./xsetup

Follow the instructions to install the ISE. By default, the whole application is installed to /opt/Xilinx/, so make sure the user running the installer has permissions to write to this directory.

During installation, uncheck the "Install Cable Drivers" option. Leaving it checked will cause errors during the installation.

Launching the ISE design tools

The ISE design tools include a shell script that modifies the environment variables (mostly PATH and LD_LIBRARY_PATH). This script must be sourced before starting the ISE tools:

$ source /opt/Xilinx/14.7/ISE_DS/settings64.sh

or, for a 32-bit installation:

$ source /opt/Xilinx/14.7/ISE_DS/settings32.sh

Then, the ISE design tools will be found in your PATH and can be started by typing their name in the terminal (e.g. ise, planAhead, xsdk, ...)

Launching via desktop icons

You can also create a desktop entry at /usr/share/applications/

/usr/share/applications/ise.desktop
#!/usr/bin/env xdg-open
[Desktop Entry]
Version=1.0
Type=Application
Name=Xilinx ISE
Exec=sh -c "unset LANG && unset QT_PLUGIN_PATH && source /opt/Xilinx/14.7/ISE_DS/settings64.sh && ise"
Icon=/opt/Xilinx/14.7/ISE_DS/ISE/data/images/pn-ise.png
Categories=Development;
Comment=Xilinx ISE
StartupWMClass=_pn

After that you can copy this file to the ~/Desktop folder and launch ISE tools from the desktop.

License Installation

After requesting a WebPACK license from Xilinx using their Licensing Site, you will be e-mailed a license file. This file can be imported with the Xilinx License Manager (run xlcm -manage from the terminal).

Another way to import the license is to simply copy it to the ~/.Xilinx or /opt/Xilinx/14.7/ISE_DS/ISE/coregen/core_licenses directory.

Node-Locked Licenses

Arch Linux by default uses systemd's Predictable Network Interface Names. This means that your system will most likely not have its network interfaces named "eth0", "eth1" and so forth.

However, the Xilinx License Manager looks for these names to find out the system's MAC addresses, which are used for node-locked licenses. If you want to use node-locked licenses, you will have to manually assign to your interface a name in the format expected by the License Manager. The change device name article subsection explain how to write an udev rule to do so.

Post-Installation Fixes and Tweaks

After installation, a few manual fixes are required to work around problems caused by running the Xilinx tools on a Linux distribution that is not officially supported by Xilinx. Some of these fixes are taken from this forum post.

Dynamic Library Fix (libstdc++.so)

Note: This workaround is already applied in the AUR package

The ISE tools supply an outdated version of the libstdc++.so library, which may cause segfaults when using the Xilinx Microprocessor Debugger and prevents the usage of the oxygen-gtk theme. This outdated version is located in two directories within the installation tree: /opt/Xilinx/14.7/ISE_DS/ISE/lib/lin64/ and /opt/Xilinx/14.7/ISE_DS/common/lib/lin64. To use Arch's newer version of libstdc++, rename or delete the original files and replace them with symlinks:

$ cd /opt/Xilinx/14.7/ISE_DS/ISE/lib/lin64/
$ mv libstdc++.so libstdc++.so.bak
$ mv libstdc++.so.6 libstdc++.so.6.bak
$ mv libstdc++.so.6.0.8 libstdc++.so.6.0.8.bak
$ ln -s /usr/lib/libstdc++.so
$ ln -s libstdc++.so libstdc++.so.6
$ ln -s libstdc++.so libstdc++.so.6.0.8

Then, repeat this process in the /opt/Xilinx/14.7/ISE_DS/common/lib/lin64 directory.

Digilent USB-JTAG Drivers

To use Digilent Adept USB-JTAG adapters (e.g. the onboard JTAG adapter on the ZedBoard) from within the Xilinx design tools, you need to install the Digilent Adept Runtime and Plugin.

Make sure you have installed fxloadAUR from the Arch User Repository .

To install the Digilent Adept Runtime, it is recommended to install digilent.adept.runtimeAUR from the Arch User Repository.

In addition, installing digilent.adept.utilitiesAUR may do good to configuring your board.

To install the Digilent plugin, you have to copy two files to the ISE plugin directory. Run the following commands as root:

$ mkdir -p /opt/Xilinx/14.7/ISE_DS/ISE/lib/lin64/plugins/Digilent/libCseDigilent
$ cd /opt/Xilinx/14.7/ISE_DS/ISE/bin/lin64/digilent/libCseDigilent_2.4.4-x86_64/lin64/14.1/libCseDigilent
$ cp libCseDigilent.{so,xml} /opt/Xilinx/14.7/ISE_DS/ISE/lib/lin64/plugins/Digilent/libCseDigilent
$ chmod -x /opt/Xilinx/14.7/ISE_DS/ISE/lib/lin64/plugins/Digilent/libCseDigilent/libCseDigilent.xml


Finally, add every user that should have access to the Digilent USB-JTAG adapter to the "uucp" group.

To grant access to the usb driver for normal users you may have to add the USB Vendor/Product IDs of your JTAG adapter which can be found with

$ lsusb | grep Xilinx

to the udev rules in /etc/udev/rules.d/20-digilent.rules:

SUBSYSTEM=="usb", ATTRS{idVendor}=="xxxx", ATTRS{idProduct}=="xxxx", GROUP="users", MODE="666"

If it still doesn't work, you can make further reading in Xilinx_JTAG_Linux. The magic git repo there may be help.

Xilinx Platform Cable USB-JTAG Drivers

Tango-inaccurate.pngThe factual accuracy of this article or section is disputed.Tango-inaccurate.png

Reason: Building as root is dangerous! (Discuss in Talk:Xilinx ISE WebPACK#)

Make sure you have installed fxloadAUR or fxload-libusbAUR from the Arch User Repository . We need to build driver from source (git and some make stuff need to be installed, make will say what programs or libraries are missed):

$ cd /opt/Xilinx
$ sudo git clone git://git.zerfleddert.de/usb-driver
$ cd usb-driver/
$ sudo make

If you using 32-bit version of ISE on 64-bit system, pass "lib32" to make:

$ sudo make lib32

And install driver (replace 14.7 to your version):

$ ./setup_pcusb /opt/Xilinx/14.7/ISE_DS/ISE/

Or in older versions:

$ ./setup_pcusb /opt/Xilinx/10.x/ISE/

For the new fxload version: fxload-libusbAUR, the file /etc/udev/rules.d/xusbdfwu.rules needs to be changed to:

$ /etc/udev/rules.d/xusbdfwu.rules
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="03fd", ATTRS{idProduct}=="0008", MODE="666"
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="03fd", ATTRS{idProduct}=="0007", RUN+="/usr/bin/fxload-libusb -t fx2 -I /usr/share/xusbdfwu.hex -d 03fd:0007"
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="03fd", ATTRS{idProduct}=="0009", RUN+="/usr/bin/fxload-libusb -t fx2 -I /usr/share/xusb_xup.hex -d 03fd:0009"
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="03fd", ATTRS{idProduct}=="000d", RUN+="/usr/bin/fxload-libusb -t fx2 -I /usr/share/xusb_emb.hex -d 03fd:000d"
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="03fd", ATTRS{idProduct}=="000f", RUN+="/usr/bin/fxload-libusb -t fx2 -I /usr/share/xusb_xlp.hex -d 03fd:000f"
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="03fd", ATTRS{idProduct}=="0013", RUN+="/usr/bin/fxload-libusb -t fx2 -I /usr/share/xusb_xp2.hex -d 03fd:0013"
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="03fd", ATTRS{idProduct}=="0015", RUN+="/usr/bin/fxload-libusb -t fx2 -I /usr/share/xusb_xse.hex -d 03fd:0015"

When performing this command, the udev rules file will be created. You can reload udev rules to apply changes immediately:

$ sudo udevadm control --reload-rules

If driver installed correctly and udev rule works, STATUS led should turn on (green or red depending on voltage presence on VREF PIN)

Note: This step is only required for versions of Xilinx ISE older than 11.1: In older versions, iMPACT doesn't correctly load the right drivers (it still tries to use windrvr6 drivers). To fix this, the environment variable LD_PRELOAD must be set so that the libusb drivers are loaded into iMPACT without recompiling it.
$ export LD_PRELOAD=/opt/Xilinx/usb-driver/libusb-driver.so

Locale Issues

PlanAhead doesn't like locales using other literals than '.' as the decimal point (e.g. German, which uses ','). Run the following command before launching PlanAhead:

$ unset LANG

Segmentation Fault on PlanAhead

When launching PlanAhead to generate a .ucf file, a segmentation fault may occur. The issue seems unrelated to the previous topic. The ISE console will show

"/opt/Xilinx/14.7/ISE_DS/PlanAhead/bin/rdiArgs.sh: line 64: 14275 Segmentation fault      $RDI_PROG $*"

The problem seems to come from the bundled JRE as described here. To fix the issue, symlink the OpenJDK libjvm.so into the Xilinx's installation directory.

# cd /opt/Xilinx/14.7/ISE_DS/PlanAhead/tps/lnx64/jre/lib/amd64/server
# mv libjvm.so{,-orig}
# ln -s /usr/lib/jvm/java-7-openjdk/jre/lib/amd64/server/libjvm.so

GNU make

XSDK looks for the gmake executable, which is not present in Arch Linux by default. Create a symlink somewhere in your path, e.g.

$ ln -s /usr/bin/make /home/<user>/bin/gmake

Make sure this directory is in your PATH variable.

Running Xilinx tools from within KDE

KDE by default defines the QT_PLUGIN_PATH shell variable. Some of the Xilinx ISE tools (ISE, Impact, XPS) are Qt applications, which means that they will search for Qt plugins in the locations defined by this shell variable.

Because the Xilinx tools are compiled against and ship with an older version of the Qt framework which cannot use these plugins, they will crash when launched with this environment variable present.

To fix this issue, run the following command before launching the tools:

$ unset QT_PLUGIN_PATH

CORE Generator fails to generate core

In some cases, the CORE Generator will fails to generate a core and output something like this to its console:

ERROR:sim - Unable to evaluate Tcl file:
   /opt/Xilinx/14.7/ISE_DS/ISE/coregen/ip/xilinx/primary/com/xilinx/ip/clk_wiz_v3_6/generate/run_legacy_tcl_flow.tcl
ERROR:sim - Failed executing Tcl generator.

If that happens, make sure you don't have _JAVA_OPTIONS set in your environment. If you normally run coregen with

$ source /opt/Xilinx/14.7/ISE_DS/settings64.sh && coregen

you need to prepend that with an "unset _JAVA_OPTIONS":

$ unset _JAVA_OPTIONS && source /opt/Xilinx/14.7/ISE_DS/settings64.sh && coregen