1. 环境准备虚拟机与操作系统的基石搭建大家好我是老白一个在芯片验证这行摸爬滚打了十来年的工程师。今天想和大家聊聊一个让很多新手朋友头疼但又绕不开的话题如何在自己的电脑上从零开始搭建一个能跑仿真、能看波形、能写代码的完整芯片验证环境。说白了就是搞定 VCS、GVIM 和 VERDI 这“三件套”。我见过太多同事和学弟学妹在第一步装虚拟机、装系统的时候就踩坑折腾好几天环境都没配好更别提跑仿真了。所以我决定结合自己踩过的无数坑写一份超详细的避坑指南目标是让你跟着步骤走一次成功。咱们的目标很明确在 Windows 或 Mac 电脑上通过虚拟机软件 VMware Workstation安装一个 CentOS 7 的 Linux 系统然后在这个系统里安装并配置好 Synopsys 的 VCS2018仿真器、GVIM代码编辑器和 VERDI波形调试工具。为什么选 CentOS 7因为它稳定社区支持好而且很多 EDA 工具对它的兼容性经过长期考验。为什么是 VCS2018这个版本比较经典资源相对好找学习使用足够。整个流程我会假设你是一个刚入行的朋友尽量把每一步的原理和可能遇到的问题都讲清楚。首先你得准备好“原材料”。你需要下载 VMware Workstation 16 Pro或更高版本但16比较稳定的安装包以及 CentOS 7 的 ISO 镜像文件。CentOS 7 建议选择像CentOS-7-x86_64-DVD-2009.iso这样的完整版镜像避免最小化安装缺少太多组件。这些软件都可以从官方网站找到请务必支持正版用于学习目的。安装 VMware 的过程比较傻瓜式一路“下一步”即可但有个关键点安装完成后需要输入许可证密钥来激活软件。网上可以找到一些用于学习和评估的密钥比如ZF3R0-FHED2-M80TY-8QYGC-NPKYF输入后完成激活。这里我必须强调所有工具和许可证仅供个人学习研究使用严禁用于任何商业用途。虚拟机软件装好后我们就要在里面“盖房子”了——创建并安装 CentOS 7 系统。打开 VMware点击“创建新的虚拟机”这里我强烈建议选择“自定义高级”配置而不是“典型”。虽然多几步但你能更清楚地控制虚拟机的资源分配这对后续运行大型仿真至关重要。在操作系统选择时记得选“Linux”版本选“CentOS 7 64位”。给虚拟机起个名字比如“VCS_Lab”然后选择一个空间充足的磁盘位置来存放虚拟机文件。1.1 虚拟机硬件资源分配给多少才够用接下来是最容易出问题的一步分配硬件资源。很多朋友要么太抠门导致虚拟机卡顿要么太豪爽把宿主机你的电脑拖垮。这里有个经验法则量力而行适度超前。内存分配这是影响流畅度的最关键因素。首先打开你电脑的任务管理器Windows或活动监视器Mac看看你总共有多少物理内存。假设你有 16GB那么分给虚拟机 8GB 是一个比较稳妥的选择。如果总内存是 32GB那么分配 12GB 到 16GB 给虚拟机会让后续运行 VCS 编译和仿真更加顺畅。我实测下来低于 4GB 内存跑稍大点的测试平台就会非常吃力甚至无法启动图形界面。处理器分配这里指的是虚拟 CPU 核心数。同样需要查看你电脑的 CPU 信息。如果你的 CPU 是 4 核 8 线程那么可以分配 2 个处理器核心每个核心 1 个内核总计 2 个 vCPU或者分配 1 个处理器核心但给它 2 个内核也是 2 个 vCPU。分配的核心数不要超过你物理核心数的一半留足资源给宿主机系统否则两边都会卡。我一般给我的验证虚拟机分配 4 个 vCPU这样并行编译速度会快很多。硬盘分配建议至少分配 50GB。选择“将虚拟磁盘拆分成多个文件”这样便于迁移和备份。不用担心这个大小不是立即占用你 50GB 物理硬盘而是随着虚拟机内文件增多而动态增长的上限。但如果你计划安装多个版本的 EDA 工具或存放大型项目80GB 到 100GB 会更从容。其他硬件像声卡、打印机这类在验证环境中完全用不到的虚拟设备可以直接在“自定义硬件”列表里移除能节省一点资源是一点。1.2 CentOS 7 系统安装与关键配置配置好硬件就可以加载 CentOS 7 的 ISO 镜像文件并启动安装了。启动后选择“Install CentOS 7”。在语言选择界面我个人的习惯是选择英文因为很多工具的错误信息和文档都是英文的这样可以避免一些编码问题。当然选择中文界面也完全没问题。安装过程中有几个关键配置点直接决定了你后续使用的便利性SOFTWARE SELECTION软件选择这是第一个大坑默认安装是“Minimal Install”最小化安装这是一个没有图形界面的纯命令行系统。对于新手来说没有桌面环境简直是噩梦。所以一定要点进去选择“GNOME Desktop”图形桌面环境。同时为了兼容性和开发需要我建议把下面的“Legacy X Window System Compatibility”、“Compatibility Libraries”和“Development Tools”这几个附加选项也勾选上。这样安装的系统才是一个功能完整的开发环境。INSTALLATION DESTINATION安装目标即磁盘分区。如果你不想手动分区直接点“Done”让系统自动分区是最简单的。但如果你想更精细地控制可以选择“I will configure partitioning”。手动分区时我通常创建三个分区1/boot分区用于存放启动文件给 1GB 就够了2swap交换分区大小一般是内存的 1-2 倍比如你分配了 8GB 内存swap 分 8GB-16GB3/根分区占用所有剩余空间。对于学习环境自动分区完全足够。NETWORK HOST NAME网络和主机名务必把右上角的以太网开关从 OFF 拨到 ON这样安装完成后虚拟机才能上网后续下载依赖包、更新系统都靠它。主机名可以改一个自己喜欢的比如vcs-lab记得点“Apply”。ROOT PASSWORD 和 USER CREATION为 root 超级用户设置一个强密码。更重要的是必须创建一个普通用户这是因为像 VCS 这样的 EDA 工具通常不建议甚至不允许直接安装在 root 用户下安装在普通用户目录下更安全、更便于管理。创建用户时记得勾选“Make this user administrator”这样这个普通用户就能通过sudo命令临时获得管理员权限方便安装软件。完成这些设置后点击开始安装。安装完成后重启用你创建的普通用户登录看到 GNOME 桌面第一步就算大功告成了。别急着高兴这只是万里长征第一步我们刚刚把毛坯房盖好接下来才是精装修——安装和配置各种工具。2. 系统基础配置与 GVIM 的安装优化进入 CentOS 7 桌面后第一件事不是急着装 EDA 工具而是把系统的基础环境配置好。一个干净、源配置正确、权限合理的系统能避免后面一大堆稀奇古怪的错误。首先我们需要确保刚才创建的普通用户拥有sudo权限。虽然创建时勾选了管理员但最好确认一下。右键点击桌面选择“Open Terminal”打开终端。先尝试执行一个需要权限的命令比如sudo ls /root。系统会提示你输入当前用户的密码注意不是 root 密码。输入后如果能正常列出目录或提示无权限但没报sudo错误说明sudo权限已生效。如果提示用户不在 sudoers 文件中则需要手动添加。具体方法是先切换到 root 用户 (su -输入 root 密码)然后编辑/etc/sudoers文件在root ALL(ALL) ALL这一行下面添加一行你的用户名 ALL(ALL) ALL。保存退出后你的用户就能使用sudo了。接下来是一个高频坑点yum 源配置。CentOS 7 自带的官方 yum 源在国内访问可能很慢甚至失败导致后续安装软件比如 GVIM时卡住。我们需要把它替换成国内的镜像源比如阿里云或清华大学的源。# 1. 备份原来的源配置文件 sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup # 2. 下载阿里云的 CentOS 7 源配置文件 sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo # 3. 清理并重建 yum 缓存 sudo yum clean all sudo yum makecache # 4. 可选更新系统软件包这步比较耗时可以跳过 # sudo yum update -y执行完这几条命令你的软件安装源就换成了国内镜像速度会快很多。现在我们可以安装 GVIM 了。GVIM 是 VIM 的图形界面版本相比纯终端的 VIM它支持鼠标操作、多窗口对新手更友好。安装命令很简单sudo yum install vim-X11 -y这个vim-X11包就包含了 GVIM。安装完成后在终端里直接输入gvim命令就能弹出漂亮的图形化编辑器窗口了。2.1 打造顺手的 GVIM配置文件与语法高亮安装好 GVIM 只是开始默认的 GVIM 非常简陋我们需要通过配置文件.vimrc来定制它让它变成一个强大的 IDE 级别的代码编辑器。这个文件位于你的用户家目录下~/.vimrc如果不存在就创建一个。用 GVIM 打开它gvim ~/.vimrc。然后把下面我用了好几年、针对数字设计验证优化过的配置粘贴进去。这些配置包括了显示行号、语法高亮、自动缩进、Tab 键宽度设置等等。 基础设置 syntax on 开启语法高亮 set nu 显示行号 set ruler 显示光标位置行列号 set showcmd 在右下角显示未完成的命令 缩进与 Tab set autoindent 自动缩进 set smartindent 智能缩进 set tabstop4 Tab 键显示为 4 个空格宽度 set shiftwidth4 自动缩进时的宽度为 4 空格 set softtabstop4 按退格键时一次删除 4 个空格 set expandtab 将 Tab 键输入转换为空格强烈推荐避免代码混用制表符和空格 搜索设置 set hlsearch 高亮显示搜索结果 set incsearch 输入搜索内容时实时高亮 set ignorecase 搜索时忽略大小写 set smartcase 如果搜索包含大写则开启大小写敏感 界面与编码 set guifontMonospace\ 12 设置字体和大小 set encodingutf-8 内部编码 set fileencodingutf-8 文件默认编码 set cursorline 高亮当前行 colorscheme desert 配色方案经典耐看 其他实用设置 set nobackup 不生成备份文件 set noswapfile 不生成交换文件 set backspaceindent,eol,start 让退格键可以删除缩进、换行符等 set foldmethodmanual 代码折叠方式为手动 让配置修改立即生效 autocmd BufWritePost $MYVIMRC source $MYVIMRC保存退出后配置就生效了。你可以新建一个.sv文件试试比如gvim test.sv输入module test; endmodule看看是不是有了颜色和行号。但你会发现SystemVerilog 的关键字如module,logic,assert可能没有高亮。这是因为 GVIM 默认没有 SystemVerilog 的语法定义文件。我们需要手动添加。首先在家目录下创建必要的文件夹和文件mkdir -p ~/.vim/syntax cd ~/.vim/syntax # 你需要从网上下载一个 systemverilog.vim 语法文件放到这个目录 # 或者从已有的安装包中复制过来假设你已经把systemverilog.vim文件放到了~/.vim/syntax/目录下。然后在~/.vimrc文件的末尾添加一行 识别 .sv 和 .svh 文件为 SystemVerilog 类型 au BufRead,BufNewFile *.sv,*.svh set filetypesystemverilog这样当你再用 GVIM 打开.sv文件时SystemVerilog 语法就会高亮了写起代码来舒服多了。这些配置虽然琐碎但一次设置终身受益能极大提升编码效率。3. VCS 与 VERDI 的安装与破解实战重头戏来了安装 Synopsys 的仿真器 VCS 和调试器 VERDI。这一步需要把安装包从宿主机传到虚拟机里。我推荐使用Xftp这款工具它通过 SFTP 协议传输文件图形化界面拖拽操作非常方便。在宿主机上下载并安装 Xftp 后新建一个连接。关键是如何获取虚拟机的 IP 地址。在 CentOS 终端里输入ifconfig命令如果提示命令未找到先安装net-tools:sudo yum install net-tools -y。在输出信息中找到ens33或类似名称网卡其inet后面的数字就是虚拟机的 IP 地址比如192.168.1.100。在 Xftp 的主机栏填入这个 IP用户名和密码填你创建的普通用户的协议选择 SFTP端口 22连接即可。连接成功后在虚拟机的用户家目录下比如/home/cs创建一个文件夹例如synopsys_install_package用于存放安装包。然后在 Xftp 的本地窗口找到你下载的 VCS、VERDI 和 SCLLicense管理工具的安装包通常是.tar.gz或.run格式把它们全部拖拽到虚拟机的这个文件夹里。重要步骤传输完成后回到虚拟机终端进入安装包目录给所有安装包文件赋予可执行权限。因为很多安装包是.run脚本文件。cd ~/synopsys_install_package chmod 755 *.run *.tar.gz # 或者更直接 chmod -R 755 ./3.1 解决依赖库问题安装前的必修课在安装 Synopsys 工具之前必须安装一些系统依赖库否则安装过程会报错或者安装后无法启动。根据我的经验下面这几个库是必须的# 安装基础开发工具和32位兼容库 sudo yum groupinstall Development Tools -y sudo yum install glibc.i686 libXext.i686 libXft.i686 libXp.i686 libXpm.i686 libXt.i686 libXtst.i686 -y # 安装 VCS/VERDI 可能需要的特定库 sudo yum install redhat-lsb-core -y sudo yum install ksh -y sudo yum install libXss.so.1 -y # 如果直接安装失败可以用下面命令查找包名 # 先用 repoquery 查找哪个包提供这个库 repoquery --nvr --whatprovides libXss.so.1 # 假设输出是 libXScrnSaver-1.2.2-6.1.el7.x86_64则安装它 sudo yum install libXScrnSaver-1.2.2-6.1.el7.x86_64 -y把这些依赖都装上能解决 90% 的因缺少库文件导致的启动失败问题。特别是redhat-lsb-core和kshVCS 的安装脚本会用到。3.2 使用 Installer 安装 SCL、VCS 和 VERDISynopsys 提供了一个统一的安装器SynopsysInstaller用它来安装 SCL、VCS 和 VERDI 非常方便。假设你的安装器文件是SynopsysInstaller_v5.0.run。cd ~/synopsys_install_package # 运行安装器 ./SynopsysInstaller_v5.0.run这会在当前目录解压出安装器的文件。进入解压后的文件夹运行./setup.sh启动图形化安装界面。注意不要用sudo运行就用普通用户身份运行。安装过程基本上是图形化点击下一步但有三个关键点选择安装源Source点击 Browse分别指向你存放scl、vcs、verdi安装包的解压目录或.tar.gz文件本身。安装器会自动识别。选择安装目标Destination我强烈建议为所有 Synopsys 工具创建一个统一的安装目录比如/home/cs/synopsys_tools。这样环境变量配置起来清晰明了。SCL、VCS、VERDI 都安装到这个目录下的各自子文件夹里。安装顺序必须先安装 SCL (Synopsys Common Licensing)它是 License 管理工具。然后再安装 VCS 和 VERDI。在图形界面里依次完成 SCL、VCS_MX混合语言仿真、VCSVerilog仿真、VERDI 的安装。每一步都是选择源 - 选择目标目录 - 下一步 - 接受协议 - 安装 - 完成。耐心等待每个步骤安装完毕。3.3 License 生成与配置最核心的一步工具装好了但没有 License 就等于一堆废铁。我们需要生成一个 License 文件。这里会用到网上流传的scl_keygen工具请仅用于学习。这个工具需要在Windows 宿主机上运行。在虚拟机终端里再次输入ifconfig找到ether后面那一串用冒号分隔的六组十六进制数比如00:0c:29:ab:cd:ef。这就是你的Host ID也叫 MAC 地址。把它记下来去掉冒号变成000c29abcdef。在虚拟机终端输入hostname得到你的主机名比如vcs-lab。在宿主机上以管理员身份运行scl_keygen。将处理过的 Host ID不带冒号填入 “HOST ID Daemon” 和 “HOST ID Feature” 框。将主机名填入 “HOST Name” 框。然后点击 “Generate”。这会生成一个Synopsys.dat文件。用记事本打开它编辑第一行和第二行。第一行一般是SERVER your-hostname 000c29abcdef 27000确认主机名和 ID 是否正确。最关键的是第二行DAEMON snpslmd /path/to/snpslmd。你需要把/path/to/snpslmd替换成你虚拟机里snpslmd这个二进制文件的真实路径。这个文件在你安装的 SCL 目录下例如/home/cs/synopsys_tools/scl/2018.06/linux64/bin/snpslmd。把整条路径替换上去。保存Synopsys.dat。然后通过 Xftp 将这个文件上传到虚拟机 SCL 的 license 管理目录例如/home/cs/synopsys_tools/scl/2018.06/admin/license/。上传后同样给它赋予权限chmod 777 Synopsys.dat。3.4 环境变量配置让系统找到你的工具License 文件准备好了现在需要告诉系统这些工具在哪里以及如何启动 License 服务。这通过配置用户家目录下的.bashrc文件来实现。用 GVIM 打开~/.bashrc在文件末尾添加以下内容。请务必根据你的实际安装路径修改下面的每一行# Synopsys Tools Environment Settings export SCL_HOME/home/cs/synopsys_tools/scl/2018.06 export VCS_HOME/home/cs/synopsys_tools/vcs/O-2018.09-SP2 export VCS_MX_HOME/home/cs/synopsys_tools/vcs-mx/O-2018.09-SP2 export VERDI_HOME/home/cs/synopsys_tools/verdi/Verdi_O-2018.09-SP2 export DVE_HOME$VCS_HOME/gui/dve # 将工具的可执行文件路径加入系统PATH PATH$PATH:$SCL_HOME/linux64/bin PATH$PATH:$VCS_HOME/bin PATH$PATH:$VERDI_HOME/bin PATH$PATH:$DVE_HOME/bin export PATH # 为64位系统设置架构覆盖 export VCS_ARCH_OVERRIDElinux # 设置 License 文件路径27000是端口后面是你的主机名 export LM_LICENSE_FILE27000vcs-lab # 设置一个别名方便启动 license 服务 alias lmg_synopsyslmgrd -c $SCL_HOME/admin/license/Synopsys.dat逐行解释一下export XXX_HOME定义了各个工具的根目录很多脚本会引用这些变量。PATH$PATH:...把工具的bin目录添加到系统的可执行文件搜索路径中。这样你在终端里直接输入vcs、verdi就能找到命令了。VCS_ARCH_OVERRIDElinux强制指定架构避免一些兼容性问题。LM_LICENSE_FILE27000vcs-lab这是最重要的告诉工具去哪里找 License。格式是端口主机名。主机名就是你的hostname。alias lmg_synopsys创建一个快捷命令用来启动 License 服务。保存文件后在终端执行source ~/.bashrc让配置立即生效。3.5 启动服务与验证安装万事俱备只欠东风。首先需要放行 License 服务使用的 27000 端口如果你在.bashrc里设了其他端口就放行那个端口。sudo firewall-cmd --zonepublic --add-port27000/tcp --permanent sudo firewall-cmd --reload然后启动 License 服务。直接在终端输入我们刚才设置的别名lmg_synopsys如果一切正常你会看到一串输出最后几行应该是Server started...和License server successful...之类的信息并且这个终端窗口会一直运行不要关闭它。这说明 License 服务启动成功了。现在激动人心的验证时刻到了打开另一个新的终端窗口因为原来的窗口被 License 服务占用了。输入verdi并回车。如果 VERDI 的启动界面弹出来了恭喜你VERDI 安装成功输入dve并回车。这是 VCS 自带的图形化调试界面能启动说明 VCS 也基本没问题。最后我们来做个最简单的仿真测试。创建一个测试文件hello.vgvim hello.v输入以下内容module hello; initial begin $display(Hello, VCS World!); $finish; end endmodule保存退出。然后在终端编译并仿真vcs -full64 hello.v -debug_accall -l compile.log ./simv -l sim.log如果编译日志compile.log没有致命错误并且运行sim.log中出现了Hello, VCS World!这行打印信息那么你的整个 VCS VERDI 环境就彻底搭建成功了走到这一步你可能已经花了小半天时间但一个完全属于你自己的、可控的芯片验证环境就建立起来了。这个过程里遇到的每一个错误提示解决的每一个依赖问题都会让你对 Linux 系统和 EDA 工具链的理解更深一层。这个环境将成为你学习 SystemVerilog、UVM 以及进行芯片验证实践的坚实基地。后续你可以在这个基础上安装 URG覆盖率报告、Verdi 的 PLI 库等更多组件让它变得更加强大。记住搭建环境是工程师的基本功虽然繁琐但一劳永逸值得投入。如果在哪个环节卡住了多看看错误日志善用网络搜索你遇到的问题很可能我已经踩过坑了。