Xilinx ISE WebPACK

出自 ArchWiki

此文章或章节需要语言、wiki 语法或风格方面的改进。请参阅 Help:Style 以供参考。

原因: 特别参见 Help:Style#命令行文本。(在 Talk:Xilinx ISE WebPACK 中讨论)

Xilinx ISE WebPACK 是一套完整的 FPGA/CPLD 可编程逻辑设计套件,提供

  • 通过原理图捕获或 Verilog/VHDL 规范可编程逻辑
  • 针对各种 Xilinx FPGA 和 CPLD 的指定逻辑进行综合和布局布线
  • 功能 (行为) 和时序 (布局布线后) 仿真
  • 通过通信电缆将配置数据下载到目标设备

ISE WebPACK 的开发已停止,转而支持 Vivado 套件,但它仍然可用于为新套件不支持的旧设备进行开发。

虽然 Arch Linux 不是官方支持的发行版之一,但已知许多功能在 Arch Linux 上可以工作。

先决条件

下载 ISE WebPACK

Xilinx ISE WebPACK 是一款免费软件,根据不允许再分发的专有许可证发布。要获取安装数据,请访问 官方下载页面

依赖

ISE Webpack 中包含的几个工具(以及安装程序本身)依赖于 ncurses5-compat-libsAUR此外,其他工具(例如 FPGA 编辑器)需要 libstdc++5AUR openmotif xorg-fonts-75dpi xorg-fonts-100dpi

如果您计划为嵌入式 ARM 内核(例如,用于 Xilinx Zynq SoC 设备)开发软件,您将需要安装 Xilinx Embedded Development Kit (EDK) 捆绑的 GCC 交叉编译器。此编译器需要 lib32-glibc 软件包(来自 multilib 仓库)和 lib32-ncurses5-compat-libsAUR

默认 Shell

在安装期间,可以将用于嵌入式处理器的 Mentor CodeSourcery 工具链与 Xilinx 工具一起安装。当默认 shell 设置为 dash 时,此安装将静默失败。确保 /usr/bin/sh 指向 /usr/bin/bash

可以通过运行以下命令来检查这一点

$ ls -l /usr/bin/sh

如果输出看起来像这样

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

/usr/bin/sh 已经指向 /usr/bin/bash。(Arch Linux 中的默认设置)。

如果不是,将 /usr/bin/sh 链接到 bash

# ln -sfT bash /usr/bin/sh

安装

从 AUR 安装

安装软件包 xilinx-iseAUR,您将必须在启动构建过程之前将包含安装数据的 tarball 放在 PKGBUILD 的同一文件夹中。

手动安装

注意: 据知,该安装最后一次在 Xilinx ISE 14.7 上工作,需要下面描述的动态库修复。

解压包含安装数据的 tarball

$ tar -xvf Xilinx_ISE_DS_Lin_14.7_1015_1.tar

ISE 设计工具安装程序是一个 Qt 应用程序。如果您正在运行 KDE 桌面环境,安装程序可能会尝试加载 “Oxygen” 小部件主题,由于 Xilinx ISE 设计工具捆绑的旧 Qt 框架,这将失败。您需要在执行安装程序之前删除 QT_PLUGIN_PATH 环境变量

$ unset QT_PLUGIN_PATH

然后,安装 ISE 设计工具

$ cd Xilinx_ISE_DS_Lin_14.7_1015_1
$ ./xsetup

按照说明安装 ISE。默认情况下,整个应用程序都安装到 /opt/Xilinx/,因此请确保运行安装程序的用户具有写入此目录的权限。

在安装过程中,取消选中 “Install Cable Drivers” 选项。选中它将在安装过程中导致错误。

启动 ISE 设计工具

ISE 设计工具包含一个 shell 脚本,用于修改环境变量(主要是 PATHLD_LIBRARY_PATH)。在启动 ISE 工具之前,必须先执行此脚本

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

