☰
Quartus FPGA开发全流程指南:从安装到JTAG下载避坑手册
2026/10/1 4:55:22 网站建设 项目流程

1. 版本选择:Quartus 这潭水到底有多深

Quartus 这名字在 FPGA 圈子里提起来没人不知道,但真要给新人指一条路,十个人能给出十种说法。有人装的是 Quartus II 13.1,有人用 Quartus Prime 18.1,还有人直接上 Lite 25.1——版本号五花八门,下载页面长得还都不一样,刚接触的人光是在这一步就能卡住两三天。我更愿意把 Quaruts 的使用分成两个阶段来理解:先搞清楚版本脉络,再谈工程流程。

先说结论:今天你打开 Intel FPGA 官网,能看到的官方主线产品叫 Quartus Prime,它取代了早期的 Quartus II。但国内大量教程、学校课件、开发板资料还停留在 Quartus II 13.1 甚至 9.0、15.0 这些老版本上,所以网上搜出来的安装教程经常是牛头不对马嘴。你照着 Quartus II 13.1 的界面去操作 Quartus Prime 20.1,能对上号才怪。

版本到底怎么选?我按自己的实际使用经验给你拆一下。

版本系列典型版本适合场景备注
Quartus II 老版本9.0、13.0、13.1、15.0学校课程、老开发板、Cyclone III/IV 等老器件网上教程最多,但界面陈旧
Quartus Prime Standard18.1、20.1、22.1Cyclone V、Arria、Stratix 等主流器件商业项目、较新的开发板
Quartus Prime Lite18.1、20.1、23.1、25.1学习评估、Cyclone IV/V/10 等低端器件免费、支持常用器件,推荐入门
Quartus Prime Pro19.1+Agilex、Stratix 10 等高端器件工程量大,适合专业团队

对绝大多数自学 FPGA 的朋友,我更推荐Quartus Prime Lite,原因很简单:免费、器件支持覆盖了最常见的 Cyclone 系列,而且安装包比 Standard 版本小不少。Standard 和 Pro 虽然功能更全,但里面大量功能你半年内大概率用不上,白白占硬盘空间。当然,如果你的开发板附带的资料明确写了"请安装 Quartus II 13.1",那就别折腾了,跟着板子资料走,因为你手里的板载 USB-Blaster 驱动、引脚定义文件、参考工程都是按那套环境配的。

还有个容易忽略的点:Quartus 版本和器件家族是有对应关系的。新版软件通常仍然支持老器件,但老版本软件绝不可能支持后来新出的器件。比如你用 Lite 25.1 去支持 Cyclone IV 没有问题,但用 Quartus II 9.0 想编译 Cyclone V 的工程,软件里根本找不到这个器件型号。所以选版本之前,先查清楚自己板子的 FPGA 芯片具体型号,再倒推版本,这个顺序千万不能反。

2. 安装环节的几处暗坑

2.1 下载地址与安装包识别

下载 Quartus 只有两个靠谱渠道:一是 Intel FPGA 官网,二是部分地区访问官网比较慢时,可以去国内几所高校的镜像站或者开发板厂商提供的光盘/网盘资源。官网下载时它会让你选"单独下载某个组件"还是"下载合集",这里有个细节:完整安装包其实是由 Quartus Prime 主程序、器件支持包(Device Support)和 ModelSim 仿真组件拼起来的,三者缺一不可。

很多人第一次装完发现软件打不开工程,或者编译时提示找不到器件,多半就是没装对应家族的 Device Support。这个器件支持包体积非常大,单是 Cyclone 系列的支持包就可能接近 10GB,所以官方默认让你按需勾选,而不是一股脑全装。下载时我建议这样选:主程序装最新稳定版,器件支持只勾选你当前用的系列(比如 Cyclone IV、Cyclone V),ModelSim 或 Questa 仿真器看心情,初学阶段不装也能跑完整个流程。

安装包识别也有讲究。文件名里通常带着quartus-lite、cyclone、modelsim这些关键词,一看就知道是什么。镜像站上下载的时候,别只盯着主程序下了就跑,器件支持包得一起下载,否则运行起来缺这缺那。

2.2 安装路径与权限问题

