
1. 版本选择是第一步坑Quartus II与Modelsim的搭配逻辑先说个我经常遇到的现象很多同学装Quartus II直接去官网下最新版然后装完发现和自己买的开发板不匹配、和教材里的操作界面也对不上更麻烦的是Modelsim版本和Quartus版本之间互相不认。这种问题我在帮人远程调试时遇到过不下二十次所以这篇教程的第一章我先带你把版本这件事理清楚。Quartus II这个软件是FPGA开发的主流IDE之一主要用于编写Verilog/VHDL代码、做综合、引脚分配、布局布线以及下载烧录。Modelsim则是专业的HDL仿真工具用来验证你写的代码功能是否正确。两个软件的关系可以简单理解成Quartus负责把代码变成硬件电路Modelsim负责在电路变成实物之前先在电脑里模拟运行一遍。所以它们不是二选一而是前后配合的关系。1.1 各版本差异与适用人群对比我列一个常见的版本对照表这些都是目前高校教学和自学圈子里用得最多的版本版本发布时间对应Modelsim版本主要特点适用人群Quartus II 9.1较老Modelsim SE 6.5b界面老但稳定支持Cyclone系列老芯片老教材配套Quartus II 13.02013Modelsim SE 10.1c经典版本网上教程最多初学者首选Quartus II 13.12013末Modelsim SE 10.1d比13.0修复了一些bug兼容性好绝大多数开发板用户Quartus II 15.02015Modelsim SE 10.4开始支持Cyclone V等新器件中后期Cyclone V用户Quartus II 18.12018Modelsim SE 10.5b界面现代化支持Arria等新器件新开发板、新教材如果你用的是市面上常见的黑金、正点原子、小梅哥等开发板芯片型号通常是EP4CE系列Cyclone IV那么Quartus II 13.1是倍率最高的选择。为什么呢因为13.1对Cyclone IV的支持最成熟网上的教程资源也几乎全部基于这个版本——从安装到仿真遇到问题搜一下基本都能找到答案。1.2 为什么我不建议直接上最新版很多人有个误区觉得软件越新越好。在FPGA工具链这里恰恰相反。Quartus Prime19.1之后的改名版本虽然功能更强但有几个问题对老芯片支持不友好很多入门开发板用的Cyclone IV在新版Quartus里虽然也能用但需要额外安装器件支持包安装包体积大好几个GB配置步骤多了不少。License机制更复杂新版Quartus Prime的授权方式和Quartus II不同网上流传的破解方式经常失效。硬件要求更高新版软件对电脑内存、磁盘空间的要求明显提升普通笔记本跑起来卡顿明显。教材和教程脱节国内高校课程和主流开发板厂商提供的例程大多还是基于13.1/13.0的操作截图。你用新版去对照旧版教程操作菜单位置都不一样很容易卡住。所以我在这篇教程里以Quartus II 13.1 Modelsim SE 10.1d这个组合为例这也是实战中验证过最稳的搭配。如果你用的是Quartus II 15.0或18.1操作流程大同小异遇到界面差异时灵活对应即可。2. Quartus II 13.1安装全流程与首次启动验证版本定下来之后就可以开始安装了。Quartus II 13.1的安装包可以从官网下载需要注册Intel账号也可以从开发板厂商提供的网盘链接获取。2.1 下载与解压的注意事项下载的时候注意区分两个东西Quartus II软件本体和器件库文件。Quartus II 13.1的完整安装包大约3.5GB其中软件本体和Cyclone系列器件库是分开下载的。如果你只装了软件没装器件库建工程时选不到芯片型号这一步卡住的人非常多。建议下载这些文件QuartusSetup-13.1.0.162.exe软件主体cyclone-13.1.0.162.qdzCyclone IV器件库必装modelsim_ase-13.1.0.162.qdz自带Modelsim ASE版本可选但建议装下载完成后解压注意安装路径不要出现中文和空格。我见过有人装到D:\软件\Quartus结果编译时各种莫名其妙的问题路径里的中文字符在FPGA工具链中经常导致环境变量识别异常。建议直接装到D:\altera\13.1或C:\altera\13.1这类纯英文路径。2.2 安装步骤与关键选项运行QuartusSetup-13.1.0.162.exe安装过程比较傻瓜式但有三个选项需要留意**第一步选择安装组件。**进入到组件选择界面时默认只勾选了Quartus II软件本体你需要手动勾选对应的器件支持。如果之前下载了单独的qdz器件库文件可以跳过这一步后续单独安装。建议在这里只装软件本体器件库单独安装出问题时好排查。**第二步指定安装路径。**继续强调纯英文路径。我习惯用D:\altera\13.1\quartus作为主目录。**第三步安装Modelsim ASE。**这里要特别说明Quartus II 13.1安装包中自带了一个Modelsim ASE版本在安装过程中会有选项让你勾选。很多人不知道这个ASE版本和独立安装的Modelsim SE版本有什么区别。简单来说ASE版本是Altera定制版集成在Quartus里启动仿真时自动关联不需要额外破解License。缺点是功能裁剪了一部分调试能力不如SE版本。如果你只是做课程实验、跑通仿真波形ASE版本完全够用。但如果你要做较为复杂的仿真调试、用脚本自动化跑仿真建议单独安装Modelsim SE 10.1d。安装完成后不要急着打开先把破解补丁处理掉。在Quartus II 13.1的安装目录下找到bin64文件夹64位系统把sys_cpt.dll文件备份一份然后覆盖破解文件。运行Quartus时选择Start Evaluation或加载License文件。2.3 首次启动验证启动Quartus II 13.1后应该能看到欢迎界面。此时先验证一件事能不能正常新建工程并选到芯片型号。新建工程File - New Project Wizard在Family栏选择Cyclone IV E然后在具体型号列表里找到你的开发板对应的芯片型号比如EP4CE10F17C8。如果能正常看到并选中说明器件库安装成功。如果型号列表为空说明器件库没装对回到2.1重新安装qdz文件。首次启动还有一个常见问题Quartus提示找不到License。如果你暂时没有License可以先选择Start 30-day Evaluation体验模式但要注意体验模式不支持编译只能看界面。想要正常使用必须配置License文件。3. Modelsim SE 10.1d的安装、环境变量与激活验证Modelsim的安装比Quartus稍微麻烦一点因为涉及到环境变量设置和License管理。很多人在这一步卡住装完之后打开软件提示License错误。其实理解了原理就不难。3.1 安装过程与环境变量配置Modelsim SE 10.1d的安装包大约1.2GB。安装界面同样简单关键还是路径问题——继续强调纯英文路径。我见过有人装到D:\就业软件\Modelsim环境变量配置完成后依然打不开最后发现是中文路径导致的系统变量解析失败。安装完成后需要手动添加两个环境变量LM_LICENSE_FILE指向License文件所在路径。比如我的License文件放在D:\modeltech64_10.1d\license.dat那这个环境变量的值就是D:\modeltech64_10.1d\license.dat。MODELSIM_HOME指向Modelsim安装根目录。比如D:\modeltech64_10.1d。设置方法右键此电脑 - 属性 - 高级系统设置 - 环境变量 - 在系统变量中新建。3.2 License激活机制的底层逻辑为什么要设置LM_LICENSE_FILE这个变量因为Modelsim用的是FlexLM许可证管理机制。简单理解就是软件启动时会去检查这个环境变量指向的文件看里面的密钥是否有效、是否在有效期内。如果环境变量没设置或者指向的文件内容不对软件就会报错退出。破解Modelsim的原理本质上就是生成一个包含有效密钥的license.dat文件并让软件启动时能找到它。具体操作是用破解工具通常在安装包的crack文件夹里生成license文件把里面的主机名和MAC地址替换成你自己电脑的信息保存为license.dat然后设置环境变量指向它。这里有个细节容易出错license.dat文件里的HOSTNAME和MAC地址必须与你电脑实际值一致。查看方法打开命令提示符输入ipconfig /all查看MAC地址输入hostname查看主机名。如果不匹配即使环境变量设置正确软件依然会报Invalid license。3.3 安装成功验证配置完成后打开Modelsim正常应该进入类似IDE的界面左侧为Library面板右侧为Transcript窗口。快速验证方法在Transcript窗口输入命令help如果返回一堆命令说明列表说明软件正常启动。还可以在Modelsim里新建一个工程创建一个简单的Verilog文件随便写个module test; endmodule然后点击Compile编译看是否能编译通过。能通过说明工具链完整可用。4. Quartus II与Modelsim联合仿真设置两个软件单独能跑起来还不够关键是让Quartus调用Modelsim进行联合仿真。这一步设置不对的话Quartus里点仿真按钮会提示找不到Modelsim。4.1 仿真工具路径自动关联Quartus II 13.1自带了对Modelsim的自动检测机制。当你安装Modelsim ASE版本时路径已经被写入注册表。但如果你单独安装的是Modelsim SE版本需要在Quartus里手动指定。菜单路径Tools - Options - EDA Tool Options在ModelSim-Altera或ModelSim一栏填写Modelsim的安装路径。比如D:\modeltech64_10.1d\win64注意要填到win64这一级不要只填安装根目录。因为Quartus需要直接调用vsim.exe这个可执行文件而这个文件在win64目录下。4.2 设置仿真器类型在Quartus工程中还需要设置仿真工具类型否则Quartus不知道调用哪个软件做仿真。菜单路径Assignments - Settings - EDA Tool Settings - Simulation。在Tool name下拉菜单中选择ModelSim-Altera或ModelSim然后勾选Compile test bench选项手动添加测试文件。这里提醒一下如果Tool name下拉菜单是灰色不可选说明前面EDA Tool Options里的路径没配对。返回上一步检查路径是否正确。4.3 针对不同版本的差异如果你用的是Quartus II 15.0或18.1设置路径的方式类似但选项位置会稍有变化。以18.1为例在Assignments - Settings里直接有Simulation分类工具下拉菜单中会多出ModelSim Intel FPGA Edition等选项。选对应版本即可。需要注意Quartus II 18.1对应的Modelsim版本是SE 10.5b如果你用10.1d在启动仿真时可能报版本不匹配的错误。解决方法是安装对应版本的Modelsim或者在Quartus设置里手动指定兼容的Modelsim路径。4.4 首次联合仿真测试流程配置完成后用一个简单工程测试联合仿真是否打通在Quartus里新建工程芯片选Cyclone IV E系列编写一个简单的计数器代码。另存一个testbench文件.vt调用计数器模块并产生时钟和复位信号。在Assignments - Settings里添加test bench点击Test Benches按钮填写测试文件名称和顶层模块名添加对应的.vt文件。回到主界面点击Processing - Start Compilation and Simulation或者Tools - Run Simulation Tool - RTL Simulation。如果一切正常Quartus会自动启动Modelsim加载仿真库运行测试最终在波形窗口显示仿真结果。这一步如果失败了最常见的原因是Quartus找不到Modelsim的库文件。在启动联合仿真时Quartus会去当前工程目录下寻找altera仿真库比如altera_mf、altera_primitives如果你的工程里调用了Quartus的IP核但没有编译这些IP库到Modelsim就会报类似** Error: (vsim-3193) ... not found的错误。解决方法是在Modelsim里手动编译Altera仿真库。Quartus安装目录的eda\sim_lib文件夹下包含altera_mf.v、220model.v、altera_primitives.v等文件需要在Modelsim里新建一个库如altera_lib然后将这些文件编译进去。5. 仿真波形是红色从代码到波形显示的问题排查装上软件、跑通联合仿真只是第一步。真正让新手崩溃的是仿真跑完了波形窗口里信号全是红色的XXX什么都看不到。这个问题的搜索热度在ModelSim相关话题里一直居高不下下面把常见的成因和排查方法一次讲清楚。5.1 红色波形信号的本质含义先理解一件事Modelsim波形窗口里信号状态有几种颜色表示绿色信号有效通常是0或1。红色信号为X状态表示未知或者Z高阻态。蓝色信号为U状态表示未初始化。橙色信号为Z状态代表高阻。当整个波形都是红线时说明仿真时信号状态没有被正确驱动。这不一定是Modelsim出问题更多时候是你的testbench没有正确激励到被测模块。5.2 最常见原因一testbench里没有生成时钟和复位我见过大量的案例testbench里只写了模块实例化没有写always #10 clk ~clk;这样的时钟生成语句也没有初始化寄存器为0的信号。模块没有时钟内部寄存器永远是X状态输出自然也是X。加上时钟后再检查寄存器是否在复位信号释放后能正常跳变。5.3 最常见原因二信号层次选错了在Modelsim的波形窗口里如果添加信号的方式不对也容易看到一片红。举个例子你在工程编译完成后直接在Library窗口右键模块选择Add Wave这时默认添加的是模块顶层接口信号内部信号看不到。如果你要观察模块内部的计数器、状态机等信号需要在Simulate窗口里找到模块实例右键选择Add Wave或者在命令行执行add wave -position end sim:/testbench/dut/counter这样的命令。我建议在testbench里用更直观的方式把要观察的信号通过reg或wire声明后直接加到波形窗口。比如reg clk; reg rst_n; wire [3:0] count; counter u_counter( .clk(clk), .rst_n(rst_n), .count(count) );然后在Modelsim中选中这些信号右键Add Wave。这样做的好处是信号命名直观不容易看错层次。5.4 最常见原因三仿真时间太短信号还没开始变化还有一种情况波形不是全红而是前面一长段红线后面变成绿色但绿色的部分很短。这种通常是仿真时间设置太短。在Modelsim的Run命令中默认只跑100ns。如果你的时钟周期是20ns那100ns只能跑5个周期看不出什么结果。解决办法在真实仿真中点击Run All或者通过命令行执行run 1us甚至更长时间。不要只点击Run按钮一下就完事那个默认只跑100ns。5.5 常见原因四仿真库没有正确加载还有一类红色波形是在调用Quartus的IP核如PLL、RAM、ROM时出现。因为IP核的仿真模型依赖于Altera的仿真库如果你没有在Modelsim里正确映射这些库仿真时IP核内部全是X输出也就全部是X。这种情况的排查方法是看Transcript窗口的提示。如果出现类似# ** Fatal: (vsim-3193) Load of altera_mf failed的报错就说明Altera库没加载。处理方式参考我前面4.4说的先编译仿真库然后在仿真启动前用vsim -L altera_mf -L altera_primitives ...命令执行仿真。5.6 排查顺序建议真遇到红色波形按照下面顺序排查最有效率1. 看Transcript窗口有没有Error/Fatal报错 - 有则先解决 2. 检查testbench的时钟和复位有没有生成 - 没有则补 3. 检查波形窗口添加的信号层次对不对 - 不对则重新添加 4. 延长仿真时间 - 至少10个时钟周期 5. 确认是否调用了IP核 - 是则检查仿真库是否加载5.7 一个完整的排查示例有一次一个学生发我一段代码他做的是跑马灯实验四个LED轮流点亮。仿真波形里四个输出全是红线。我远程看了他的testbench代码发现他写的是initial begin rst_n 1b0; #100; rst_n 1b1; end问题出在哪里他只在initial里产生了复位信号没有写时钟生成语句。模块内部的所有寄存器因为没有时钟永远不会跳变。我让他加上initial begin clk 1b0; forever #10 clk ~clk; end然后重新编译仿真波形就正常了。这个问题看起来很简单但确实是新手最容易忽略的一个点。很多人在写testbench时只关注输入信号的激励忘了模块内部本质上是一个时序逻辑必须有时钟驱动才能工作。我个人在这几年的实际使用中最大的感触是Quartus和Modelsim这套工具的安装其实不需要什么高深技巧只要把版本搭配和路径规范这两件事处理好后面基本一路顺畅。很多人装完软件发现用不了看教程反反复复折腾仔细一问十有八九是路径带了中文、License环境变量没配对、或者Quartus和Modelsim版本对不上。如果你现在也卡在安装或者仿真波形不正常的阶段回过头检查这三个点大多数问题都能迎刃而解。