帮人装Quartus这事,我前前后后做了不下二十次。每次看到群里有新人卡在同一个地方——安装包下了好几个G,装到一半报错,或者软件好不容易起来了,一仿真波形全是红线——我都恨不得把屏幕伸过去替他把配置点好。这篇文章把Quartus Prime 18.1和ModelSim从下载、安装、授权到联合仿真的完整流程拆开揉碎,按我实际动手的顺序一步步走一遍。如果你刚接触FPGA但不想在环境搭建上浪费太多时间,或者已经装过一次但被各种报错折腾得想重装系统,这篇文章基本能把你能踩的坑提前帮你踩完。
顺便先把话放在前面:中文互联网里满天飞的“破解”,在FPGA这个圈子里,绝大多数时候并不是什么高深的黑客操作,而是指把授权文件(license.dat)正确部署到系统里,让软件觉得自己“有证上岗”。我把这个流程拆成了清晰的几步,你照做就行,不用东拼西凑看七八篇帖子。
1. 装前摸底:这台电脑到底能不能跑Quartus 18.1
1.1 版本选型:18.1家族里你该装哪个
Quartus Prime 18.1虽然名字只差一个后缀,但实际分成三个差异很大的家族:Standard、Lite、Pro。
- Standard Edition:功能最全,支持Cyclone V、Cyclone 10 LP、MAX 10、Arria V等主流中低端器件,是绝大多数教材和课程使用的版本。
- Lite Edition:免费但器件支持范围缩水,只支持Cyclone IV、Cyclone 10 LP、MAX 10这几个系列,对学习来说其实够用,但很多实验代码是围绕Cyclone V写的,如果用Lite版而板子是Cyclone V,就会遇到器件不支持的问题。
- Pro Edition:面向高端器件(Arria 10、Stratix 10等),功能和授权门槛都更高,普通学习和教学完全用不到。
我推荐你选Standard 18.1,这也是标题里那个版本。它发布早、生态成熟,网上能找到大量配套教程,遇到问题搜索引擎一搜基本都有答案。注意不要手滑装了Pro版,然后发现自己的板子型号根本不在支持列表里。
还有个小细节:18.1这个版本号没有17.x那些早期固件坑,也比19.x及以后版本的界面更稳定,很多大学实验室至今还在用18.1,不是没有道理。
1.2 硬件需求与磁盘空间估算
Quartus不挑显卡也不吃CPU单核性能,但对内存和磁盘空间有硬性要求。我的经验值是这样:
- 内存:8GB是底线,16GB很舒服。跑全编译的时候Quartus会吃4-6GB内存,如果同时开着ModelSim和浏览器,8GB机器会很吃力。
- 磁盘:这是最容易低估的一项。安装包约8GB,解压后约10GB,完整安装(包括所有设备库)后约30GB。就算你只装常用的Cyclone设备库,最终空间占用也在15GB以上,建议随便匀出40GB空余再动手。
- 系统:Windows 10/11 64位都支持。Windows 7虽然官方还列在支持列表里,但USB驱动和后续第三方工具兼容性越来越差,不太推荐。
安装路径建议走默认的C:\intelFPGA\18.1,或者D盘也可以,但路径中绝对不能出现中文和空格。我见过有人装在D:\软件\Quartus Prime 18.1,结果ModelSim编译库的时候各种找不到文件,最后重装才解决。路径里的中文和空格会让很多底层脚本崩溃,这不是Quartus的锅,是这些老工具对Unicode路径的支持基本为零。
1.3 下载前的文件核对:一次性下全,别装了一半发现少东西
去Intel官网检索“Quartus Prime Standard Edition 18.1 for Windows”,用注册账号登录后进入下载页面,你会看到一长串文件列表。别看到什么点什么,按我下面的清单来:
| 需要下载的文件 | 用途 |
|---|---|
| QuartusSetup-18.1.0.625-windows.exe | Quartus主安装器 |
| cyclonev-18.1.0.625.qdz | Cyclone V设备库,常用 |
| cyclone10lp-18.1.0.625.qdz | Cyclone 10 LP设备库 |
| max10-18.1.0.625.qdz | MAX 10设备库 |
| modelSimSetup-18.1.0.625-windows.exe | ModelSim安装器(如果主安装器不带) |
我自己的习惯是设备库只下手上用到的,不需要把几十个.qdz全部拉下来。如果你的板子是Cyclone IV,对应下载cycloneiv系列的.qdz即可。下载速度一般,文件又大,建议用浏览器原生的断点续传功能,别用那些乱七八糟的第三方下载器,经常下到一半文件损坏。
下载完成后建议核对一下文件大小,官网每个文件边上会标注具体字节数,差一个字节都不行。这一步能避免后面解压到99%时报“CRC校验失败”的尴尬。
2. Quartus Prime 18.1 安装实战:从解压到驱动
2.1 解压与安装器启动:别在压缩包里双击安装
QuartusSetup这个exe本身其实是一个自解压包,双击后先会解压到临时目录,然后才弹安装界面。很多新手在这一步就出问题:直接把exe放在中文路径下双击,解压过程报错退出。
我建议的做法是先把exe和所有.qdz文件放在同一个英文无空格的目录里,比如D:\fpga_download,然后右键“以管理员身份运行”这个exe。注意,这一步开始,杀毒软件可能会弹出拦截提示。安装器要写注册表、要释放驱动文件,行为上确实有点像“恶意软件”,但这是正常现象。建议安装期间临时退出360、火绒之类的软件,等安装完再开回来,不然会莫名其妙少装几个组件。
解压完成后进入安装界面,一路Next,到了组件选择页面会看到多个复选框。这里先只要两个核心选项:Quartus Prime Standard Edition和ModelSim Intel FPGA Edition(有的版本写的是ModelSim ASE)。设备库等主程序装完再单独加,或者在这一步勾选你需要的.qdz文件路径也行。
2.2 组件勾选决策:ModelSim要不要一起装
我的建议是:一起装。ModelSim是Quartus自带的正统仿真工具,安装时选择它,会让后面Quartus和ModelSim的路径自动对接好,省掉大量手动配置。不要单独从Mentor官网下载独立版ModelSim——虽然功能几乎一样,但独立版的License体系、库编译方式和Intel定制版略有差异,新手很容易在启动时报错。
如果你已经在Quartus装完之后,发现当初没勾ModelSim也没关系,重新运行安装器,只勾ModelSim选项,它会自动检测已有安装并补装。
安装过程大概需要20到40分钟,取决于你的硬盘速度。走到最后一步,安装器可能会提示是否安装USB Blaster驱动,选“Install”。如果没有这个选项,后面也可以单独通过设备管理器手动装驱动。
2.3 USB Blaster驱动:设备管理器里的关键检查
很多人的Quartus装好了,面板跑起来了,但一接上FPGA开发板就识别不到USB-Blaster,问题通常出在驱动。
操作流程是:先把USB-Blaster插入电脑,打开设备管理器,找到带黄色感叹号的未知设备,右键“更新驱动”,选择“浏览我的电脑”,指向C:\intelFPGA\18.1\quartus\drivers\usb-blaster,然后确定安装。
这里有个Windows 10/11的经典坑:驱动签名验证。老版本的Altera驱动没有微软数字签名,系统会直接拒绝安装。解决办法是在“设置 > 更新与安全 > 恢复 > 高级启动”里重启进入“禁用驱动强制签名模式”,然后再装一次驱动。装完后最好重启一次电脑,让驱动彻底生效。
验证驱动是否正常,可以打开Quartus,点击“Tools > Programmer”,如果左侧Hardware Setup能看到USB-Blaster,且状态显示绿色可识别,这个坑就算填完了。
3. 授权文件:中文社区口中“破解”的关键三步
3.1 license.dat到底是什么
Quartus和ModelSim这两兄弟用的是同一套License授权体系。所谓的授权文件license.dat,本质是一个文本文件,里面写明了你的网卡MAC地址、软件版本号、授权期限、可用功能列表等信息。软件启动时会读取这个文件,校验MAC地址是否匹配、功能项是否包含自己需要的模块,校验通过就放行。
这也是为什么中文社区里的各种“生成授权”工具,第一步都让你填MAC地址——因为校验的核心就是那串网卡物理地址。很多人的问题恰恰出在后面:拿到license.dat之后不知道放哪、不知道告诉软件去哪读,结果软件一直报“License not found”。
所以现在你只需要关心两件事:让正确内容出现在license.dat里,告诉软件到哪去读这个文件。前者属于软件授权范畴,不同渠道的获取方式各有不同;后者是通用的技术操作,下面详细说。
3.2 先走通官方30天评估License,验证流程没问题
在我推荐的稳妥路线里,第一次装可以先申请Intel官方的30天评估授权,把整套环境跑通,之后再用其他方式替换license.dat。这样做的好处是,如果后续出现问题,你能确定是授权文件的问题还是其他配置的问题,排查范围一下子缩小很多。
申请流程:打开Quartus Prime,会弹出License Setup向导,选择“Get an evaluation license now”,它会跳到Intel官网登录页面,登录后选择Quartus Prime Standard Edition,网页会自动读取你当前机器的网卡MAC地址,填完信息后邮箱会收到一个license.dat附件。
把附件保存到固定的目录,比如D:\altera_licenses\license.dat。然后到Quartus的“Tools > Options > License Setup”里,把License文件路径填进去,或者设置环境变量LM_LICENSE_FILE指向它。这时候再看License Setup页面,授权状态应该已经变成绿色可用。
3.3 设置环境变量LM_LICENSE_FILE的三种方式
很多人以为license.dat不生效是文件问题,其实是环境变量没配好。Windows下有三种方式,我按推荐程度排列:
- 系统环境变量(最推荐):右键“此电脑 > 属性 > 高级系统设置 > 环境变量”,在系统变量里新建或编辑
LM_LICENSE_FILE,值填license.dat的完整路径。这样Quartus和ModelSim都能读到,一劳永逸。 - 用户环境变量:同上,只是改的是当前用户的环境变量,效果类似,但某些以管理员权限运行的组件可能读不到用户变量,所以不优先推荐。
- Quartus内部配置:在Quartus的License Setup里填路径。但这只对Quartus生效,ModelSim不认,需要两边分别配,容易漏。
配置完环境变量后,一定要重启Quartus或ModelSim,因为这两个软件只在启动时读一次环境变量,不是动态加载的。
验证方法其实很简单。Quartus 18.1启动时如果license有问题,会弹一个对话框,明确告诉你“License feature is not valid”以及缺失的功能项。如果没有弹,打开“Tools > Options > License Setup”,看到绿色图标和可用的功能列表,就说明读到了。ModelSim启动时命令行窗口会打印它当前使用的license路径,那些信息值得留个心眼。
4. ModelSim安装与首次启动:避免重复劳动
4.1 捆绑版与独立版的区别
Quartus 18.1携带的ModelSim版本,安装路径默认在C:\intelFPGA\18.1\modelsim_ase。这个版本和从Mentor官网下载的独立ModelSim SE版本有本质区别:捆绑版已经预先配置好了Intel各系列器件的仿真库,你不需要手动执行vlib和vmap去建库,新建工程直接选器件就能编译仿真,对FPGA开发来说省了一大截时间。
独立版ModelSim SE功能强、支持语言版本多,但和Quartus的配合需要额外做库映射。如果你只做Quartus的仿真,完全没有必要碰独立版。这就像买冰箱送了一盒制冰格,你非要去买一个工业制冰机一样——能出冰,但没必要。
4.2 首次启动与License指针
第一次打开ModelSim(在Quartus里通过“Tools > Run Simulation Tool > RTL Simulation”调用)时,它会先检查LM_LICENSE_FILE环境变量。如果之前在第3章已经配好,这里会直接进入主界面,不弹任何提示。如果弹窗提示license问题,回到第3.3节,检查环境变量是否写对、路径是否存在。
有些版本modelSim启动时会要求你按一次“Schematic”或“Project”按钮切换视图,这是正常的,不是出错。
4.3 版本不符导致的库编译失败
我见过最典型的ModelSim报错是:** Fatal: (vsim-3193) Load of "altera_mf_ver" failed。这个问题几乎都是因为第一次安装时设备库没选全,或者Quartus和ModelSim版本号对不上。比如你Quartus是18.1.0,但ModelSim装成了18.1.1,库文件版本不匹配,仿真时就会加载失败。
解决起来也不复杂。打开ModelSim的安装目录,找到modelsim.ini文件,用文本编辑器查看里面的库映射路径,确认所有映射都指向C:\intelFPGA\18.1\modelsim_ase\altera_ver等实际存在的目录。如果目录不存在,说明对应器件库没装,回到Quartus安装器补装设备库。如果路径对不上,手动修改映射路径。这步能解决90%以上的库加载报错。
5. Quartus + ModelSim 联合仿真:跑通一个计数器
5.1 设置仿真工具路径
到了这步,你已经过了最痛苦的安装和授权关,剩下的就是配置联合仿真。
打开Quartus,进入“Tools > Options > General > EDA Tool Options”,在ModelSim这一行填上C:\intelFPGA\18.1\modelsim_ase\win32aloem。注意,是win32aloem目录,不是modelsim_ase根目录。这里指向的必须是ModelSim的可执行程序所在位置,填错了Quartus会报“Cannot launch ModelSim”。
接着在工程里打开“Assignments > Settings > EDA Tool Settings > Simulation”,Tool name选ModelSim,Output format选Verilog HDL。到这里,Quartus已经知道该把仿真工作交给谁了。
5.2 Testbench模板生成与编写要点
写Testbench是仿真里绕不开的环节。Quartus提供了一个很有用的功能:自动生成Testbench模板。
在工程文件列表里选中顶层文件,点击“Processing > Start > Start Testbench Template”,Quartus会在工程目录的simulation/modelsim/下生成一个工程名_tb.v文件。这个模板会自动例化你的顶层模块,剩下的工作就是补上时钟和复位信号。
以一个4位计数器为例,生成的模板基础上,我一般会这样补激励:
`timescale 1ns/1ps module counter_tb; reg clk; reg rst_n; wire [3:0] cnt; counter u0( .clk(clk), .rst_n(rst_n), .cnt(cnt) ); initial begin clk = 0; rst_n = 0; #100; rst_n = 1; end always #10 clk = ~clk; endmodule这段代码想强调几个点。第一,初始时先把rst_n拉低100ns再释放,确保复位信号先于第一个时钟上升沿出现并完成清零。第二,时钟用always #10生成50MHz的时钟,10ns半周期,任务简单。第三,Testbench文件名和module名建议保持一致,方便管理。
一个常见的错误是:仿真波形一直为红线/高阻Z,结果发现Testbench里忘记例化设计模块,Quartus模板的例化名和实际顶层名拼写不一致,信号就悬空了。
5.3 波形窗口操作与信号观察技巧
配置好Testbench后,在Quartus里执行“Tools > Run Simulation Tool > RTL Simulation”,ModelSim会自动启动并加载工程,然后弹出一个ModelSim主界面。你会在“sim”面板里看到testbench模块,展开它就能看到内部信号。
但默认状态下,信号面板选中的是sim顶层,不是u0这个DUT(设计模块)。要观察计数器内部信号,必须右键点击u0节点,选择“Add To Wave > Selected Signals”或类似选项。这一步没做,你看到的波形永远是空的。
添加完信号后,点击“Run”按钮或按快捷键运行一段时间,比如运行2us,就能看到cnt信号像楼梯一样逐步累加。如果rst_n释放的时序不对,cnt前几个周期可能是X态。
波形窗口还有一个很实用的技巧:右键信号名,选“Radix > Hexadecimal”或“Unsigned”,波形左侧的数值会从十六进制切换到十进制,观察计数器的累加过程直观很多。
6. 仿真波形一片红:排查链路与解决办法
6.1 红线、虚线、未知态到底在说什么
“ModelSim仿真波形是红线”这句话,在FPGA群里出现的频率高得离谱。其实红线只是表象,真正要分清的是波形显示的不同状态。
在ModelSim波形窗口里,信号状态一般有这么几种:
| 显示状态 | 含义 | 常见原因 |
|---|---|---|
| 红色粗线 | 高阻态Z或未连接 | 信号悬空、输出未驱动、器件库未加载 |
| 红色/橙色区域 | X态(未知状态) | 寄存器未复位、信号赋初值前被读取 |
| 蓝色细线 | 线网(wire)有驱动但未知 | 多驱动冲突 |
| 绿色/黑色实线 | 已正确驱动 | 正常状态 |
| 紫色/灰色虚线 | 信号未初始化 | 仿真时间0时刻之前 |
看到红色波形,先别急着怀疑软件装坏了。我的经验是:八成是Testbench的激励没写好,或者信号没添加到波形窗口,而不是Quartus或ModelSim的安装问题。
6.2 一步步排查的完整顺序
我处理“全是红线”类的求助时,从不直接给答案,而是让求助者按顺序做这几步,基本三分钟内定位问题:
第一步,先确认加对信号。右键DUT实例(比如u0),再添加它的内部信号。如果直接在counter_tb节点上添加信号,看到的是Testbench里的激励信号,而设计内部信号根本不在这个层级里,波形自然诡异。
第二步,看信号值到底是X还是Z。如果波形是红色且用鼠标悬停显示X,说明信号被读但从未被赋值——八成是复位没生效,把复位信号拉到有效电平再重新运行仿真。如果显示Z,说明这条线悬空了——检查Testbench里对不对得上模块端口。
第三步,检查Testbench里的初值设定。用Verilog写Testbench时,所有reg类型信号必须在initial块里赋初值,否则默认是X状态。比如:
initial begin clk = 0; rst_n = 0; end很多新人只写了always #10 clk = ~clk,但忘写clk = 0这个初值,ModelSim里clk的波形就是一条红色的直线而不是连续的方波。
第四步,检查是否没跑够时间。有些复位是异步的,释放后需要等几个时钟周期才能看到输出。如果Run的时间太短,比如只跑了20ns,计数器还没完成第一个上升沿采样,当然还是竖直一条线。多Run一段时间,比如run 1us,再观察。
第五步,确认库编译顺序。如果连testbench编译都没报错,但仿真时提示找不到模块,回到4.3节检查模型库。这个坑在高版本的ModelSim配合旧工程时特别常见。
6.3 我的处理顺序和一个小习惯
我自己遇到“红线”时,最常用的手法是先把所有内部信号全部加进波形,然后run -all跑无限长,用Zoom Full把全部波形显示出来,先看全局趋势,再针对性Zoom In到某个时间点。这样比盯着几十ns的波形猜来猜去高效得多。
另外养成一个习惯:每次修改Testbench后,一定要在ModelSim里执行quit -sim结束仿真,再重新启动仿真,不要连续点Run。ModelSim对增量编译的支持在旧版本里很容易出现“信号还是上一个版本”的幻觉,折腾半天发现改的代码根本没重新编译进去。
如果上面的方法都试过了波形还是红色,还有一个简单粗暴的常规处理:关掉ModelSim,回到Quartus,在工程设置里把Simulation工具切到“None”再切回“ModelSim”,然后重新生成仿真文件,启动仿真。这个操作相当于把仿真环境重新初始化一遍,能解决很大一部分莫名其妙的路径缓存问题。
跟着这套流程走下来,Quartus Prime 18.1和ModelSim基本能稳定跑起来,计数器仿真波形也能正常显示。我个人在实际操作中的体会是,装软件这种事,最耗时间的往往不是下载,而是那些毫不起眼的小配置——环境变量、路径、初值,任何一个不对,后面的报错都能绕死你。装完这套环境之后,建议你把第5章的计数器例子完整跑一遍,验证联合仿真链路是通的,再去跑自己项目的代码。这样真遇到仿真问题,至少能确定是环境问题还是设计问题,排查起来心里有底得多。