然后,ISE 设计工具将在您的 PATH 中找到,并且可以通过在终端中键入它们的名称(例如 iseplanAheadxsdk 等)来启动。

通过桌面图标启动

您还可以在 /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

之后,您可以将此文件复制到 ~/Desktop 文件夹,并从桌面启动 ISE 工具。

许可证安装

在使用 Xilinx 的 许可站点 请求 WebPACK 许可证后,您将收到一封包含许可证文件的电子邮件。可以使用 Xilinx License Manager 导入此文件(从终端运行 xlcm -manage)。

导入许可证的另一种方法是简单地将其复制到 ~/.Xilinx/opt/Xilinx/14.7/ISE_DS/ISE/coregen/core_licenses 目录。

节点锁定许可证

Arch Linux 默认使用 systemd可预测网络接口名称。这意味着您的系统很可能不会将其网络接口命名为 eth0eth1 等。

但是,Xilinx License Manager 会查找这些名称以找出系统的 MAC 地址,这些地址用于 节点锁定许可证。如果您想使用节点锁定许可证,则必须手动为您的接口分配许可证管理器期望格式的名称。 网络配置#恢复到传统接口名称 解释了如何执行此操作。如果您的机器没有有线以太网适配器,则可以使用 systemddummy 内核模块创建一个具有正确 MAC 地址的虚拟以太网适配器。为此,创建以下内容

/etc/systemd/network/25-dummy.netdev
[Match]

[NetDev]
Name=eth0
Kind=dummy
MACAddress=00:11:22:33:44:55:66

然后,重启 systemd-networkd 服务。

安装后修复和调整

安装后,需要进行一些手动修复,以解决在非 Xilinx 官方支持的 Linux 发行版上运行 Xilinx 工具引起的问题。其中一些修复取自 此论坛帖子。[死链 2023-09-16 ⓘ]

动态库修复 (libstdc++.so)

注意: AUR 软件包中已应用此解决方法

ISE 工具提供了一个过时的 libstdc++.so 库版本,当使用 Xilinx Microprocessor Debugger 时可能会导致段错误,并阻止使用 oxygen-gtk 主题。这个过时的版本位于安装树中的两个目录中:/opt/Xilinx/14.7/ISE_DS/ISE/lib/lin64//opt/Xilinx/14.7/ISE_DS/common/lib/lin64。要使用 Arch 的较新版本的 libstdc++,请重命名或删除原始文件,并将其替换为符号链接

$ 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

然后,在 /opt/Xilinx/14.7/ISE_DS/common/lib/lin64 目录中重复此过程。

Digilent USB-JTAG 驱动程序

要从 Xilinx 设计工具中使用 Digilent Adept USB-JTAG 适配器(例如 ZedBoard 上的板载 JTAG 适配器),您需要安装 Digilent Adept RuntimePlugin

确保您已从 Arch 用户仓库 安装了 fxloadAUR

要安装 Digilent Adept Runtime,建议从 Arch 用户仓库 安装 digilent.adept.runtimeAUR

此外,安装 digilent.adept.utilitiesAUR 可能有助于配置您的板卡。

要安装 Digilent 插件,您必须将两个文件复制到 ISE 插件目录。以 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

最后,将每个应该访问 Digilent USB-JTAG 适配器的用户添加到 “uucp” 组。

要授予普通用户访问 USB 驱动程序的权限,您可能需要将 JTAG 适配器的 USB 供应商/产品 ID 添加到 /etc/udev/rules.d/20-digilent.rules 中的 udev 规则中,可以使用以下命令找到 ID

$ lsusb | grep Xilinx

/etc/udev/rules.d/20-digilent.rules 中的 udev 规则

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

如果仍然不起作用,您可以在 Xilinx_JTAG_Linux 中进一步阅读。那里的 magic git 仓库可能会有所帮助。

Xilinx Platform Cable USB-JTAG 驱动程序

