3. 仿真环境搭建:Linux环境配置、EDA工具安装(VCS/Xcelium)、License管理、基础仿真脚本结构

说实话,很多刚入行的朋友觉得仿真环境搭建就是装个软件、配个路径。嗯,没那么简单。我见过太多项目因为环境问题浪费了一两周时间——不是License起不来,就是脚本路径写死了,换个机器就跑不了。

这一章,我把这些年踩过的坑、总结的经验,一次性讲清楚。

3.1 Linux环境配置——打好地基

EDA工具基本都跑在Linux上。我个人习惯用Red Hat Enterprise Linux 7或CentOS 7。为什么?因为主流EDA厂商(Synopsys、Cadence、Mentor)的官方支持列表里,RHEL 7/8覆盖率最高。

基础依赖包,一个都不能少:

# 基础开发工具
yum install -y gcc gcc-c++ make cmake
yum install -y glibc.i686 libstdc++.i686  # 32位兼容库,很多EDA工具需要

# 图形界面相关
yum install -y libXext libXft libXrender libXrandr libXinerama
yum install -y motif openmotif  # 老工具依赖

# 网络与License相关
yum install -y ntpdate lsof net-tools
yum install -y lsb-core  # LSB标准支持
⚠️ 注意: 我遇到过好几次,VCS安装时提示缺少某个库,结果一查是32位版本没装。建议直接装好所有32位兼容库,省得后面折腾。

Shell环境,我推荐用bash或tcsh。很多老工程师习惯用csh,但bash的脚本兼容性更好。我个人用bash,配合.bashrc里加几行:

# 设置语言环境,避免乱码
export LANG=en_US.UTF-8
export LC_ALL=C  # EDA工具对locale敏感,C最稳

# 设置文件打开数,仿真时文件句柄容易爆
ulimit -n 65535
ulimit -s unlimited  # 栈大小不限
💡 小技巧:ulimit -a检查当前限制。我见过仿真跑到一半报"Too many open files",就是这里没设好。

3.2 EDA工具安装——VCS与Xcelium

VCS是Synopsys家的,Xcelium是Cadence家的。两家工具我都用过,各有千秋。VCS编译速度快,Xcelium的调试功能更丰富。但安装流程大同小异。

VCS安装步骤(以2022.06版本为例):

# 1. 解压安装包
tar -xzvf vcs_vL-2022.06.tar.gz -C /opt/eda/synopsys/

# 2. 运行安装脚本
cd /opt/eda/synopsys/vcs_vL-2022.06
./installer -gui  # 图形界面安装,或者用 -silent 静默安装

# 3. 设置环境变量
export VCS_HOME=/opt/eda/synopsys/vcs_vL-2022.06
export PATH=$VCS_HOME/bin:$PATH
export VCS_ARCH_OVERRIDE=linux  # 指定架构

Xcelium安装(Cadence家的):

# 解压
tar -xzvf XCELIUM_20.09.tar.gz -C /opt/eda/cadence/

# 运行安装
cd /opt/eda/cadence/XCELIUM_20.09
./SETUP.SH

# 环境变量
export XCELIUM_HOME=/opt/eda/cadence/XCELIUM_20.09
export PATH=$XCELIUM_HOME/tools/bin:$PATH
export CDS_LIC_FILE=5280@license_server  # License指向
🔑 关键点: 安装路径不要有中文、不要有空格。我见过有人把工具装在/home/张三/EDA tools/,结果编译报各种奇怪错误。老老实实用/opt/eda//tools/

3.3 License管理——最头疼的部分

License管理,说白了就是让工具能认到你的授权。我刚开始做验证时,被License折腾了整整三天——工具装好了,一跑就说"License check failed"。

常见的License管理方式:

方式 说明 适用场景
浮动License(网络) 一台服务器运行lmgrd,客户端指向它 团队多人共享
节点锁定(本地) License绑定MAC地址 个人电脑或固定工作站
云License 通过云服务获取授权 云端仿真环境

浮动License配置示例:

# 在License服务器上
# 1. 启动License服务
lmgrd -c /opt/license/synopsys.dat -l /var/log/lmgrd.log

# 2. 检查状态
lmstat -a -c 5280@license_server