安装路径是另一个典型的坑。Quartus 对路径非常"矫情",路径里绝对不要出现中文、空格和特殊字符。我见过有人图省事直接装在D:\软件\Quartus\下面,结果工程文件路径一长就出莫名其妙的问题,最后排查半天发现是中文目录惹的祸。标准做法是装到D:\altera\quartus或者C:\intelFPGA_lite\这类纯英文路径下。

Windows 系统下安装时尽量右键"以管理员身份运行",否则后面可能遇到写权限不足、驱动安装失败的问题。装完之后我还会做一件事:到安装目录下把quartus.exe的兼容性设置为"以管理员身份运行此程序",这个设置能省掉很多 USB-Blaster 下载时的权限报错。Mac 和 Linux 用户如果想用 Quartus,我只能说可以用,但驱动和 JTAG 调试的折腾程度会显著上升,初级阶段不建议自找麻烦。

2.3 USB-Blaster 驱动到底藏在哪个文件夹

这是热词里被问得最多的一个问题:"Quartus 下载器驱动在哪个文件夹?" 如果你已经装好了 Quartus,驱动文件其实就在安装目录的drivers文件夹下。以 Lite 版本为例,路径一般是:

  • Windows 64 位系统:C:\intelFPGA_lite\25.1\quartus\drivers\usb-blaster
  • 老版本 Quartus II:C:\altera\13.1\quartus\drivers\usb-blaster

手动安装驱动的操作是:把 USB-Blaster 插入电脑,打开设备管理器,找到一个带黄色感叹号的未知设备,右键"更新驱动程序"→"手动浏览",然后把路径指到上面说的usb-blaster文件夹,系统会自动匹配安装。Win10/Win11 有时会提示驱动未签名,可以到"高级启动"里禁用驱动签名强制,再装一次就好了。

这里我额外说一句:别下载那种所谓"万能驱动"软件去装 USB-Blaster 驱动,大概率装上也是错的,最后一编译下载就报Can't access JTAG chain。老老实实从 Quartus 安装目录里找驱动才是正路。

3. 新建工程与首次编译:从零到流水灯

3.1 工程向导里的每一页都该填什么

打开 Quartus,界面上方菜单栏点击File -> New Project Wizard,就进入了新建工程向导。第一页是工程路径和名称,这里有个很多人不知道的规则:顶层实体名最好和工程名保持一致,比如工程叫led_test,顶层 Verilog 模块名也叫led_test,否则编译时会出现Top-level design entity is undefined的报错。

第二页选择器件型号,初学者最容易在这一步出问题。你需要知道自己的 FPGA 具体型号,通常开发板上芯片丝印会写,比如EP4CE6F17C8或者EP4CE10F17C8(Cyclone IV 系列),又或者是5CEBA4F23C7(Cyclone V 系列)。在 Family 下拉框里选对应系列,然后在 Available Devices 里找到精确型号。如果你图省事直接选了"自动选择器件",编译确实能过,但引脚分配的时候你会后悔——很多引脚在自动选择模式下根本不合法。

第三页是 EDA 工具设置,学习阶段直接全部选<None>,不要额外勾选第三方综合器或仿真器。等后面需要 ModelSim 做仿真时再回头配置也不迟。第四页确认摘要,点 Finish 完成。

3.2 引脚分配的两种方式

工程建好后,默认是没有任何源文件的。你需要新建一个 Verilog HDL 文件(File -> New -> Verilog HDL File),然后写一个最简单的流水灯代码:

module led_test( input wire clk, input wire rst_n, output reg [3:0] led ); reg [24:0] cnt; always @(posedge clk or negedge rst_n) begin if (!rst_n) cnt <= 25'd0; else if (cnt == 25'd24_999_999) cnt <= 25'd0; else cnt <= cnt + 1'b1; end always @(posedge clk or negedge rst_n) begin if (!rst_n) led <= 4'b1111; else if (cnt == 25'd24_999_999) led <= {led[2:0], led[3]}; else led <= led; end endmodule

写完代码保存,文件名必须和模块名一致,也就是led_test.v。接下来最重要的一步是引脚分配,这一步直接决定你下载后灯能不能亮。

第一种方式是图形界面手动画引脚。打开Assignments -> Pin Planner,在窗口下方的列表里找到clk、rst_n、led[0]~led[3]这些引脚,然后在 Location 列里填上开发板原理图上对应的 FPGA 引脚编号。比如很多开发板上的 50MHz 时钟接在PIN_E1,复位按键接在PIN_E16,LED 灯接在PIN_F1、PIN_F2这些位置——具体以你手里的板子原理图为准,这个不能猜,必须查手册。

