ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

CentOS 7 上 Synopsys DC 安装配置与常见报错排查实战指南

CentOS 7 上 Synopsys DC 安装配置与常见报错排查实战指南 1. 为什么要在 CentOS 7 上折腾 Synopsys DC把 Synopsys DCDesign Compiler装进 CentOS 7是很多数字 IC 设计工程师入行后绕不开的一道坎。DC 是 Synopsys 公司出品的逻辑综合工具负责把 RTL 代码转换成门级网表是整个数字前端流程里最核心的一环。但它的安装和配置尤其是跑在 CentOS 7 这种“经典但略显年迈”的系统上坑多到能写一本小册子。我前后在 CentOS 7 上部署过不下十套 DC 环境从实验室的共享服务器到公司的项目机器每次都会遇到一些似曾相识的报错。这篇文章就是把这些年踩过的坑、验证过的方案、以及那些官方文档里不会写的细节一次性整理出来。不管你是刚接触 IC 设计的学生还是需要给团队搭建环境的工程师只要跟着走基本能少熬几个通宵。需要提前说明的是DC 是商业 EDA 工具安装前你需要确认手上有合法的 license 和安装包。本文只讨论技术层面的安装与配置不涉及任何授权获取途径。另外CentOS 7 已经停止维护但大量企业的 EDA 服务器仍然跑在这个系统上所以这套流程在相当长一段时间内依然有参考价值。2. 安装前的环境准备与依赖梳理2.1 系统版本与硬件资源的确认CentOS 7 的版本号建议用 7.6 以上最好是 7.9。早期版本比如 7.2、7.3的 glibc 版本偏低DC 某些版本会直接报GLIBC_2.17 not found之类的错误。查看系统版本用cat /etc/centos-release uname -r硬件方面DC 本身对 CPU 和内存的要求取决于你要综合的设计规模。但安装过程本身不挑硬件真正影响体验的是磁盘空间。DC 安装包解压后通常在 10GB 到 20GB 之间加上后续的库文件、工作目录建议给/home或专门的工具分区留至少 50GB。内存建议 16GB 起步如果要做大设计的综合32GB 以上会更从容。还有一个容易被忽略的点主机名不能包含下划线。DC 的 license 校验对主机名很敏感如果主机名里有_license 会直接失效。检查命令hostname如果发现有下划线用hostnamectl set-hostname改掉然后重启。2.2 依赖库的安装与 yum 源配置CentOS 7 默认的 yum 源在官方停止维护后已经不可用了需要换成 vault 源或者国内镜像。这一步是很多新手卡住的地方因为yum install直接报Could not resolve host: mirrorlist.centos.org。换源的操作如下cd /etc/yum.repos.d/ mv CentOS-Base.repo CentOS-Base.repo.bak vi CentOS-Base.repo写入以下内容以阿里云 vault 源为例[base] nameCentOS-7 - Base baseurlhttps://mirrors.aliyun.com/centos-vault/7.9.2009/os/$basearch/ gpgcheck1 gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 enabled1 [updates] nameCentOS-7 - Updates baseurlhttps://mirrors.aliyun.com/centos-vault/7.9.2009/updates/$basearch/ gpgcheck1 gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 enabled1然后清理缓存并重建yum clean all yum makecacheDC 运行需要的核心依赖库包括libXext、libXt、libX11图形界面相关即使你用命令行模式DC 启动时也会加载libstdc、compat-libstdc-33C 运行时库DC 的二进制文件依赖glibc、libgcc基础运行时kshDC 的启动脚本是 ksh 写的没有它dc_shell直接起不来libpng、libjpeg部分版本的报告生成会用到一次性安装yum install -y libXext libXt libX11 libstdc compat-libstdc-33 glibc libgcc ksh libpng libjpeg注意compat-libstdc-33在 CentOS 7 的 vault 源里可能找不到如果报错可以去下载对应的 rpm 包手动安装。这个库是 DC 老版本比如 2016、2017的硬依赖新版本2020 以后通常不需要。2.3 关闭 SELinux 与防火墙的取舍SELinux 在 CentOS 7 上默认是 enforcing 模式它会拦截 DC 对某些目录的访问导致 license 读取失败或者工具启动时莫名其妙退出。最省事的做法是直接关掉vi /etc/selinux/config # 将 SELINUXenforcing 改为 SELINUXdisabled setenforce 0防火墙方面如果你只在本地机器上用 DC不需要开放任何端口。但如果 license 服务器在另一台机器上需要确保两台机器之间的网络通畅并且 license 服务器上的lmgrd端口通常是 27000 和 27001没有被防火墙拦截。firewall-cmd --permanent --add-port27000/tcp firewall-cmd --permanent --add-port27001/tcp firewall-cmd --reload提示很多公司的 EDA 环境会统一关闭防火墙和 SELinux因为 EDA 工具之间的通信协议比较老旧防火墙规则很难配得完美。如果这台机器是专用的 EDA 服务器直接关掉是最稳妥的选择。3. Synopsys DC 的安装与目录规划3.1 安装包的目录结构与解压策略Synopsys 的安装包通常是一个.tar.gz或者分卷压缩的文件解压后会得到一个synopsys目录里面包含dc、library_compiler、sclSynopsys Common Licensing等子目录。安装包的名字一般长这样synopsys_installer_v5.6.tar.gz dc_2020.09_linux64.tar.gz scl_2020.09_linux64.tar.gz我习惯把工具装在/tools/synopsys下而不是/usr/synopsys或/opt/synopsys。原因是/tools通常是一个独立分区重装系统时不会丢而且权限管理更清晰。创建目录mkdir -p /tools/synopsys chmod 755 /tools/synopsys解压的时候要注意不要用 root 用户解压否则文件属主全是 root普通用户跑 DC 时会遇到权限问题。用你自己的账号解压cd /tools/synopsys tar -zxvf /path/to/dc_2020.09_linux64.tar.gz tar -zxvf /path/to/scl_2020.09_linux64.tar.gz解压完成后目录结构大概是/tools/synopsys/ ├── dc/ │ └── 2020.09/ │ ├── bin/ │ ├── linux64/ │ └── ... ├── scl/ │ └── 2020.09/ │ ├── linux64/ │ └── ... └── admin/3.2 环境变量的配置与 PATH 设置DC 的环境变量配置是安装过程中最容易出错的地方。核心变量有三个PATH、LM_LICENSE_FILE或SNPSLMD_LICENSE_FILE、以及SYNOPSYS。我习惯在/etc/profile.d/下建一个synopsys.sh这样所有用户登录时都会自动加载vi /etc/profile.d/synopsys.sh写入export SYNOPSYS/tools/synopsys export DC_HOME$SYNOPSYS/dc/2020.09 export SCL_HOME$SYNOPSYS/scl/2020.09 export PATH$DC_HOME/bin:$SCL_HOME/linux64/bin:$PATH export LM_LICENSE_FILE27000license-server export SNPSLMD_LICENSE_FILE27000license-server这里有几个细节值得展开说第一LM_LICENSE_FILE和SNPSLMD_LICENSE_FILE的区别。前者是通用的 license 变量后者是 Synopsys 专用的。有些版本的 DC 只认SNPSLMD_LICENSE_FILE有些两个都认。最保险的做法是两个都设值一样。第二license 服务器的地址格式。27000license-server里的27000是端口号license-server是主机名或 IP。如果 license 文件里写的端口不是 27000这里要对应改。比如 license 文件里写的是SERVER myhost 001122334455 28000那这里就要写28000myhost。第三PATH的顺序。$DC_HOME/bin要放在$SCL_HOME/linux64/bin前面因为 DC 的启动脚本会调用scl下的lmutil如果顺序反了可能会调用到系统自带的同名工具。配置完成后重新登录或者source /etc/profile.d/synopsys.sh然后验证which dc_shell which lmutil echo $LM_LICENSE_FILE3.3 License 文件的部署与校验License 文件通常由 Synopsys 的 license 管理团队提供文件名一般是license.dat或synopsys.dat。拿到文件后先检查里面的SERVER行和DAEMON行SERVER license-server 001122334455 27000 DAEMON snpslmd /tools/synopsys/scl/2020.09/linux64/bin/snpslmdSERVER行里的 MAC 地址必须是 license 服务器网卡的真实 MACDAEMON行里的路径必须指向snpslmd可执行文件的实际位置。如果路径不对lmgrd启动时会报Cannot find daemon。启动 license 服务cd $SCL_HOME/linux64/bin ./lmgrd -c /path/to/license.dat -l /var/log/lmgrd.log-l参数指定日志文件方便排查问题。启动后检查状态./lmutil lmstat -c 27000license-server -a如果看到Users of dc: (Total of X licenses issued; Total of Y licenses in use)说明 license 正常。如果报Cannot connect to license server先检查lmgrd进程是否在跑ps -ef | grep lmgrd注意lmgrd默认在前台运行关掉终端就没了。生产环境要用-z参数让它后台运行或者写一个 systemd service。我一般用 systemd因为管理起来更规范[Unit] DescriptionSynopsys License Server Afternetwork.target [Service] Typeforking ExecStart/tools/synopsys/scl/2020.09/linux64/bin/lmgrd -c /path/to/license.dat -l /var/log/lmgrd.log ExecStop/tools/synopsys/scl/2020.09/linux64/bin/lmutil lmdown -c /path/to/license.dat -q Restarton-failure [Install] WantedBymulti-user.target4. DC 启动与常见报错排查实录4.1 dc_shell 启动失败的典型原因装好之后第一次跑dc_shell大概率不会一次成功。下面是我遇到过的几种典型报错以及对应的排查思路。报错一ksh: command not found这个最简单就是没装 ksh。CentOS 7 默认不带 ksh需要手动装yum install -y ksh报错二error while loading shared libraries: libXext.so.6: cannot open shared object file缺 X11 相关的库。虽然你用的是命令行模式但 DC 的二进制文件在编译时链接了 X11启动时会加载。装齐即可yum install -y libXext libXt libX11如果装完还报错用ldd看一下具体缺哪个ldd $DC_HOME/linux64/syn/bin/dc_shell_exec | grep not found报错三Fatal: Design Compiler is not enabled. (DCSH-1)这是 license 问题。先确认LM_LICENSE_FILE设对了然后用lmutil手动检查lmutil lmstat -c $LM_LICENSE_FILE -a | grep dc如果显示Cannot find license说明 license 文件里没有 DC 的 feature或者 license 服务器没启动。如果显示License server is UP但 DC 还是起不来可能是 license 文件里的FEATURE行有问题比如过期了或者 hostid 不匹配。报错四Segmentation fault (core dumped)段错误是最难查的。常见原因有三个一是 glibc 版本不匹配二是缺少某个运行时库三是 DC 版本和 CentOS 7 的内核不兼容。先用strace跟一下strace -f -o /tmp/dc_strace.log dc_shell然后看日志最后几行通常能找到是哪个系统调用失败了。如果是open失败看是哪个文件如果是mmap失败可能是内存或地址空间问题。4.2 License 相关的报错与解决License 问题占了 DC 安装报错的七成以上。除了上面提到的DCSH-1还有几个常见的Invalid hostid on SERVER linelicense 文件里的 MAC 地址和实际机器不匹配。用ifconfig或ip link查看真实 MACip link show | grep ether注意如果机器有多张网卡license 文件里的 MAC 必须是lmgrd启动时绑定的那张网卡的。可以用lmutil lmhostid查看lmutil lmhostid输出的值应该和 license 文件里的SERVER行一致。License file does not support this versionlicense 文件里的版本号低于 DC 的版本。比如 license 是 2019 的但你装的是 2020 的 DC。这种情况只能找 license 管理员更新 license 文件没有别的办法。TCP_NODELAY或Cannot bind to portlmgrd启动时端口被占用。检查 27000 端口netstat -tlnp | grep 27000如果被别的进程占了要么杀掉那个进程要么在 license 文件里换一个端口。4.3 综合过程中的运行时错误DC 能启动不代表能正常综合。下面这几个报错是在实际跑综合时遇到的。Error: Cannot find the target librarytarget_library没设对。在 DC 的脚本里target_library指向标准单元库的.db文件link_library指向所有需要链接的库。检查脚本set target_library slow.db set link_library * $target_librarylink_library里的*表示先搜索内存中已加载的库这是标准写法不要漏掉。Error: Unable to resolve reference to XXX某个模块找不到对应的库单元。可能是link_library里漏了某个库也可能是 RTL 里例化的模块名和库里的名字不一致。用list_designs和list_libs检查当前加载的设计和库。Warning: Design has unconnected ports这个不是致命错误但会影响综合结果。检查 RTL 代码确认没有悬空的端口。如果是故意悬空的可以在脚本里加set_app_var hdlin_check_no_latch false之类的设置来抑制警告。5. 实操心得与效率提升技巧5.1 多版本共存的目录管理实际工作中一台机器上往往要装多个版本的 DC比如项目 A 用 2019.03项目 B 用 2021.06。如果每次切换都改环境变量太麻烦。我的做法是用一个switch_dc脚本#!/bin/bash # switch_dc.sh VERSION$1 if [ -z $VERSION ]; then echo Usage: switch_dc version echo Available versions: ls /tools/synopsys/dc/ exit 1 fi export DC_HOME/tools/synopsys/dc/$VERSION export PATH$DC_HOME/bin:$PATH echo Switched to DC $VERSION用的时候source switch_dc.sh 2020.09就行。这个脚本可以放在~/.bashrc里或者做成 alias。5.2 启动脚本的优化与别名设置DC 的启动命令dc_shell默认是交互模式但实际工作中更多是用-f跑脚本dc_shell -f run.tcl -output run.log我习惯在~/.bashrc里加几个 aliasalias dcdc_shell -f alias dctdc_shell -topographical_mode -f alias dcxdc_shell-xg-t -fdc_shell-xg-t是带图形界面的版本-topographical_mode是拓扑模式做物理感知综合时用。这些 alias 能省不少打字时间。另外DC 的日志文件默认输出到 stdout如果脚本跑很久日志会很大。建议在脚本里用redirect命令把日志写到文件redirect -tee run.log { # 你的综合脚本 }-tee参数让日志同时输出到终端和文件方便实时监控。5.3 常见问题速查表报错信息可能原因解决方法ksh: command not found未安装 kshyum install -y kshlibXext.so.6: cannot open缺少 X11 库yum install -y libXext libXt libX11DCSH-1: not enabledlicense 未配置或失效检查LM_LICENSE_FILE和lmstatInvalid hostidMAC 地址不匹配用lmutil lmhostid核对Segmentation fault库不兼容或内核问题用strace定位检查 glibc 版本Cannot find target librarytarget_library未设在脚本里设置.db路径Unable to resolve referencelink_library缺库补全link_library列表Cannot bind to port端口被占用netstat查占用换端口5.4 性能调优的几个实用参数DC 跑大设计时默认配置可能不够用。下面这几个参数是我在实际项目中验证过有效的set_app_var sh_enable_page_mode false关掉分页模式避免交互式输出时卡住。跑脚本时尤其有用。set_app_var hdlin_enable_hier_map true开启层次化映射对大设计的综合速度有明显提升。set_app_var compile_ultra_ungroup_dw true在compile_ultra时自动 ungroup DesignWare 实例减少层次优化面积。set_host_options -max_cores 8指定 DC 使用的最大 CPU 核数。默认是 1改成 8 或 16 能大幅缩短综合时间。但要注意核数不是越多越好超过物理核数反而会变慢。提示set_host_options要在compile_ultra之前设置否则不生效。另外有些 license 对多核有限制如果报Not enough licenses把核数调小。6. 写在最后的一些个人体会这套流程我在 CentOS 7 上反复验证过从 2016 版的 DC 到 2021 版基本都适用。最大的感受是安装本身不难难的是排查那些莫名其妙的报错。很多时候报错信息只有一行但背后的原因可能涉及库版本、license 配置、内核参数、甚至主机名。我的建议是装之前先把系统环境理清楚确认 CentOS 版本、装齐依赖库、关掉 SELinux、配好 yum 源。这四步做完能避开八成以上的坑。剩下的两成靠strace、ldd、lmstat这三个工具基本都能定位。还有一点DC 的安装目录和 license 文件路径尽量不要有中文或空格虽然理论上支持但实际用起来容易出问题。路径越简单越好比如/tools/synopsys就比/home/user/EDA Tools/Synopsys DC靠谱得多。最后如果你是在公司环境里部署记得把安装过程写成文档包括每一步的命令、遇到的报错、解决方法。下次换机器或者升级版本时这份文档能省你很多时间。我自己就靠一份维护了五年的安装笔记每次新机器上线都能在一小时内搞定。
返回列表