简介:这份资源面向需要配置Synopsys工具授权环境的学习者,尤其是Windows平台下进行license生成与调试的初学者和进阶用户。压缩包内仅含1个docx文档,体积约269KB,以文字说明形式梳理了授权文件从获取到可用的完整流程,涵盖网盘文件提取、时间戳调整、scl_keygen.exe参数填写、snpslmd路径修改以及fix.bat执行等关键环节。文档还针对lmgrd报错未找到feature、SIGN与SN标识符手动插入、project_id对应修改等常见问题给出了排查思路,并提醒2004年时间戳不稳定、改用2018年更可靠。目前已有573人学习,适合希望理解license文件结构、掌握授权生成与排错方法的读者参考,需注意该资源仅限学习使用,应遵守相关版权与合法性要求。
1. 从一次 VCS 编译卡死说起:Synopsys 工具 license 到底在管什么
凌晨两点,vcs -full64跑了十分钟没吐一个字,lmgrd进程活着,lmstat却显示Cannot connect to license server。这种场景做数字 IC 的几乎都遇到过:工具装好了,环境变量也配了,偏偏 license 这一关卡住,编译、仿真、综合全线停摆。Synopsys 工具链(VCS、Verdi、Design Compiler、PrimeTime、ICC2、SpyGlass 等)的授权不是单个文件丢进去就完事,它由 license 文件、license 服务器进程(lmgrd + snpslmd)、客户端环境变量三部分咬合而成,任何一环错位都会报出五花八门的错误码。这篇把 Synopsys license 资源的获取、部署、排错、优化按一线做法讲透,适合刚接手 EDA 环境搭建的工程师,也适合被license request failed for feature折磨过的老手对照排查。
2. Synopsys license 机制与资源构成:先搞懂 snpslmd 在做什么
2.1 license 文件里的三行关键字段
一份 Synopsys license 文件(常见后缀.dat或.lic)核心就三类行:SERVER行声明服务器主机名、MAC 地址和端口;VENDOR行声明守护进程snpslmd及其路径;INCREMENT/FEATURE行声明具体工具、版本、到期日和授权数量。看一个典型片段:
SERVER eda-server 001122aabbcc 27000 VENDOR snpslmd /opt/synopsys/linux64/bin/snpslmd INCREMENT vcs_sim snpslmd 2026.12 31-dec-2026 20 \ VENDOR_STRING=... HOSTID=001122aabbcc ISSUED=...SERVER行的 MAC 必须和运行 lmgrd 的机器物理网卡一致,虚拟机克隆后网卡变了是最高频的失效原因。VENDOR行的路径必须指向真实存在的snpslmd可执行文件,路径写错 lmgrd 会启动但 vendor daemon 起不来。INCREMENT行里的vcs_sim是 feature 名,客户端报license request failed for feature时括号里那个名字就是它,对不上说明工具版本和 license 版本不匹配。
2.2 lmgrd 与 snpslmd 的父子进程关系
Synopsys 用的是 FlexNet(原 FLEXlm)授权体系,lmgrd是调度进程,负责读 license 文件、监听端口、拉起各厂商的 vendor daemon。snpslmd才是真正判断 feature 是否可用的进程。两者是父子关系,lmgrd挂了snpslmd也会跟着退。启动命令常见写法:
# 前台启动,便于看日志,调试阶段用 /opt/synopsys/linux64/bin/lmgrd -c /opt/synopsys/license/synopsys.dat -l /var/log/snps.log # 后台常驻,生产环境用 /opt/synopsys/linux64/bin/lmgrd -c /opt/synopsys/license/synopsys.dat -l /var/log/snps.log -2 -p-c指定 license 文件,-l指定日志路径,-2让日志覆盖写而非追加,-p让 lmgrd 以伪后台方式运行。日志文件是排错第一现场,snpslmd启动失败、端口占用、feature 过期都会写在这里。
2.3 客户端环境变量:LM_LICENSE_FILE 与 SNPSLMD_LICENSE_FILE
客户端要告诉工具去哪找 license,两个变量都常见:
export LM_LICENSE_FILE=27000@eda-server export SNPSLMD_LICENSE_FILE=27000@eda-server27000@eda-server中端口号必须和SERVER行一致,主机名要能被 DNS 或/etc/hosts解析。Synopsys 工具优先读SNPSLMD_LICENSE_FILE,没设才回落到LM_LICENSE_FILE。多个 license 源用冒号分隔。这里有个坑:如果同时设了两个变量且指向不同服务器,工具行为会变得难以预测,建议只保留SNPSLMD_LICENSE_FILE。
2.4 用 lmstat 和 lmutil 验证授权状态
部署完别急着跑工具,先用lmutil自检:
# 查看服务器整体状态 /opt/synopsys/linux64/bin/lmutil lmstat -c 27000@eda-server -a # 只看某个 feature 的占用情况 /opt/synopsys/linux64/bin/lmutil lmstat -c 27000@eda-server -f vcs_sim # 查看谁在用 /opt/synopsys/linux64/bin/lmutil lmstat -c 27000@eda-server -f Verdi-a输出所有 feature 的授权数和已用数,-f精确到单个 feature。如果lmstat报Cannot connect,问题在服务器或网络;如果能连上但-f显示0 of 20可用,说明授权被占满,需要等释放或加授权。
3. 从零部署一套可用的 Synopsys license 服务
3.1 拿到 license 资源后的第一步核对
拿到 license 文件先别急着启动,逐项核对:SERVER行的 hostname 和 MAC 是否和部署机一致(ip link或ifconfig看 MAC);VENDOR行路径下snpslmd是否存在且有执行权限;INCREMENT行的到期日是否已过;feature 名是否覆盖你要用的工具。常见做法是把 license 文件里所有INCREMENT行的 feature 名提取出来存一份清单:
grep -E '^(INCREMENT|FEATURE)' synopsys.dat | awk '{print $2}' | sort -u > feature_list.txt这份清单后面排查license request failed for feature时直接对照,比翻文件快得多。
3.2 启动脚本与 systemd 常驻配置
生产环境不建议手工敲 lmgrd,用 systemd 托管更稳。写一个 unit 文件:
[Unit] Description=Synopsys License Server After=network.target [Service] Type=forking User=eda ExecStart=/opt/synopsys/linux64/bin/lmgrd -c /opt/synopsys/license/synopsys.dat -l /var/log/snps.log ExecStop=/opt/synopsys/linux64/bin/lmutil lmdown -c /opt/synopsys/license/synopsys.dat -q Restart=on-failure [Install] WantedBy=multi-user.targetType=forking是因为 lmgrd 会 fork 出 snpslmd 后自身转入后台。ExecStop用lmdown优雅关闭,直接 kill 进程可能导致 license 句柄未释放,下次启动报端口占用。Restart=on-failure让服务器异常退出后自动拉起。
3.3 端口、防火墙与主机名解析的联动检查
license 服务默认走 27000 端口,客户端连不上十有八九是这三件事之一:端口被防火墙拦、主机名解析不到、端口被别的进程占了。检查顺序:
# 端口是否在监听 ss -tlnp | grep 27000 # 从客户端测连通性 telnet eda-server 27000 # 主机名解析 getent hosts eda-server如果ss显示 lmgrd 没监听 27000,看日志里是不是Failed to open the TCP port,那通常是端口被占或权限不足(低于 1024 的端口需要 root)。主机名解析失败就在客户端/etc/hosts里补一条IP eda-server,比改 DNS 快。
3.4 多版本工具共存时的 license 合并策略
一个团队往往同时用 VCS 多个版本、Verdi、DC、PT,license 文件可能来自不同批次。合并时把多个文件的INCREMENT行汇总到一个文件,SERVER和VENDOR行只保留一份。注意 feature 名冲突:不同版本可能用同一个 feature 名但授权数不同,合并后以先出现的为准,容易导致高版本工具拿不到授权。稳妥做法是按工具分文件,用SNPSLMD_LICENSE_FILE冒号分隔多个源:
export SNPSLMD_LICENSE_FILE=27000@eda-server:27001@eda-server每个端口对应一个独立的 lmgrd 实例和 license 文件,互不干扰。
4. 典型报错逐条拆解与修复路径
4.1 license request failed for feature 的定位流程
这个报错后面通常跟 feature 名和错误码。定位三步:第一步lmutil lmstat -f <feature>看服务器端该 feature 是否存在、是否被占满;第二步核对客户端工具版本和 license 里该 feature 的版本号是否匹配(license 里2026.12表示支持到该版本);第三步看SNPSLMD_LICENSE_FILE是否指向了正确的服务器。如果lmstat显示 feature 存在且有空闲,但客户端仍报错,多半是客户端环境变量指向了另一台服务器。
4.2 Cannot connect to license server 的网络层排查
这个报错发生在客户端连不上 lmgrd。按网络分层查:ping eda-server通不通;telnet eda-server 27000端口通不通;lmutil lmstat -c 27000@eda-server能否握手。三层都通还报错,检查客户端是否设了LM_LICENSE_FILE指向了错误地址,或者SNPSLMD_LICENSE_FILE里有多个源其中一个是坏的。常见做法是临时只保留一个源测试:
export SNPSLMD_LICENSE_FILE=27000@eda-server vcs -full64 -ID-ID让 VCS 打印它实际用的 license 信息,比猜快。
4.3 snpslmd 启动失败与日志关键行解读
lmgrd 起来了但 snpslmd 没起来,日志里会有明确行。常见几类:
| 日志关键行 | 含义 | 处理 |
|---|---|---|
Failed to open the TCP port | 端口被占 | 换端口或杀占用进程 |
Wrong hostid on SERVER line | MAC 不匹配 | 改 license 或改网卡 |
snpslmd: cannot execute | 路径错或无执行权限 | 检查 VENDOR 行路径 |
Expired license | 授权过期 | 换新 license |
Invalid license key | 文件被篡改或格式错 | 重新获取 |
日志路径就是启动时-l指定的文件,tail -f盯着看,启动瞬间的错误最清楚。
4.4 虚拟机克隆后 MAC 变化导致的授权失效
虚拟机克隆是 license 失效的重灾区。克隆后新虚拟机网卡 MAC 变了,但 license 文件里SERVER行还是旧 MAC,lmgrd 启动直接报Wrong hostid。两种处理:一是把新虚拟机 MAC 改回旧的(VMware 里编辑 vmx 文件ethernet0.address),二是重新生成 license。前者快但多台克隆会冲突,后者正规但需要重新走授权流程。临时应急可以在 license 文件里把SERVER行的 MAC 改成新机器的,但要注意这属于本地调试手段,正式环境还是走正规授权。
5. 让 license 服务更稳的几个进阶技巧
5.1 用 lmstat 做授权占用的定时巡检
授权被占满往往发生在项目冲刺期,与其等报错不如定时巡检。写个脚本每 10 分钟记录一次关键 feature 的占用:
#!/bin/bash # 巡检脚本,输出到日志供后续分析 LMUTIL=/opt/synopsys/linux64/bin/lmutil SERVER=27000@eda-server for feat in vcs_sim Verdi dc_shell pt_shell; do echo "=== $(date) $feat ===" $LMUTIL lmstat -c $SERVER -f $feat | grep -E 'Users of|Total of' done >> /var/log/license_monitor.loggrep抓Users of和Total of两行,前者看谁在用,后者看总量和已用。跑一段时间后能看出哪个 feature 是瓶颈,为加授权提供依据。
5.2 授权超时释放与 timeout 参数调整
FlexNet 默认在客户端异常退出后一段时间才释放授权,这个时间由 license 文件里的TIMEOUT或工具自身的 heartbeat 决定。如果发现用户关了工具但授权没释放,可以在 license 文件VENDOR行加TIMEOUT=300(单位秒),让 snpslmd 更快回收。注意这个值设太小可能误杀正常但空闲的会话,300 到 600 秒是常见区间。改完重启 lmgrd 生效。
5.3 客户端侧减少 license 争抢的配置习惯
除了服务器端,客户端也有优化空间。VCS 编译时用-licqueue让工具在授权不足时排队等待而不是直接失败:
vcs -full64 -licqueue -f filelist.f -o simv-licqueue会阻塞直到拿到授权,适合批量跑回归的场景。另外把不用的工具及时退出,Verdi 这类图形工具常被开着不关,占着 feature 不放。团队里约定用完即关,比加授权省钱。
5.4 授权文件到期前的平滑切换
license 到期前一周就该准备新文件。切换时不要直接覆盖旧文件重启,那样正在跑的任务会中断。做法是先把新文件放到另一个路径,用新端口起第二个 lmgrd 实例,客户端SNPSLMD_LICENSE_FILE同时指向新旧两个源,等旧授权自然到期后再摘掉旧源。这样切换期间新旧任务都能跑,不会因为一次重启打断整个团队的仿真。切换完成后记得把 systemd unit 里的路径更新,避免下次重启又回到旧文件。
本文还有配套的精品资源,点击获取