第二种方式是直接写约束文件,也就是.qsf文件。打开Assignments -> Settings -> Compiler Settings -> Quartus Prime Settings File,把引脚约束写进去。实操中我更推荐这种方式,因为它可以版本化管理,换电脑、换工程时直接复用,不用重新在界面上一个个点。文件内容大致长这样:

set_location_assignment PIN_E1 -to clk set_location_assignment PIN_E16 -to rst_n set_location_assignment PIN_F1 -to led[0] set_location_assignment PIN_F2 -to led[1]

3.3 全编译与首次下载

引脚分配完成后,点击工具栏的"Start Compilation"按钮,或者用快捷键Ctrl+L,Quartus 会执行 Analysis & Synthesis、Fitter、Assembler 等一整套流程。第一次编译通常比较慢,几十秒到几分钟不等,取决于工程规模和电脑性能。

编译通过后会看到绿色的成功提示。如果不出意外,到了这一步你就已经把 FPGA 工程的基本流程跑通了。接下来连上 USB-Blaster,打开Tools -> Programmer,点击 Hardware Setup 选择 USB-Blaster,然后点 Start 下载,如果一切正常,板子上的 LED 就会按你预期的节奏闪烁。

但"如果一切正常"这个前提,往往是新手最容易卡住的地方。最常见的报错是Error: Can't access JTAG chain,原因不是代码问题,而是下载器驱动没装好,或者 USB-Blaster 的接口接触不良,又或者是你给 JTAG 链上的其他设备供了电而目标 FPGA 没上电。排查顺序我建议是:先看设备管理器里有没有识别到 USB-Blaster → 再看开发板电源灯亮不亮 → 最后看下载器排线有没有接反。

4. 编译、时序与仿真:从"能编译"到"知道自己在干什么"

4.1 编译报告里的关键信息

编译完成后,Quartus 会生成一份 Compilation Report,里面信息量很大,但新手往往不知道看哪里。我按优先级列一下我觉得最值得关注的几项:

  • Flow Summary:总览资源占用,包括 Logic Elements(LE)、Registers、Pin count、Memory bits 等。这个能帮你判断自己的设计是不是"塞爆"了芯片。
  • Fitter Settings:看布线布局是否完成。
  • Timing Analyzer:时序分析报告,这里会列出设计的最高工作频率是否满足你设定的约束。
  • Power Analyzer:功耗估算,低功耗设计时才有意义。

我见过太多初学者编译过了就以为万事大吉,完全不管时序报告。实际上如果你做的设计有外部接口时序要求,比如 SDRAM 控制器、ADC 采样接口,时序约束就是决定系统稳不稳定的硬门槛,"平地编译通过"和"高速运行时稳定工作"完全是两码事。

4.2 时序约束:初学者最容易忽略的一步

给工程添加时序约束的核心,就是告诉 Quartus 你期望的时钟频率是多少。你可以在.sdc文件里写,也可以用 TimeQuest Timing Analyzer 图形界面操作。对于入门级别的工程,至少要有这样一条约束:

create_clock -name clk -period 20.000 [get_ports {clk}]

这条约束的意思是:时钟clk的频率是 50MHz(周期 20ns)。有了这条约束,Quartus 的 Fitter 在布局布线时就会以"满足 50MHz 时序收敛"为目标,综合报告里的 Fmax 也会有一个明确的对照值。如果你不做任何时序约束,Quartus 会默认一个非常宽松的条件,设计的实际可靠性你心里是没底的。

在入门阶段,你不用把时序约束学得很深,但至少要养成两个习惯:一是每个时钟都写下周期约束,二是编译后打开 Timing Analyzer 看一眼Restricted Fmax,如果它远小于你预期的频率,先别急着优化 RTL,先检查自己的时钟树是不是有问题。

4.3 仿真:为什么推荐 ModelSim 而不是直接上板

很多野路子教程会让新手直接编译下载看灯亮,这样学确实有成就感,但一旦涉及状态机、通信协议,板子上的逻辑分析仪又不会用,排错成本非常高。所以我建议从第二个工程开始,就引入仿真环节。

