ARTICLE DETAIL

资讯详情

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

ModelSim报错:Unable to checkout a viewer license全解析与修复指南

ModelSim报错:Unable to checkout a viewer license全解析与修复指南 很多ModelSim用户第一次看到这个弹窗的第一反应大概率是一脸懵编译、仿真都看不出问题脚本跑得顺顺的结果一打开图形界面就弹出一句“Unable to checkout a viewer license necessary for use of the ModelSim graphical user interface.Vsim”。这个报错既不是仿真代码的问题也不是安装包损坏而是许可证分配机制里一个非常具体、又特别容易被忽视的环节。它出现在vsim启动图形界面的瞬间通常意味着你已经拿到了仿真核心的许可证但GUI对应的查看器功能没有被正确授予。这篇文章就围绕这个报错把排查思路、常见误区、实际修复步骤都摊开讲一遍尤其适合那些电脑上同时装过多种EDA工具、或者在公司浮动许可证环境下使用ModelSim的读者。1. viewer license 到底是谁在用错误发生前的启动链路1.1 vsim 的两次 license 握手你可能没有意识到ModelSim 的许可证机制在 GUI 启动过程中会有多次索取操作。vsim 启动时至少会经历两轮单独的 license 检查第一轮检查是确认模拟内核的核心功能第二轮则是在图形界面各组件初始化之前单独去索取 viewer license。图中这个错误提示的就是第二轮失败了。有一个很容易被忽略的细节命令行模式和图形模式在 ModelSim 里走的是两套授权路线。vsim -c这种命令行方式通常只要求基础仿真功能而直接打开带图形界面的 vsim被要求的功能组合会更多。如果你总是用命令行跑仿真可能很长时间都碰不到这个错。一旦项目要求打开波形窗口、数据流窗口或者源码检查窗口viewer license 的检查才会真正被触发。1.2 GUI 组件与命令行模式的分水岭viewer license 里的“viewer”到底指什么如果你只看字面意思会觉得它就是“波形查看器”。实际上它覆盖的范围比这大得多波形窗口Wave、数据流窗口Dataflow、源码窗口Source、信号列表窗口以及启动 GUI 时建立的那一套交互前端全都被包含在 viewer 相关功能集合里。你可以把 ModelSim 的图形界面想象成一栋办公楼的前台区域而仿真内核则是后场的机房。拥有后场的门禁卡不代表你就能进入前台接待区两套门禁系统互相独立。工具厂商当初之所以把 GUI 单独拆成一个授权功能本质上是为了让纯命令行用户在跑回归测试时不占用图形相关的 license 额度。可这个合理设计在本地许可证文件残缺、或者环境变量混乱时就成了用户最头疼的报错来源。1.3 最容易触发这个错误的三种共存环境根据我接触过的真实案例下面三类环境的用户碰到这个问题的概率明显偏高环境类型典型触发时机核心问题同时安装独立版 ModelSim 和 Vivado/Quartus 自带版本打开某一套集成仿真环境时两套工具互相争夺许可证搜索路径公司使用局域网浮动许可证服务器白天高峰时段启动 GUI服务器功能列表里缺少 viewer 对应功能电脑上装过多个 Mentor/Siemens 产品重装或升级 ModelSim 之后陈旧 license.dat 文件被 FlexNet 主动找到这三种情况的共同点就是许可证来源不止一个。ModelSim 会按照自己的搜索顺序去选择一个“它认为”正确的授权来源而这个来源如果缺失 viewer feature就会弹出标题里的提示。2. 排查中最常见的三个误区它们让问题多绕了几天2.1 误区一觉得 license 文件消失了其实它是太多了我在很多私信里被问到“我的 license.dat 明明在安装目录里为什么找不到 viewer license”这里真正的问题往往不是“找不到”而是“找到了太多”。FlexNet 许可证体系有一个特点它不只是读取你环境变量里指定的那一个文件还会扫描一些默认位置。比如 Windows 下的C:\flexlm、用户主目录、当前启动目录都有可能是它顺手访问的地方。如果你今天装 PADS 装了一个 license.dat明天试了个试用软件又生成了一个 .lic后天打开某个工程目录里还残留着一个旧 license 文件那 ModelSim 的授权选择就会变得很不可控。我遇到过一台机器上有四个 license 相关文件的极端情况一个在 ModelSim 安装目录一个在 C:\flexlm一个在另一款 EDA 工具的安装路径还有一个就在用户主目录里。启动 GUI 时ModelSim 选择了包含核心仿真功能但不包含 viewer 功能的那个文件最后就报出这种让人摸不着头脑的错误。所以遇到这个报错不要只问你“许可证在哪”而要问“这一次启动许可证到底是从哪里被选中的”。2.2 误区二总觉得许可证服务器挂了其实功能不完整如果你的授权来自局域网里的许可服务器看到 checkout 失败的第一反应是检查服务器是不是没启动。但我必须提醒一句这个报错文案描述的不是连接失败而是功能索取失败。两者在排查路径上的方向完全不同。连接失败会明确说“could not connect to any license server”或者“server is down”这类错误指向网络通畅性、端口状态、服务进程。而标题里的 “Unable to checkout a viewer license”更多说明许可证服务器已经被访问到、并且响应了请求只是它手里没有 viewer 这个功能或者该功能当前已经被别人占满。我见过有人因为这类问题反复重启服务器重启了好几轮都没用。lmstat 输出里明明能看到 ModelSim 主功能在正常发放但 GUI 就是起不来原因就是 feature 列表里差了一个 viewer。这种时候去找服务器管理员核对功能清单比持续折腾服务器进程高效得多。2.3 误区三想通过重装解决结果环境变量纹丝未动这是新手最容易踩的坑。遇到任何许可证报错总有人的第一反应是“卸载重装”。坦率地讲重装 ModelSim 改变的是安装目录下的二进制文件、库文件和自带配置文件它不会自动替你清理环境变量也不会删除散落在各个目录里的旧 license 文件。核心问题在于许可证文件的搜索路径很大一部分由环境变量决定而环境变量是操作系统层面设置的跟 ModelSim 程序的安装卸载是两条线。你重装十次只要环境变量还指向旧的许可证服务器或者用户主目录下面还躺着那个旧 license.dat报错就会不依不饶地出现。正确做法是先做一套完整的许可证环境清理再考虑重装反过来的顺序基本是在浪费时间。3. 可以复制的定位流程从环境变量开始到服务器功能结束3.1 LM_LICENSE_FILE 与 MGLS_LICENSE_FILE先确认谁在起作用ModelSim 的许可证搜索主要受两个环境变量影响LM_LICENSE_FILE和MGLS_LICENSE_FILE。前者是 FlexNet 体系通用变量很多软件都会读取后者是 Mentor Graphics/Siemens EDA 软件特有的变量ModelSim 对其识别度很高。麻烦就在于这两个变量如果同时存在ModelSim 的读取优先顺序在不同版本里是有差异的。但有一个最常被踩到的情况电脑上原来装过别的 EDA 工具它把LM_LICENSE_FILE指向了自己的许可证服务器结果你装 ModelSim 时没有清理vsim 启动时也会顺着这个变量去目标服务器上找授权。服务器那边根本没有你的 ModelSim 授权或者只有残缺功能自然就 checkout 不到 viewer license。所以排查第一步不是去翻安装目录而是先把这两个变量的当前值摆到桌面上。检查命令如下Windows 在 cmd 里执行set LM_LICENSE_FILE set MGLS_LICENSE_FILELinux 终端里执行echo $LM_LICENSE_FILE echo $MGLS_LICENSE_FILE如果结果为空不要高兴太早可能还有默认搜索路径里的文件参与如果有值先确认值指向的路径或服务器是否真的包含你正在使用的 ModelSim 版本对应的授权。3.2 找出机器上的全部许可证文件别放过用户主目录环境变量确认之后第二步是把全盘范围内的许可证文件找出来。这里要特别留意两个位置一是 Windows 的用户主目录二是 Linux 下你平时的 home 目录。因为 FlexNet 在无法得到明确指引时会去这些位置兜底搜索默认文件名license.dat。Windows 下建议执行where /r C:\ license.dat 2nul dir /s /b C:\Users\*.lic 2nulLinux 下建议执行find / -iname license*.dat 2/dev/null find / -iname *.lic 2/dev/null这一步花不了一分钟但能极大缩短排查时间。很多人不会想到自己 home 目录里还躺着一个五六年前装软件时留下的 license.dat而它恰恰就是整个问题的导火索。找到之后不要立刻删除先重命名成license.dat.bak退出重启 ModelSim 看是否仍有报错这是最快验证根因的方法。3.3 lmstat、lmdiag 与本地文件验证的真实输出如果你的授权来自局域网服务器建议使用 FlexNet 自带工具lmutil来查看状态lmutil lmstat -a -c 27000192.168.1.10把端口和 IP 替换成你的实际情况。输出会列出服务器上所有 feature 名称、版本、授权数量、已用数量。你在这一大堆输出里要做的是去找有没有 viewer 相关的 feature并且看当前占用情况。如果主功能有viewer 功能完全没列出那就直接定位到了问题根因。如果是本地单文件授权用lmdiag会更直接lmutil lmdiag -c C:\modeltech\license.dat这个工具会告诉你某个具体功能为什么 checkout 失败包括功能不存在、版本不匹配、被占满等原因。它的诊断粒度比弹窗提示清晰很多强烈建议遇到类似问题时优先使用。4. 修复方案、临时绕过与长期预防的经验4.1 不让 GUI 卡住项目的临时手段vsim -c 命令行模式排查许可证问题需要时间但项目进度等不起。如果当前任务只是跑仿真、收集波形数据可以先绕过 GUI用命令行模式把仿真流程跑起来。命令写得很直白vsim -c -do log -r /*; run -all; quit -f work.tb_top这条命令的含义是不启动任何图形窗口把工程里的仿真跑完记录全部信号到 WLF 文件后退出。缺点是你在仿真过程中看不到即时波形但仿真结果已经保存下来后续可以等其他手段查看。所以我处理这类问题时总会先问一句你现在是必须看波形还是只需要拿到仿真结果如果是后者命令行模式完全可以先顶上。它不解决 viewer license 的缺失问题却能保证验证工作不因授权弹窗而停摆。4.2 清理许可证来源并统一到单一变量处理完整修复时我的推荐步骤是这样第一步把前面排查中找到的非授权目录许可证文件全部重命名建议统一改成.bak后缀。包括用户主目录下的license.dat、C:\flexlm下残留的旧文件、工程目录里的试用文件。第二步清理环境变量让 ModelSim 只认一个授权来源。Windows 下可以把MGLS_LICENSE_FILE设置为你正式许可证文件的完整路径例如setx MGLS_LICENSE_FILE C:\modeltech_2020_4\win64_2020_4\license.datLinux 则在.bashrc里加入export MGLS_LICENSE_FILE/opt/modeltech/license.dat第三步如果原先的LM_LICENSE_FILE指向的是别的软件许可证服务器并且 ModelSim 不需要它那就把用户变量从系统环境中去掉避免干扰。这一步完成之后重新打开 ModelSim 并启动仿真。根据我的经验一半以上的 viewer license 问题在完成上述清理之后就会消失根因就是旧的、不完整的许可证文件抢占了搜索路径。4.3 本地许可证与浮动服务器并存时的取舍本地有 license 文件、同时又有浮动许可证服务器的情况下ModelSim 的搜索行为有时候会让人挠头。默认逻辑里许可证服务器通常被当作更权威的来源所以搜索顺序会比较靠前。如果服务器上缺少 viewer 功能而本地文件反而是完整的话就会产生一种诡异现象本地明明放着一份能用的许可证vsim 却舍近求远去服务器上找了一份残缺的授权。这种情况的解法是果断取舍。要么统一用浮动服务器并让管理员把完整功能补齐要么明确放弃服务器只让本地文件参与授权。最忌讳的是两个来源都保留还指望 ModelSim 每次都精确选到你期望的那一个。授权来源数量越少启动时的不确定性就越低。这里有一个细节值得多写一句如果公司服务器使用的 feature 版本是旧的而你安装的是 ModelSim SE-64 2020.4 之类的新版本服务器端的 feature 版本可能不满足客户端要求。这时候报错文案并不会直接说“版本不匹配”而是笼统地给出 checkout 失败。用lmdiag检查时重点看它是否报告版本问题再跟管理员确认服务器上的 feature 是否需要升级。4.4 一句话总结排查顺序以及多工具共存时的使用习惯我把这套思路压缩成了一个顺序先看环境变量指向哪里再看机器上有哪些许可证文件接着看文件或者服务器里包含哪些 feature最后确认版本是否匹配。这个顺序在 ModelSim 上适用在其它依赖 FlexNet 的 EDA 工具里也适用。很多反复出现的“灵异许可证问题”最后都被证明是顺序没有理清要么直接跳到最后一步去查 feature结果被一堆文件名干扰要么只盯着环境变量忽略了 home 目录里的默认扫描文件。另外如果你的电脑上同时装了多个 EDA 厂商工具养成一个好习惯能省掉很多麻烦每装一套新工具先检查当前生效的LM_LICENSE_FILE和MGLS_LICENSE_FILE不要让后装的工具覆盖掉你 ModelSim 正常可用的授权路径。我在实际排查中见过最常见的操作就是先装了 Vivado后装 ModelSim结果 Vivado 安装过程把它自己的许可证路径写到了系统变量里ModelSim 再启动时就跟着踩进坑里了。最后分享一个处理原则先把 GUI 之外的事情处理完再回头解决查看器许可证的问题。命令行仿真模式让验证流程不中断排查期间整体效率受影响最小这个顺序在我处理不止 ModelSim、还包括其它依赖 FlexNet 的验证工具时都有效。如果你自己也遇到过类似弹窗我猜八成也是被某一份被遗忘的 license.dat 影响了对照本文这套流程走一遍大概率能定位到那个躲在角落里的元凶。
返回列表