多厂商 FPGA 工具链在 Ubuntu 上的共存方案

概述

在单台 Ubuntu 工作站上同时运行多套 FPGA 工具链,对于需要跨 Xilinx (AMD)、Altera (Intel) 和开源工具流的工程师来说是必不可少的。本指南涵盖 Vivado 2024.1、ModelSim 13.1、Verilator 和 Icarus Verilog 的并列安装与管理,并提供环境切换脚本以避免 PATH 和库冲突。

目录布局


/home/user/tools/
  xilinx/
    Vivado/2024.1/         # Vivado 安装目录
    docnav/                # 文档导航器
  altera/
    modelsim_ase/          # ModelSim Altera 入门版
  oss/
    verilator/             # 从源码构建
    iverilog/              # 从源码构建或 apt 安装

创建基础目录:


mkdir -p /home/user/tools/{xilinx,altera,oss}

安装 Vivado 2024.1

从 AMD 官网下载统一安装程序。安装程序为单个自解压二进制文件,解压后约 100 GB。


chmod +x FPGAs_AdaptiveSoCs_Unified_2024.1_0522_2023_Lin64.bin
sudo mkdir -p /home/user/tools/xilinx
sudo chown $USER:$USER /home/user/tools/xilinx
./FPGAs_AdaptiveSoCs_Unified_2024.1_0522_2023_Lin64.bin

安装时仅选择所需的器件(例如 Kintex-7、Artix-7、Zynq-7000),可节省约 40 GB 磁盘空间。

免费许可证(零费用,节点锁定)需通过 AMD 许可门户生成许可证文件,并将其放置在:


/home/user/tools/xilinx/Xilinx.lic

安装 ModelSim 13.1

ModelSim Altera 入门版是免费的,但有限制(10,000 行可执行代码)。商业用途请从 Siemens EDA 获取完整许可证。


# 假设安装包已下载
tar -xzf ModelSimSetup-13.1.0.162-linux.tar.gz -C /tmp/modelsim_installer/
cd /tmp/modelsim_installer/
./setup.sh
# 选择安装目标路径: /home/user/tools/altera/modelsim_ase

安装后,vsim 二进制文件在现代 Ubuntu(24.04+)上可能因缺少 32 位库和旧版 freetype 而启动失败。安装兼容性软件包:


sudo apt install libc6-i386 libx11-6:i386 libxext6:i386 libfreetype6:i386 \
                 libfontconfig1:i386 libxft2:i386 libncurses5:i386 \
                 libstdc++5:i386 libstdc++6:i386

安装开源仿真器

Verilator(速度快,面向 Lint 检查,仅支持可综合子集):

sudo apt install verilator
# 或从源码构建以获取最新功能:
git clone https://github.com/verilator/verilator.git /home/user/tools/oss/verilator_src
cd /home/user/tools/oss/verilator_src
autoconf && ./configure --prefix=/home/user/tools/oss/verilator
make -j$(nproc) && make install

Icarus Verilog(完整 Verilog-2005 支持,适合快速仿真):

sudo apt install iverilog gtkwave

环境切换脚本

多工具链共存的核心:模块化 shell 脚本,分别负责激活和停用每套工具链。将这些脚本放在 /home/user/tools/scripts/ 目录下。

基础脚本:env_base.sh


#!/bin/bash
# /home/user/tools/scripts/env_base.sh
# 声明关联数组,追踪每个模块设置的环境变量

declare -A _ENV_ORIG_PATH
declare -A _ENV_ORIG_LD
declare -A _ENV_ORIG_LICENSE

_env_save() {
_ENV_ORIG_PATH["$1"]="$PATH"
_ENV_ORIG_LD["$1"]="$LD_LIBRARY_PATH"
_ENV_ORIG_LICENSE["$1"]="$LM_LICENSE_FILE"
}

_env_restore() {
export PATH="${_ENV_ORIG_PATH[$1]}"
export LD_LIBRARY_PATH="${_ENV_ORIG_LD[$1]}"
export LM_LICENSE_FILE="${_ENV_ORIG_LICENSE[$1]}"
}

_env_prepend() {
# 用法: _env_prepend 变量名 值
local var="$1" val="$2"
if [ -z "${!var}" ]; then
export "$var"="$val"
else
export "$var"="$val:${!var}"
fi
}