# 3. 客户端设置
export SNPSLMD_LICENSE_FILE=5280@license_server
export LM_LICENSE_FILE=5280@license_server
⚠️ 避坑指南: 我曾经遇到一个情况——License服务明明在跑,但VCS就是连不上。后来发现是防火墙把5280端口封了。检查一下firewall-cmd --list-ports,或者直接关掉防火墙测试。

常见License错误及解决:

  • "Cannot connect to license server" —— 检查网络、端口、防火墙
  • "License checkout timeout" —— License被占满,等一会儿或加feature
  • "Invalid host" —— MAC地址不匹配,重新生成License文件
  • "Feature expired" —— License过期了,联系供应商续期

3.4 基础仿真脚本结构——从零到跑通

有了工具和环境,接下来就是写仿真脚本。我见过很多新人一上来就写几百行的Makefile,结果跑不通。其实,一个基础的仿真脚本,核心就三步:编译、仿真、查看波形。

一个最简的VCS仿真脚本:

#!/bin/bash
# 文件名: run_vcs.sh

# 设置环境
export VCS_HOME=/opt/eda/synopsys/vcs_vL-2022.06
export PATH=$VCS_HOME/bin:$PATH

# 1. 编译
vcs -full64 -sverilog \
    -timescale=1ns/1ps \
    -f filelist.f \
    -l compile.log \
    -o simv

# 检查编译是否成功
if [ $? -ne 0 ]; then
    echo "Compilation failed!"
    exit 1
fi

# 2. 仿真
./simv -l sim.log \
       +vcs+lic+wait \
       +fsdb+autoflush

# 3. 查看波形(可选)
# verdi -ssf waveform.fsdb &

对应的Xcelium脚本:

#!/bin/bash
# 文件名: run_xcelium.sh

export XCELIUM_HOME=/opt/eda/cadence/XCELIUM_20.09
export PATH=$XCELIUM_HOME/tools/bin:$PATH

# 1. 编译
xmvlog -64bit -f filelist.f -l xmvlog.log
xmelab -64bit worklib.top_tb -l xmelab.log

# 2. 仿真
xmsim -64bit worklib.top_tb \
      -l xmsim.log \
      +access+rwc \
      +wave+waveform.shm

# 3. 查看波形
# simvision waveform.shm &
💡 个人经验: 我习惯在脚本开头加一个set -e,这样任何一步出错脚本就会自动停止,不会继续往下跑。省得编译失败了还去仿真,浪费时间。

filelist.f文件内容示例:

# 设计文件
./rtl/top.v
./rtl/sub_module.v
./rtl/memory.v

# 验证文件
./tb/top_tb.sv
./tb/driver.sv
./tb/monitor.sv

# 库文件
-y /opt/eda/synopsys/vcs_vL-2022.06/packages/sva +libext+.v
+incdir+./include

Makefile封装(推荐):

# 文件名: Makefile
TOOL ?= vcs  # 默认用VCS,可以改成xcelium

all: compile sim

compile:
ifeq ($(TOOL), vcs)
	./run_vcs.sh
else
	./run_xcelium.sh
endif

sim:
	./simv -l sim.log

clean:
	rm -rf simv* csrc *.log *.key *.vpd
	rm -rf xcelium.d xrun.history waves.shm

.PHONY: all compile sim clean
📌 核心原则: 仿真脚本要可重复、可移植。我见过有人把绝对路径写死在脚本里,换台机器就跑不了。用相对路径,用环境变量,用Makefile传参——这才是工程化的做法。

3.5 本章知识体系

下面这张图,把仿真环境搭建的核心逻辑串起来了:

仿真环境搭建核心知识体系 第1层:Linux基础环境 操作系统(RHEL/CentOS) 依赖库(32位兼容) Shell环境(bash/tcsh) 系统参数(ulimit) 第2层:EDA工具安装 VCS(Synopsys) Xcelium(Cadence) 环境变量配置 第3层:License管理 浮动License(lmgrd) 节点锁定(MAC绑定) 环境变量(LM_LICENSE) 故障排查 底层支撑:基础仿真脚本(编译→仿真→波形查看)

这三层是层层递进的关系。基础环境没配好,工具装不上;工具装好了,License搞不定,还是跑不了;最后脚本写不对,前面的功夫全白费。

嗯,这一章的内容就到这里。环境搭建是验证工作的第一步,也是最重要的一步。把这一步走稳了,后面的仿真工作才能顺利推进。


公众号:蓝海资料掘金营,微信deep3321