Quartus Prime Lite 自带 ModelSim Starter Edition(老版本叫 ModelSim-Altera),虽然功能精简,但做入门仿真完全够用。仿真流程是:写一个 testbench 文件 → 在Assignments -> Settings -> EDA Tool Settings -> Simulation里配置仿真工具 → 在 Quartus 里点击Tools -> Run Simulation Tool -> RTL Simulation。Testbench 可以简单理解成一个"没有实体的激励文件",它负责给被测试模块产生时钟、复位和输入信号:

module led_test_tb; reg clk; reg rst_n; wire [3:0] led; led_test uut( .clk(clk), .rst_n(rst_n), .led(led) ); initial begin clk = 0; rst_n = 0; #100; rst_n = 1; #10_000_000; $stop; end always #10 clk = ~clk; endmodule

仿真能帮你在上板之前就把大部分逻辑错误找出来,比如计数器位宽不够、状态跳转条件写错、复位时序有问题这些,在波形图里一目了然。等仿真通过再下载到板子上,调试周期能缩短一半以上。我自己现在写逻辑的习惯就是"仿真先行",哪怕很简单的小模块也先过一遍仿真,这个习惯帮我省了太多上板调试的时间。

5. 下载配置与调试:从点灯到真正掌握 JTAG

5.1 JTAG 模式与 AS 模式的区别

在 Programmer 界面里,你会看到 Mode 下拉框,常见的有 JTAG、Active Serial Programming(AS)、In-Socket Programming 等选项。新手往往搞不懂这几个模式的区别,直接默认 JTAG 就点了下载,但这样下载进去的程序是"临时"的——断电之后程序就没了,下次上电还要重新下载。

JTAG 模式的本质是通过 JTAG 接口把 SRAM 对象文件(.sof)加载进 FPGA 的配置 RAM 里,SoC 断电后配置丢失,所以它适合调试阶段。AS 模式则是把.pof文件烧写到板子上的配置芯片(EPCS 系列 Flash)里,FPGA 上电后会自动从 Flash 加载配置,程序就"常驻"了。

实际开发中我的习惯是:调试阶段用 JTAG,功能稳定后转 AS 模式固化。在 Programmer 界面里需要先把文件类型切换成.pof,操作路径是File -> Select Programming File,然后勾选Program/Configure,点 Start。转 AS 模式前要记得把 Mode 改成 Active Serial Programming,否则会提示找不到器件。

5.2 SignalTap 逻辑分析仪:板级调试的利器

当你的设计规模变大,某个信号在上板后表现不对,仿真又复现不出来,这时候就得拿出 SignalTap II Logic Analyzer 了。它是 Quartus 内置的"板级逻辑分析仪",可以在 FPGA 内部实时抓取信号波形,不需要外部仪器。

使用 SignalTap 的大致流程是:在 Quartus 里新建.stp文件 → 添加要观察的信号 → 设置采样时钟 → 设置触发条件 → 重新编译(工程里会插入调试逻辑)→ 下载到板子 → 在 SignalTap 窗口里运行捕获。刚开始你会觉得它占资源,每观察一个信号都会消耗额外的逻辑单元,所以调试完记得把.stp文件从工程里移除,重新编译一版干净的烧录文件。

SignalTap 的触发模式我觉得最常用的有两种:Basic AND触发(多个信号同时满足条件时开始采样)和Basic OR触发(任一信号满足条件就采样)。比如你想看计数器计数到某个特定值时相关信号的状态,就设置一个data == 某值的触发条件,非常直观。

5.3 常见下载错误的排查链路

下载器件报错是群里被问爆的问题,这里我把最典型的几种情况整理成一张对照表,方便你直接查:

错误信息根本原因排查方向
Can't access JTAG chain驱动没装好/链路异常设备管理器确认 USB-Blaster 识别
Device chain is not completeJTAG 链路器件不全或上电异常检查板卡供电、JTAG 菊花链终端器件
SRAM Object File not found没选 .sof 或编译未生成先全编译生成配置文件
Failed to put the device in programming mode下载器老化/接触不良/电压不匹配换线、重插、查开发板 JTAG 电压跳线

这里插一句实际经验:很多"下载失败"最后根因是USB-Blaster 的排线方向接反或没插紧。USB-Blaster 的排线是有方向的,板上 JTAG 接口通常有个三角形或圆点标记 1 脚,排线两端各自也有 1 脚标识,一定要对齐再插。我身边就有人为这个折腾了两个晚上,最后发现是排线松了一根针。

