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标准支持
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
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
3.5 本章知识体系
下面这张图,把仿真环境搭建的核心逻辑串起来了:
这三层是层层递进的关系。基础环境没配好,工具装不上;工具装好了,License搞不定,还是跑不了;最后脚本写不对,前面的功夫全白费。
嗯,这一章的内容就到这里。环境搭建是验证工作的第一步,也是最重要的一步。把这一步走稳了,后面的仿真工作才能顺利推进。
公众号:蓝海资料掘金营,微信deep3321