ARTICLE DETAIL

资讯详情

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

Lattice Diamond 3.14安装配置完全指南:License与环境变量实战

Lattice Diamond 3.14安装配置完全指南:License与环境变量实战 其实现在还在折腾Lattice Diamond的人基本分两类一类是学校实验室或者老项目遗留必须用Lattice家的片子另一类是想低成本玩玩FPGA发现Lattice的MachXO2、ECP5这些芯片性价比确实能打尤其在一些国产替代方案里出场率不低。Diamond 3.14这个版本算是一个比较新的稳定版本界面还是那股子老派EDA的味道但功能上该有的都有从设计输入、综合、布局布线到烧录调试一条龙。关键问题是这个工具的安装过程不像装个QQ那么简单License环境变量、系统路径、驱动识别、版本兼容性每一个环节都可能卡住你半天。这篇博文就是把我自己以及身边同事装Diamond 3.14时踩过的坑集中梳理一遍从License申请到环境变量配置从Windows到Linux把那些官方文档里写得含糊、论坛里翻半天才找到答案的问题一次性讲清楚。适合刚接触Lattice平台的初学者也适合被各种报错折磨到怀疑人生的老手。1. License申请第一道坎也是最容易让人心态炸裂的坎1.1 免费License到底怎么拿别再找破解版了很多人一上来就到处找破解版或者网上流传的license文件其实Lattice官方就提供免费License而且是合法的、支持正版的那一种。免费License覆盖了Lattice全系列FPGA只是有一些功能限制比如不支持某些高级IP核、不支持部分商业级别加密特性但对于绝大多数学习和原型验证场景完全够用。申请流程比很多人想象中简单步骤如下访问Lattice官网注册一个账号注意邮箱一定要填真实有效的因为license文件会发到你的注册邮箱。注册完成后登录进入Licensing页面选择Diamond Free License。填写申请表单关键一项是申请License所对应的电脑网卡MAC地址这个必须和你实际安装Diamond的电脑一致。提交后一般等待几分钟license会以邮件附件或网页链接的形式发送给你。这里有个细节容易忽略Lattice免费License的有效期通常是1年到期后重新申请即可流程会和第一次一样不会卡你。但如果你换了电脑MAC地址变了需要重新申请。注意申请License时填写的MAC地址必须是实际运行Diamond软件那台机器的。如果笔记本有无线网卡和有线网卡两个地址建议把两个都填进去避免以后切换网络环境时license失效。1.2 MAC地址的获取姿势Win和Linux不一样Windows下查看MAC地址很简单打开命令行输入ipconfig /all找到你正在使用的网卡比如有线以太网适配器或无线局域网适配器里面会有一行“物理地址”格式类似00-1A-2B-3C-4D-5E把横杠去掉变成001A2B3C4D5E这就是license申请要填的。Linux下稍微麻烦一点因为一个机器可能有多个网卡而且有的网卡是虚拟设备比如docker0、virbr0等千万不能填这些虚拟网卡的地址。正确做法是ip link show找到你的物理网卡一般是eth0、enpXsY这种命名的看link/ether后面的地址。如果命令不存在可以试ifconfig -a看HWaddr那一行。有一个通用技巧可以解决Linux下多网卡烦恼在创建license时请填写所有物理网卡的MAC地址Lattice的license是支持多个MAC地址绑定的。我通常是直接把无线网卡和有线网卡的MAC都填上去后续切网口、换网络环境都稳。1.3 License文件放置位置别乱放也别放错拿到license文件之后名字一般叫license.dat。有人喜欢放在Diamond的安装目录下有人喜欢放桌面其实最稳妥的做法是放在一个专门、固定的目录下并且保证这个路径不包含中文、空格和特殊符号。我自己的习惯是在C盘或者D盘根目录下建一个专门的文件夹比如C:\LatticeLicense\把license.dat放进去。原因很简单后续配置环境变量的时候路径越简单越好越是路径复杂越容易出问题。之前见过一个同事把license放在桌面结果路径里面有OneDrive同步环境变量配完之后license死活起不来排查了半个小时才发现是这个原因。提示license.dat文件本质是文本文件可以用记事本打开。申请完之后建议先打开看一眼确认里面的HOSTIDMAC地址和你机器的一致SERVER行没有乱码。如果HOSTID明显不是你的MAC那说明填错了需要重新申请。2. 安装过程版本选择、组件勾选和路径里的雷2.1 3.14到底该装哪个操作系统版本Diamond 3.14支持Windows和Linux两个平台如果你只是个人学习或者小规模开发Windows版本足够了毕竟生态、驱动、烧录工具都更顺手。但如果你在公司的服务器上跑大规模编译或者需要和其他Linux端的工具链协同那就装Linux版本。这里有一个很实际的问题3.14这个版本对Windows 11的兼容性如何我实测下来Windows 11 22H2和23H2都可以正常安装运行没有遇到明显的兼容性问题但是需要在安装时以管理员身份运行安装程序并且在首次启动Diamond时也建议右键“以管理员身份运行”否则有可能出现GUI正常但某些功能权限不足的诡异问题。如果你还在用Windows 7也可以装但建议安装Visual C Redistributable 2015-2019的运行库因为Diamond的某些组件依赖这些库系统太干净会缺DLL导致启动失败。Linux版本我建议选择CentOS 7 / Ubuntu 18.04这种比较成熟的发行版如果你用的是Ubuntu 22.04这类较新的系统需要额外安装兼容库libpng12、libgfortran3这些老库否则就会遇到经典的“error while loading shared libraries: libpng12.so.0”报错。Ubuntu 20.04之后的版本默认源里已经移除了libpng12需要手动下载安装这一步很容易劝退新手。2.2 安装过程中必须勾选和可以忽略的组件Diamond 3.14安装包解压后运行setup.exe会进入组件选择界面。有几个组件我建议全部选上免得后续需要的时候又找不着Diamond Programmer烧录工具这个必须有没有它你没法往板子上烧bitstream。Microcontroller Utility管理配置存储器的工具做SPI Flash配置时经常用。Synplify Pro for Lattice这是Lattice官方主推的第三方综合工具虽然安装包很大但强烈建议装上。Diamond自带的综合器在某些场景下对时序优化确实不如Synplify Pro。ModelSim Lattice Edition仿真工具建议装调试逻辑离不开它。至于其他组件比如各类器件支持包Device Support建议全选。反正现在硬盘空间已经不缺这点容量而且一旦漏了某个器件包后期再补还麻烦。安装路径的选择是一个容易被忽略的坑Diamond对路径中的中文和空格极度不友好。虽然Windows允许文件夹名带空格但Diamond的某些底层脚本Tcl脚本、csh脚本在带空格的路径下会直接报错而且报错信息还特别抽象。所以安装路径尽量简单、纯英文、无空格比如D:\Diamond\3.14。2.3 安装完不要急着打开先检查这几个环境变量安装完成后Diamond可能会自动帮你在系统环境变量里加了一些东西但千万别依赖这个自动配置最好手动检查一遍。我遇到过几次安装程序没有正确写入环境变量的情况导致License一直加载不了。打开系统属性 - 高级 - 环境变量重点检查这几个环境变量期望值说明LM_LICENSE_FILEC:\LatticeLicense\license.dat你的license文件完整路径核心变量所有License检查都靠它LSC_DIAMONDD:\Diamond\3.14Diamond安装根目录部分工具链脚本会引用PATH需要包含D:\Diamond\3.14\bin\nt64等bin目录命令行调用pnmain、diamondc等工具时需要如果没有就手动添加。尤其是LM_LICENSE_FILE这个变量的正确性直接决定了你能不能正常启动Diamond。3. 环境变量配置License加载的核心逻辑与三种推荐做法3.1 为什么License和环境变量绑定这么紧很多第一次接触EDA工具的初学者会困惑我用的是免费License文件都拿到手了为什么软件还要专门去读环境变量这里面其实有一套通用的授权机制Diamond用的是FlexNet也就是以前FlexLM那套授权体系。软件启动时会去查找license信息而查找的顺序依次是当前目录下的license.dat环境变量LM_LICENSE_FILE指定的文件默认的几个标准路径如C:\flexlm\license.dat等如果你的LM_LICENSE_FILE没配好Diamond就会默认找标准路径找不到就报错。这就解释了为什么很多新手明明把license文件放到了安装目录里软件还是提示找不到license——因为安装目录并不在FlexNet的默认搜索路径里。3.2 推荐做法一用户级别环境变量推荐新手如果你是个人电脑只用一个Windows用户那直接在用户变量里添加LM_LICENSE_FILE即可。好处是无需管理员权限改起来方便不会影响系统全局配置。操作路径设置 - 系统 - 关于 - 高级系统设置 - 环境变量 - 在“用户变量”中新建变量名LM_LICENSE_FILE变量值填license文件的完整路径。注意填写变量值时文件路径必须精确到license.dat本身不是文件夹路径。这个问题超级常见填错的话Diamond会报“Cannot find license file”一类的错误。3.3 推荐做法二系统级别环境变量多用户/服务器场景如果是实验室、公司里的共享机器或者你切换用户登录后不希望License设置失效那就配置系统级别的环境变量。操作和用户级几乎一样只是在“系统变量”里新建。系统级环境变量还有个额外好处某些Lattice工具在后台以服务方式运行时只认系统环境变量不认用户级变量配置系统级可以避免这类隐患。不过系统级变量改动需要管理员权限而且改完之后建议重启一次电脑让系统环境生效有些情况下重启资源管理器或者重新登录也能生效但最稳妥的还是重启。提示Windows环境变量修改后已经打开的命令行窗口不会自动获取新值必须新开一个命令行窗口才可以。很多人改了环境变量后依然报错其实只是没重启终端导致的误判。3.4 推荐做法三启动脚本/批处理文件进阶玩法灵活切换License还有一种进阶经验如果你手头有多个License比如实验室有几个不同的License或者经常在不同电脑间切换授权可以写一个批处理脚本在启动Diamond前动态设置环境变量这样就不用反复折腾系统设置了。比如我在公司有时候需要在不同的License之间切换就写了这样一个bat脚本echo off set LM_LICENSE_FILEC:\LatticeLicense\license.dat start D:\Diamond\3.14\bin\nt64\pnmain.exe把这个脚本放在桌面每次双击启动即可。好处很明显不同项目、不同License之间互不干扰切换时只需要改bat里的一行路径不用动系统环境变量。Linux下同理在shellrc或者自定义脚本里用export即可export LM_LICENSE_FILE$HOME/lattice_license/license.datLinux用户如果不喜欢写死在.bashrc里也可以写成单独的启动脚本灵活性更高。3.5 PATH变量里必须包含的目录除了LM_LICENSE_FILEPATH变量的配置同样影响体验。Diamond装完后其核心可执行文件都放在安装目录下的bin\nt64Windows 64位或bin\lin64Linux 64位文件夹里。如果你想在命令行里调用pnmain打开图形界面、调用diamondc执行Tcl脚本、或者用pgmcmd做命令行烧录就必须把这些路径加进PATH。Windows添加PATH在系统环境变量的PATH中新增一行D:\Diamond\3.14\bin\nt64。Linux添加PATH在~/.bashrc或~/.zshrc里加入export PATH$PATH:/usr/local/diamond/3.14/bin/lin64然后在终端运行source ~/.bashrc即可生效。注意PATHTEXT的顺序问题如果之前装过其他版本的DiamondPATH里可能已经残留了旧版本的路径这会导致命令行敲pnmain时启动的其实是旧版本。排查办法是终端输入where pnmainWindows或which pnmainLinux确认指向的是不是3.14的安装目录。4. 安装与配置过程中的高频报错与我的排查实录4.1 License报错License request failed for feature这是出现率最高的报错没有之一。完整报错通常是License request failed for feature PROJECT_SYSTEM(-97) The desired vendor daemon is down (-97)这个报错信息很有迷惑性让很多人误以为是vendor daemon即lmgrd没启动。但Diamond 3.14的免费License是节点锁定类型的根本不需要启动lmgrd它读取的是license文件本身的内容。出现这个报错最常见的原因就是LM_LICENSE_FILE路径不对或者文件内容有问题。排查顺序我建议按这个来确认环境变量是否配置成功命令行里输入echo %LM_LICENSE_FILE%Windows或echo $LM_LICENSE_FILELinux看输出内容是不是license文件的完整正确路径。确认license文件是否为有效的文本且没有被损坏双击打开license.dat看开头是否有SERVER或VENDOR或INCREMENT关键字。有时候浏览器下载会重复追加后缀比如license.dat.txt这种情况把文件名改回来即可。确认MAC地址匹配License文件里会有HOSTIDxxxxxxxxxxxx这行用ipconfig /all或ip link对比当前机器的物理MAC地址是否一致。排查完这三步90%以上的License request failed都能解决。剩下的10%可能是安装或其他更隐蔽的问题。4.2 GUI启动报错Failed to create secure lic或者直接闪退如果你确认环境变量配置没问题license文件也能正常读取但Diamond的GUI还是启动失败一种常见的情况是缺少VC运行库或者Java运行时环境版本冲突。Diamond的部分辅助组件依赖Java但3.14版本对Java版本比较敏感同时安装了多个版本的Java套件后它们之间可能互相干扰导致GUI启动时某个组件初始化失败。我遇到的一次是电脑上装了JDK 17作为开发工具结果Diamond的License管理组件直接罢工后来在启动Diamond前临时在环境变量里把JAVA_HOME指向JDK 8就正常了。不过这个属于兼容性问题不是所有机器都会遇到遇到了可以试试用前面推荐的启动脚本方式隔离环境。闪退还有一个常见原因显卡驱动或OpenGL兼容性问题。Diamond的GUI是基于Tcl/Tk和某些图形组件的老旧的显卡驱动可能无法正确渲染导致启动后闪退。这种情况可以试试禁用硬件加速或者升级显卡驱动。Linux下闪退尤其常见有些发行版缺少必要的X11库启动时也会直接崩溃。4.3 编译/综合阶段报错Unable to determine version和环境变量未定义这类报错出现在综合或布线阶段往往是安装时漏装了组件或者环境变量PATH配置不完整。Diamond内部会调用一系列子工具python、perl脚本等如果这些子工具的依赖路径没有正确加入就会报找不到文件的错误。排查思路仔细看报错信息的第一个路径它指向哪个目录。如果是D:\Diamond\3.14\bin\nt64下某个exe找不到检查PATH如果是某个IP目录下的文件找不到检查LSC_DIAMOND环境变量是否指向了正确的安装根目录。此外Windows上安装Diamond 3.14之前建议先关闭所有杀毒软件和实时保护。Diamond安装过程中会有大量写注册表和更新环境变量的操作杀毒软件拦截了其中某个动作就可能导致安装不完整后续编译时报各种莫名其妙的问题。我见过最夸张的一次是卡巴斯基把license.dat当成可疑文件直接隔离了导致License时好时坏最后在白名单里加回来才恢复正常。4.4 烧录时找不到设备JTAG驱动和USB驱动问题Diamond Programmer连接FPGA板卡时提示找不到设备这个问题的原因集中在驱动层面。很多国产开发板用的是FTDI芯片FT2232H等来做USB-JTAG桥接而Windows系统不会自动安装FTDI驱动需要你手动安装一个FTDI Virtual COM Port驱动。安装完驱动后在设备管理器里能看到一个“USB Serial Converter”设备这是正常的但还需要确认它被正确识别。如果设备管理器里显示的是未知设备或者带黄色感叹号那就需要重新安装驱动。Linux下烧录麻烦一点需要确保当前用户对USB设备有访问权限。常见解决办法是把用户加入plugdev组sudo usermod -a -G plugdev $USER然后重新登录再次插入USB设备确认dmesg里能看到设备信息。4.5 32位和64位版本软件混装问题Diamond 3.14有些组件是32位的有些是64位的。Windows版本默认安装在Program Files还是Program Files (x86)取决于早期安装时选择的架构。如果你的操作系统是64位的但Diamond装到的是x86目录那么部分64位的外部工具链可能无法自动识别到安装路径。这种情况并不多见但如果遇到编译时某些工具报“模块找不到”的错可以检查一下安装路径和bin目录的架构是否匹配。Lattice官方推荐Windows 64位系统安装默认的64位版本不要在同一个系统上混装32位和64位Diamond免得注册表环境变量互相覆盖导致License问题。5. 安装完成后的第一件事用一条demo工程验证全流程5.1 为什么要做环境验证License配好了、环境变量也调好了但如果你不做一个完整的demo工程跑一遍你根本不知道自己的环境是不是真的“能用”。很多坑是要到具体编译、仿真、综合、布线、烧录、调试全流程走一遍才会暴露出来的。这么做还有一个好处一次性把所有问题暴露出来比做到一半才发现环境有问题再返回去排查要高效得多。5.2 建一个最简单的工程跑通全流程我的习惯是新建一个工程选具体的器件型号比如MachXO2系列或ECP5系列然后新建一个顶层Verilog或者VHDL文件写一个最简单的逻辑——比如一个分频器或者一个计数器然后进行综合和布局布线最后生成bitstream文件再通过Programmer烧录到开发板上。几步关键操作启动Diamond选择File - New - Project输入工程名全英文不要带空格中文。在Device Selection界面选择具体的器件型号比如MachXO2-1200封装、速度等级根据你的板子实际型号来。新建源文件写一个最简单的Verilog代码接入时钟和复位输出一个分频信号。综合Run Synthesis按钮。这里如果综合工具选择的是Lattice Synthesis EngineLSE或Synplify Pro结果都能接受但推荐直接用默认的LSE简单省事。布局布线Run Place Route看是否有时序违规没有则生成bitstream。打开Programmer连接开发板下载bitstream看板子的LED是否按预期闪烁。如果全流程跑通恭喜你这个环境算是真正配好了。如果中间任何一个环节出错按报错提示回查即可大部分问题在上面的章节都有对应解法。5.3 验证过程中最容易踩的坑验证过程中我见过最多的问题是有人在代码里写了时钟频率很高的逻辑比如100MHz以上的时序逻辑结果布局布线后出现时序不满足的错误然后慌了以为是工具环境问题。这时候可以先降低时钟频率比如用开发板自带的低频时钟一般会有12MHz或25MHz的板载晶振确保工具环境正常时序报错那属于设计问题范畴不是安装配置问题。另一个坑是有些开发板默认烧录的是其他厂商的bitstream你在Diamond里建工程时选错了器件型号烧录时Diamond Programmer会提示ID mismatch或者直接报错。这种问题很常见去你的板子规格书或者原理图里确认准确型号不要想当然选一个。6. 从Windows到Linux跨平台安装的关键差异6.1 Linux安装包和依赖说明Diamond 3.14的Linux安装包是一个.tar.bz2或.run文件。解压后运行安装脚本流程和Windows差不多但前期准备工作会多一些。比较稳妥的做法是先安装必要的依赖库尤其是CentOS/RHEL系的老库sudo yum install glibc.i686 libusb libusb-devel libftdiUbuntu系sudo apt-get install libusb-1.0-0-dev libftdi1 libftdi-dev如果你在Ubuntu 20.04以上系统安装还需要手动安装老版本libpng和libgfortran因为Diamond编译时链接的是老版本库sudo apt-get install libpng-dev libgfortran4这个过程比较折腾但装好之后就不会再被依赖问题困扰。6.2 Linux下License的路径和环境变量细节Linux下的license管理逻辑和Windows一样核心也是LM_LICENSE_FILE环境变量。但Linux有一点特别容易踩坑当前用户没有license文件的读取权限。排查方式是切换到普通用户然后尝试cat /path/to/license.dat如果提示Permission denied需要给文件合理的权限sudo chmod 644 /path/to/license.dat另外别忘了license文件所在目录的执行权限否则即使是root之外的用户也无法遍历目录读取文件。6.3 Linux下的烧录权限和用户组Linux下烧录失败是最常见的大概率是权限问题。装完Lattice的USB驱动后还要加入plugdev用户组这一点在4.4节已经说过。补充一个细节某些板卡使用的USB转JTAG芯片在Linux下会被识别为ttyUSB设备而非USB设备需要确保用户有串口设备访问权限否则Programmer会提示无法打开发行端口。最简单的做法是临时切到root用户跑一次烧录验证确认是权限问题后再正确配置用户组。7. 进阶命令行模式、版本兼容和多版本共存7.1 用diamondc命令行脚本替代GUIDiamond 3.14支持命令行模式的工程管理和综合布局布线你可以把整个流程写成一个Tcl脚本然后通过diamondc命令运行。这在批量编译或者服务器上跑job时非常有用也便于版本管理。比如一个最简单的脚本run.tclprj_create my_project prj_set_device -device LCMXO2-1200HC-4TG100C prj_set_source -file top.v prj_run Synthesis prj_run Translate prj_run Map prj_run PAR prj_run GenerateBitStream然后命令行运行diamondc run.tcl命令行模式对环境变量的依赖更加严格因为少了GUI的容错机制。如果LM_LICENSE_FILE或PATH有问题命令行模式会非常直接地报错不会给你留下任何模糊空间所以如果前面GUI已经跑通了命令行模式基本没有障碍。7.2 老版本工程在3.14上的兼容问题如果你之前用的是Diamond 3.11或者3.12打开3.14时会遇到工程迁移提示一般都能自动转换。但有一些老IP核比如锁相环PLL的配置可能会在迁移后出现参数丢失需要你重新生成IP核。还有一点值得留意3.14生成的bitstream可能无法在老版本的Programmer中打开。这是因为不同版本间FPGA的配置文件格式存在细微差异使用时需要保持工具版本和设计版本的一致性多人协作时也要约定好统一版本不然互相传工程会非常痛苦。7.3 多版本Diamond共存是否安全开发环境里装多个版本Diamond比如3.13和3.14虽然技术上可行但不推荐。原因是它们的环境变量和部分共享组件尤其是license配置和tcl库会互相影响后安装的版本可能覆盖前一个版本的某些配置导致老版本启动异常。如果确实需要多版本共存我的经验是提前给每个版本建立一个独立的环境变量配置脚本并且写清楚各自的LM_LICENSE_FILE路径。但是注意License文件并没有随版本变化只要LM_LICENSE_FILE保持一致就不会有问题。在这种情况下最容易出问题的反而是PATH里的工具版本指向所以切换版本时务必检查where pnmain或which pnmain。8. 一些真正的经验总结文章写到这里该讲的坑基本都讲完了。最后分享几点我实际使用中的体会。第一Lattice Diamond的安装难度并不在于软件本身而在于它依赖的授权机制和环境变量体系比较复杂。很多人卡在License上但其实只要理解了FlexNet的查找顺序80%的问题都能自己排查出来。不要一遇到问题就重装软件而是先在命令行里验证环境变量是否生效这是一个低成本高回报的调试习惯。第二Diamond 3.14相比早期版本在稳定性上有了不小的提升但依然不是那种“一路下一步就能搞定”的软件。找一个已经成功跑通的同型号工程复制它的配置和环境远远比从头自己琢磨要快。遇到问题先去Lattice官网的支持论坛搜一搜很多坑别的工程师早就踩过了。第三如果你的开发场景涉及Linux服务器批量编译或自动化测试一定要学会用diamondc命令行模式并且把环境配置脚本化和版本化别依赖GUI手工点选。毕竟FPGA工程的完整流程如果全部依赖GUI你后期做脚本化集成时会非常痛苦。最后再分享一个小技巧如果你申请License时填了多个网卡的MAC地址拿到license后在笔记本、台式机之间切换使用会比较方便但仍然建议每个长期使用的机器单独申请一份License这样在出问题时定位也更干净。
返回列表