Vivado 环境脚本:vivado_env.sh


#!/bin/bash
# /home/user/tools/scripts/vivado_env.sh
# 用法: source vivado_env.sh [on|off]

VIVADO_VER="2024.1"
VIVADO_HOME="/home/user/tools/xilinx/Vivado/${VIVADO_VER}"

if [ "$1" = "off" ]; then
source /home/user/tools/scripts/env_base.sh
_env_restore "vivado"
echo "[vivado_env] Vivado ${VIVADO_VER} 环境已停用"
return 0
fi

source /home/user/tools/scripts/env_base.sh
_env_save "vivado"

# 核心 PATH 条目
_env_prepend PATH "${VIVADO_HOME}/bin"
_env_prepend PATH "${VIVADO_HOME}/ids_lite/ISE/bin/lin64"

# Vivado 自带的 glibc 和 GCC 运行时库路径
_env_prepend LD_LIBRARY_PATH "${VIVADO_HOME}/lib/lnx64.o"
_env_prepend LD_LIBRARY_PATH "${VIVADO_HOME}/ids_lite/ISE/lib/lin64"

# 许可证文件(节点锁定许可)
export LM_LICENSE_FILE="/home/user/tools/xilinx/Xilinx.lic"

# 可选:强制 Vivado 使用自带库
# (缓解 Ubuntu 24.04 上的 glibc 不兼容问题)
export VIVADO_USE_SYSTEM_LIBS=0

echo "[vivado_env] Vivado ${VIVADO_VER} 已激活"
echo " vivado 路径: $(which vivado)"

ModelSim 环境脚本:modelsim_env.sh


#!/bin/bash
# /home/user/tools/scripts/modelsim_env.sh
# 用法: source modelsim_env.sh [on|off]

MODELSIM_HOME="/home/user/tools/altera/modelsim_ase"

if [ "$1" = "off" ]; then
source /home/user/tools/scripts/env_base.sh
_env_restore "modelsim"
echo "[modelsim_env] ModelSim 环境已停用"
return 0
fi

source /home/user/tools/scripts/env_base.sh
_env_save "modelsim"

_env_prepend PATH "${MODELSIM_HOME}/bin"
_env_prepend PATH "${MODELSIM_HOME}/linuxaloem"

# ModelSim 包含 32 位二进制文件,需要 32 位库路径
_env_prepend LD_LIBRARY_PATH "${MODELSIM_HOME}/linuxaloem"

# 商业版 ModelSim 的 FlexLM 许可证
export MGLS_LICENSE_FILE="/home/user/tools/altera/license.dat"
# 浮动许可证的写法:
# export MGLS_LICENSE_FILE="[email protected]"

# ModelSim 可能需要显式指定 32 位 vish 二进制路径
export MODEL_TECH="${MODELSIM_HOME}"

echo "[modelsim_env] ModelSim ${MODELSIM_HOME} 已激活"
echo " vsim 路径: $(which vsim)"

Verilator / Icarus Shell 别名


# /home/user/tools/scripts/oss_sim.sh
# 引入此脚本以激活开源仿真器

export VERILATOR_ROOT="/home/user/tools/oss/verilator"
_env_prepend PATH "${VERILATOR_ROOT}/bin"

# Icarus 通过系统安装,无需修改 PATH
# 但为方便使用添加 gtkwave 别名
alias gtkwave='gtkwave -W'
alias vvp='vvp -M /usr/lib/ivl'

echo "[oss_sim] Verilator $(verilator --version 2>&1 | head -1)"
echo "[oss_sim] Icarus $(iverilog -V 2>&1 | head -1)"

便捷包装脚本


#!/bin/bash
# /home/user/tools/scripts/fpga_env
# 统一调度器: fpga_env vivado|modelsim|oss|all|off

case "$1" in
vivado)
source /home/user/tools/scripts/vivado_env.sh on
;;
modelsim)
source /home/user/tools/scripts/modelsim_env.sh on
;;
oss)
source /home/user/tools/scripts/oss_sim.sh
;;
all)
source /home/user/tools/scripts/vivado_env.sh on
source /home/user/tools/scripts/modelsim_env.sh on
source /home/user/tools/scripts/oss_sim.sh
;;
off)
source /home/user/tools/scripts/vivado_env.sh off
source /home/user/tools/scripts/modelsim_env.sh off
;;
*)
echo "用法: source fpga_env {vivado|modelsim|oss|all|off}"
;;
esac

