
EDA虚拟机分享2020版本Synopsys2020我最早接触Synopsys工具链是在研究生阶段那时候实验室里只有一台装了老版本DC的服务器几个人排队等license。后来工作了发现公司环境倒是齐全VCS、DC、PT、Verdi一应俱全可一回到家想跑个RTL仿真或者综合实验就只能干瞪眼。不是买不起正版而是个人买EDA工具根本没必要——这是工业级工具不是App。所以很长一段时间里我都在折腾怎么搭一套能随时用的可复现环境。最后落脚点就是一整套基于虚拟机的Synopsys 2020版本镜像分享。这篇文章就写给那些需要Synopsys 2020工具链做学习、做实验、做论文复现但没法拿到公司license或者不想污染自己主力系统的朋友。如果你正在准备数字IC相关的面试或者学校课程里需要跑DC综合、Verdi看波形那这套环境能帮你省下一整个周末的折腾时间。1. 为什么选虚拟机而不是WSL或者裸装Linux先说我踩过的坑。最早我想的是在Windows上直接装个WSL2然后在里面装EDA工具。听起来很优雅毕竟WSL2现在性能和集成度都不错。但真做起来问题一堆。Synopsys工具对linux发行版的类型敏感对glibc版本敏感对图形界面连接也敏感。WSL2默认不跑X Server需要额外配VcXsrv或者类似的东西Verdi这种依赖图形界面的工具就算通过X转发跑起来刷新率也让人崩溃。后来试过直接在本机装双系统Ubuntu 20.04 LTS然后装工具。这个方法可行但有一个致命问题license服务器配置。很多网上流传的license方案对你的Mac地址和hostname有要求一旦你改个主机名一切就要重新来。而且双系统意味着你在Windows和Linux之间切换要重启做实验效率很低。所以最后选了虚拟机方案具体是VMware Workstation Ubuntu 18.04 LTS。为什么是18.04而不是20.04因为Synopsys 2020版本对Ubuntu 18.04的兼容性最稳。虽然20.04也能装但我试下来在运行dc_shell-t的时候偶尔会遇到动态库兼容警告虽然不影响跑但看着难受。18.04配2020版基本是网上所有EDA虚拟机方案里验证过最多、出问题最少的一个组合。这也是我推荐大家直接用现成虚拟机镜像而不是自己搭环境的核心原因。2. 这套Synopsys 2020虚拟机里装了哪些工具这套镜像不是只装了个孤零零的DC。我把平时学习和做实验最常用的一套东西都放了进去基本上是数字IC设计前端的标准配置。工具名称版本用途Design Compiler2020.12RTL综合把Verilog转成门级网表VCS2020.12编译型仿真器跑RTL和gate-level仿真Verdi2020.12波形和调试工具配合VCS用PrimeTime2020.12静态时序分析这套组合覆盖了从RTL编写、功能仿真、逻辑综合到时序验证的完整前端流程。说实在的很多小公司的实际流程也就用到这些工具的前端部分。除了EDA工具本身系统里还装好了必要的库文件——比如libjpeg62、libpng16、libXext等一堆32位和64位兼容库。这些库在裸系统上通常缺一大堆每次启动工具都会报error while loading shared libraries非常磨人。虚拟机镜像里已经全部处理好开机就能用省掉大量基础环境排查时间。另外我还在系统里放了一份专门的启动说明文档里面写清楚了不同工具用什么命令启动、license服务怎么开。因为license这一块是很多人卡住的点后面我会单独详细解释。3. license问题的核心机制与常见误区EDA虚拟机分享这个项目涉及的所有相关内容里license问题至少占了一半的讨论热度。很多人在论坛上问为什么启动dc_shell报license错误为什么Verdi起不来其实问题往往出在license server的hostname和MAC地址匹配上。先讲清楚机制。Synopsys工具的license机制是基于license server的。工具启动时会通过环境变量SNPSLMD_LICENSE_FILE或者LM_LICENSE_FILE去指定一个端口和主机比如27000licserver。然后工具跟license server通信检查license是否可用、feature是否匹配、过期时间是否合法。这套虚拟机镜像的license方案是基于本地节点锁定的。也就是说license文件里绑定了这台虚拟机的hostname和MAC地址。这也是为什么几乎所有分享的Synopsys虚拟机都要求你别乱改hostname的原因。我一开始自己用的时候不懂把虚拟机hostname改成自己喜欢的样子结果所有工具都启动失败报Invalid host错误。这个坑估计99%自己搭环境的人都踩过。解决的办法很简单保持默认hostname不要动network配置。如果你确实需要改名可以尝试用lmhostid命令查看当前机器ID然后去生成匹配的license但这就涉及比较复杂的操作了。既然我们用现成镜像就直接遵守默认配置省心。还有一个常见的是license特征码模式。Synopsys有专门的SNPSLMD它支持两种机制老的是flexlm新的是scl。2020版本使用的是较新的scl keygen模式。有用过老版工具经验的人可能会习惯性去搞老修炼方式但在2020版上不生效必须用配套的方式处理。镜像里已经把所有东西提前弄好了不需要你再跑一遍keygen启动即用。4. 虚拟机性能调优的实用要点这也是我从最初使用吃性能的PC到后来优化运行环境过程中积累下来的一些重要经验。很多人拿到虚拟机之后第一反应是用默认配置去跑结果发现DC综合稍微大点的设计就慢得不行。但这套EDA虚拟机对性能确实是有要求的VMware的默认设置往往不是最合适的。如果你用的是VMware Workstation 15及以上版本拿到虚拟机后建议做以下几个调整。内存分配至少8GB最好是12GB。DC综合工具在编译大规模设计时内存消耗很夸张我遇到过综合一个稍微大点的模块时内存占用突破10GB的情况。当然这和个人设计的复杂度有关但内存宁可多不能少。处理器分配2到4个核心。VMware中处理器设置可以按照每个处理器的内核数量配置比如分配2个处理器每个2核。实测下DC的并行综合能力对多核的支持还算不错。如果只是在RTL仿真阶段2个核也就够了但后续要做综合建议直接给4核。硬盘建议使用独立SCSI模式而非NVMe。这一点很多小白不会注意到但Synopsys 2020工具链在SCSI虚拟磁盘下的兼容性更好。旧版本工具对磁盘控制器类型敏感SCSI虚拟磁盘出现莫名其妙IO错误的情况最少。关掉3D加速。有些人在用Verdi看波形时觉得界面不够流畅于是想着打开3D加速。但实际上EDA工具不需要3D加速反而开着3D加速可能会在部分显卡驱动环境下触发X11渲染问题。关掉3D加速用默认的标准VGA适配器Verdi的波形缩放反而非常顺滑。如果你用的主机是SSD强烈建议把虚拟机文件放入SSD。看波形和跑仿真是随机IO密集的操作SSD能明显减少等待感。我最初把镜像放在机械硬盘里跑每开一次Verdi加载FSDB波形要等半天后来迁移到SSD上基本秒开。5. 从开机到跑起第一个综合工程的完整流程这里我完整走一遍流程帮第一次用这个环境的朋友确认自己每一步做的对不对。开机后登录系统的用户名和密码默认在桌面的说明文件里有。如果没有特别注明一般默认root权限密码也是常见默认值。进入桌面后第一步打开终端输入lmstat -a检查license server是否正常运行。如果输出里有license server UP相关的字样说明license服务正常可以继续。接下来就是启动工具。输入dc_shell-t进入Design Compiler的TCL模式。这里要注意如果你直接输dc_shell而不带-t进的是dcsh模式语法风格完全不同。现在的教程和脚本基本都用TCL模式建议统一用dc_shell-t。为了验证环境没问题我建议你跑一个最小设计比如一个简单的D触发器。先写一个简单的Verilog文件然后创建一个TCL脚本内容大致是read_file {dff.v} current_design dff compile write -format verilog -output dff_gate.v执行之后如果没有任何error并且在当前目录下生成了dff_gate.v说明综合流程打通了。这个时候再打开Verdi看一下综合前后的波形对比整个环境就确认没问题。VCS的使用也顺带提一下。VCS的编译命令是vcs -sverilog -debug_accessall。加上-debug_accessall的目的是生成完整的fsdb波形文件这是Verdi调试的关键。没有这个选项Verdi打开波形文件时会提示缺少信号信息。很多刚接触的人在这一步一头雾水其实只是编译参数的问题。整个流程从打开虚拟机到跑通一个小设计正常情况下应该不超过半小时包括熟悉命令的时间。如果超过这个时间还没搞定往往是license服务没起用lmstat查一下基本就能定位。6. 我在实际使用中踩过的几个典型坑每个用过Synopsys工具链的人都会经历一段工具报错不认识、上网搜也搜不明白的阶段。这里我把踩过的比较有代表性的坑列出来给新人一个心理预期。第一个就是hostname被系统自动改掉。有些Linux发行版会自动从DHCP更新hostname或者你在安装VMware Tools时不小心改了系统配置导致license失效。排查方法很简单用hostname命令查看当前主机名再和license文件里的hostname做对比。第二个是环境变量配置错误。镜像里默认在.bashrc中配置好了所有环境变量但如果在打开终端前修改了环境变量文件或者在非交互式shell里启动工具部分环境变量可能不会生效。建议始终在正常交互式终端中启动工具。第三个是文件权限问题。如果你从Windows宿主机往虚拟机里拖文件默认文件权限可能是644甚至更宽松但某些脚本文件需要执行权限。用chmod x修一下就能解决不是什么大事。第四个是内存不足导致编译被杀。VMware默认的内存设置可能偏小RTL仿真稍微复杂些就容易触发OOM进程直接消失查看vcs.log也看不到明确的error信息。建议先把内存调到至少8GB再跑工程。第五个是Verdi打不开波形但工具本身能启动。这个通常是波形文件路径里有中文或者空格Verdi对路径解析不够宽裕把工程路径改成纯英文纯下划线就能解决。这五个坑基本覆盖了绝大多数入门者会遇到的问题。以我的经验只要提前知道这些实际使用体验会顺畅非常多。7. 这套环境还能怎么扩展对于已经跑通基础流程的人来说这套虚拟机完全可以扩展成一个更完整的学习和实验平台。比如可以装一个开源RISC-V核比如PicoRV32或者VexRiscv用DC跑综合用PT跑时序。这样就能从软件仿真走向真正的物理实现流程学到的东西比单纯跑仿真深刻得多。也可以把SystemVerilog的UVM环境放进来配合VCS做验证实验。UVM验证是现代IC验证的主流方法学很多时候公司面试会考察候选人对UVM机制的理解。尽管UVM框架代码可以自己写但用真实工具链搭一套UVM环境跑通理解完全不同。还可以挂载一个共享目录让Windows下的编辑器配合虚拟机内的工具链使用。我习惯在Windows上用VS Code写RTL然后保存到共享目录虚拟机里直接读取编译。这种Windows编辑、Linux编译的流程比在Linux虚拟机里装编辑器舒服很多。内存更大的机器还可以同时开两个虚拟机副本一个跑综合一个跑仿真模拟一台小型服务器的工作模式。虽然不完全是真实环境但对理解EDA流程的分布式分工有帮助。8. 最后的个人体会使用这套Synopsys 2020虚拟机这么长时间以来我最深的感受是一个好用的EDA学习环境对技术成长的推动比想象中大得多。在学校或公司工具和环境往往是别人搭好的你只需要专心写代码。但自己实际去搭建、去解决问题碰到的每一个报错都是在加深对工具链底层的理解。在家庭环境里能随时打开一个Verdi看波形或者用DC综合一个自己设计的模块这种随时能跑实验的便利性远比想象中的更重要。尤其对于准备秋招或者正在做毕设的同学技术能力其实就是在一次次环境报错、查资料、修复、跑通中积累出来的。如果你拿到这套虚拟机镜像后遇到工具启动报错先别急着怀疑镜像有问题先把license服务状态、hostname、环境变量这三样查一遍绝大多数问题都出在这三处。祝你在数字IC的学习路上少踩坑多跑通。