6. 工程管理与版本迁移:换电脑、换版本不翻车

6.1 一个完整工程文件夹里到底哪些文件能删

用了一段时间 Quartus 后,你会发现工程文件夹里多了好多文件,.qpf、.qsf、.sdc、.v、.sof、.pof、.db、.rpt、.qws…… 初学者最容易犯的错是给朋友拷工程时,把整个文件夹十几 GB 一股脑发过去,又慢又乱。

其实一个可以重新编译的完整工程,最少只需要保留这几类文件:

  • .qpf:Quartus Project File,工程入口
  • .qsf:Quartus Settings File,所有约束和设置
  • .v/.sv或.vhd:源码文件
  • .sdc:时序约束文件(如果有)
  • .qip/.qsys等 IP 相关文件(如果用了 IP 核)

其余像.db(编译数据库)、.rpt(编译报告)、.sof/.pof(烧写文件 raw 的也可以重新生成)、.qws(界面状态)都可以删掉,下次打开.qpf后重新编译就会重新生成。我一般分享工程时会打个压缩包,里面只放"源码 + 约束 + 工程文件 + README",接收方打开即用,不占空间也不容易版本混乱。

6.2 老工程用新版 Quartus 编译时的兼容性难题

从 Quartus II 13.1 升级到 Quartus Prime 20.1 或更高版本后,直接双击老.qpf文件,大多时候能打开,但编译时常常会遇到三类问题:

第一类是器件支持缺失,老工程里用到的 Cyclone III、Cyclone IV 在某些新版本 Lite 里可能不再支持,需要单独下载旧版 Device Support。第二类是 IP 核版本升级,老的 PLL、RAM IP 在新版本里需要重新生成,因为 IP 配置文件格式不兼容。第三类是 Tcl 脚本和约束语法变化,比如set_global_assignment的某些参数在新版本里被废弃或改成推荐写法。

我的建议是:如果老工程能正常运行,并且你不需要新器件、新功能,就不要为了"用新版"而去迁移工程。工具只是手段,稳定才是目标。真有迁移需求时,先在新的空工程里把源码和约束逐个加进去,每加一个模块就编译一次,这样出了问题能快速定位是哪个部分不兼容,而不是一口气把整个工程倒进去,满屏报错当场傻眼。

6.3 卸载残留与重装前的清理

热词里有"怎么删除 quartus",说明很多人在卸载重装时也被坑过。Quartus 的 Windows 卸载程序在控制面板 -> 卸载程序里能找到,但光靠它卸载往往不干净,重新安装时会残留一堆配置导致各种奇怪问题。我重装前会手动再清理这几个位置:

  • C:\intelFPGA_lite或C:\altera安装目录残留
  • C:\Users\<用户名>\AppData\Roaming\Altera和C:\Users\<用户名>\AppData\Roaming\IntelFPGA
  • 注册表里搜索 Altera / Quartus 相关键值(这步建议用注册表编辑器手动确认,别用网上那种"一键清理"工具,容易误删系统内容)
  • C:\ModelSim之类的仿真器关联组件

卸载重装之前,最稳妥的做法是把你的全部工程文件备份到另一块盘里,特别是.qsf和源码。我见过不少人重装完 Quartus 才发现工程文件还在,但打开后路径关联全部失效,IP 核文件找不到,最后只能重建工程——这个时间成本比装软件本身高多了。

我个人在实际操作中的体会

讲了这么多流程和坑,最后聊聊我对 Quartus 这个工具本身的理解。它确实不算一个"好用"的软件:界面老旧、安装包巨大、编译速度慢、报错信息有时也很费解。但它在 FPGA 开发工具链里的地位短期内很难被撼动,尤其是国内大量的教学资源和开发板生态都围绕它展开。我的建议是,不要一上来就追求把 Quartus 的每个功能都摸透,而是先跑通"新建工程 → 写代码 → 引脚约束 → 编译 → 下载 → 固化"这条主线,把成就感建立起来,后面再逐步深入时序分析、仿真、调试这些进阶内容。

说一个让我印象很深的小技巧:调试时在代码里多用$display打印关键信号的仿真值,在 Quartus 的编译报告里多看一眼 Fmax 秒级变化,比满屏找 bug 高效得多。工具有很多缺点,但一个稳定复现的流程比什么都值钱。少走弯路,慢慢就会觉得 Quartus 也没那么难用。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询