PATH 与 LD_LIBRARY_PATH 管理原则


   ldd $(which vivado) | grep "not found"
   

Ubuntu 24.04+ 上的 glibc 兼容性

Vivado 2024.1 自带 GCC 11.2 运行时,但有时会链接到系统的 glibc(libc.so.6)。Ubuntu 24.04 使用 glibc 2.39,可能触发:


/lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.38' not found

解决方案(按优先级排列):

   LD_PRELOAD=/lib/x86_64-linux-gnu/libfreetype.so.6 vivado
   

   sudo apt install debootstrap schroot
   sudo debootstrap jammy /home/user/tools/chroots/jammy
   # 然后在 chroot 中启动 Vivado
   

许可证设置

Xilinx 免费许可证(节点锁定)


   source /home/user/tools/scripts/vivado_env.sh on
   vivado -mode batch -source /dev/stdin <<< "puts [lmstat]; exit"
   

ModelSim 许可证


  vsim -c -do "vsim -version; quit"
  

glibc 版本速查表

Ubuntu 版本 glibc 版本 Vivado 2024.1 ModelSim 13.1
20.04 (Focal) 2.31 完全兼容 完全兼容
22.04 (Jammy) 2.35 兼容 兼容
24.04 (Noble) 2.39 需少量补丁 需 32 位库
26.04 (开发中) 2.41+ 建议使用 chroot 建议使用 chroot

验证所有工具链

引入环境脚本后,用以下快速检查验证:


# Vivado
vivado -version

# ModelSim
vsim -version # 或: vsim -c -do "quit"

# Verilator
verilator --version

# Icarus Verilog
iverilog -V
vvp -V

故障排查速查表

现象 可能原因 解决方案
vivado: command not found 未引入环境脚本 source vivado_env.sh on
vsim: error while loading shared libraries: libXft.so.2 缺少 32 位 X11 库 sudo apt install libxft2:i386
Vivado GUI 字体异常 Freetype 版本不匹配 LD_PRELOAD=/lib/x86_64-linux-gnu/libfreetype.so.6 vivado
Cannot connect to license server 许可证文件路径错误 检查 $LM_LICENSE_FILE$MGLS_LICENSE_FILE
Verilator %Error: Unsupported 使用了不可综合的语法结构 对该模块改用 Icarus 或 ModelSim
PATH 冲突(运行了错误的工具) 多个环境脚本同时激活 执行 source fpga_env off 后重新引入单一工具链

磁盘空间考虑

完整安装 Vivado 2024.1(所有器件)约占用 150 GB。按需选择器件(例如仅 7 系列),可减少到约 60 GB。


# 检查磁盘使用量
du -sh /home/user/tools/xilinx/Vivado/2024.1
du -sh /home/user/tools/altera/modelsim_ase
du -sh /home/user/tools/oss

自动补全钩子(可选)

将以下内容添加到 .bashrc 中,为 fpga_env 包装脚本启用 Tab 补全:


_fpga_env_complete() {
    local cur="${COMP_WORDS[COMP_CWORD]}"
    COMPREPLY=($(compgen -W "vivado modelsim oss all off" -- "$cur"))
}
complete -F _fpga_env_complete fpga_env

日常工作流示例


# 上午:启动 Vivado 综合会话
cd /home/user/work/FPGA_Prj/Project/WebServer
source /home/user/tools/scripts/vivado_env.sh  # 或: fpga_env vivado
vivado -mode batch -source build.tcl

# 下午:使用 Verilator 快速仿真
source fpga_env off # 清理 Vivado 环境
source fpga_env oss # 加载 Verilator + Icarus
cd /home/user/work/fpga_ila
verilator --lint-only -Wall top.v

# 晚上:使用 ModelSim 做签核仿真
source fpga_env off
source fpga_env modelsim
cd /home/user/work/ip_common/sim
vsim -c -do "run -all; quit" top_tb