确保您已从 Arch 用户仓库 安装了 fxloadAURfxload-libusbAUR。我们需要从源代码构建驱动程序(需要安装 git 和一些 make 工具,make 将说明缺少哪些程序或库)

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

如果您在 64 位系统上使用 32 位版本的 ISE,请将 “lib32” 传递给 make

$ make lib32

并安装驱动程序(将 14.7 替换为您的版本)

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

或在旧版本中

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

对于新的 fxload 版本:fxload-libusbAUR,需要将文件 /etc/udev/rules.d/xusbdfwu.rules 更改为

$ /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"

当执行此命令时,将创建 udev 规则文件。您可以重新加载 udev 规则以立即应用更改

# udevadm control --reload-rules

如果驱动程序安装正确并且 udev 规则有效,则 STATUS 指示灯应亮起(绿色或红色,具体取决于 VREF PIN 上的电压是否存在)

注意: 此步骤仅适用于早于 11.1 的 Xilinx ISE 版本:在旧版本中,iMPACT 无法正确加载正确的驱动程序(它仍然尝试使用 windrvr6 驱动程序)。为了解决这个问题,必须设置环境变量 LD_PRELOAD,以便将 libusb 驱动程序加载到 iMPACT 中,而无需重新编译它。
$ export LD_PRELOAD=/opt/Xilinx/usb-driver/libusb-driver.so

区域设置问题

PlanAhead 不喜欢使用除 “.” 以外的文字作为小数点的区域设置(例如,德语,它使用 “,”)。在启动 PlanAhead 之前运行以下命令

$ unset LANG

PlanAhead 上的段错误

当启动 PlanAhead 以生成 .ucf 文件时,可能会发生段错误。此问题似乎与前一个主题无关。ISE 控制台将显示

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

问题似乎源于捆绑的 JRE,如此处所述。 要解决此问题,请将 OpenJDK libjvm.so 符号链接到 Xilinx 的安装目录中。

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

记住!较新版本的 jre,例如 jre-openjdk-headless(版本 17)不适用(可能导致错误)

GNU make

XSDK 查找 gmake 可执行文件,该文件在 Arch Linux 中默认不存在。 在路径中的某个位置创建一个符号链接,例如:

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

确保此目录在您的 PATH 变量中。

从 KDE 中运行 Xilinx 工具

KDE 默认定义了 QT_PLUGIN_PATH 环境变量。 一些 Xilinx ISE 工具(ISE、Impact、XPS)是 Qt 应用程序,这意味着它们将在此环境变量定义的位置搜索 Qt 插件。

由于 Xilinx 工具是针对旧版本的 Qt 框架编译的并随附旧版本,而旧版本的 Qt 框架无法使用这些插件,因此在存在此环境变量的情况下启动时,它们将崩溃。

要解决此问题,请在启动工具之前运行以下命令

$ unset QT_PLUGIN_PATH

CORE Generator 生成内核失败

在某些情况下,CORE Generator 将无法生成内核,并在其控制台中输出类似以下内容

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.

解决方案 #1

如果发生这种情况,请确保您的环境中未设置 _JAVA_OPTIONS。 如果您通常使用以下命令运行 coregen:

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

您需要在前面加上 "unset _JAVA_OPTIONS"

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

解决方案 #2

解决方案 #1 不再有效,原因是:coregen 捆绑的 java 启动失败。 解决方法是强制使用 ISE 捆绑的 java6 而不是 java5。

备份旧版本

$ mv /opt/Xilinx/14.7/ISE_DS/ISE/java/lin64/jre/bin/java /opt/Xilinx/14.7/ISE_DS/ISE/java/lin64/jre/bin/java.old

添加指向 java6 的符号链接

$ ln -s /opt/Xilinx/14.7/ISE_DS/ISE/java6/lin64/jre/bin/java /opt/Xilinx/14.7/ISE_DS/ISE/java/lin64/jre/bin/java

解决方案 #3

如果以前的方法都失败了,请尝试运行 32 位版本的 coregen

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