ARTICLE DETAIL

资讯详情

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

FPGA入门必看:Quartus II原理图、管脚分配、编译下载全流程

FPGA入门必看:Quartus II原理图、管脚分配、编译下载全流程 做FPGA开发绕不开Quartus II这款软件但很多初学者最难受的阶段不是看不懂Verilog而是手里有块开发板却不知道怎么把软件里的电路真正跑起来。我当年第一次用Quartus II连接开发板时光是管脚分配就卡了整整一下午明明编译都通过了下载到板子上灯就是不亮最后才发现是Pin Planner里引脚的编号填错了。这篇文章就把这条链路完整梳理一遍原理图绘图、管脚分配、编译、下载每一步该怎么做、为什么要这么做、遇到问题怎么排查全部摊开讲清楚。不管你是刚拿到开发板的自学者还是正在准备课程设计的学生照着这个流程走一遍基本能把“软件画图-下载到板”这条全链路彻底打通。1. 开工前把这四样东西先搞定1.1 开发板和下载器怎么选先说硬件。Quartus II是Intel原AlteraFPGA的官方开发环境市面上绝大多数国产开发板用的都是Cyclone IV、Cyclone 10这类芯片所以选板子时优先确认核心芯片是Intel/Altera的FPGA就行。常见的有EP4CE10F17C8、EP4CE6E22C8、EP4CE15F23C8这些型号前两位EP4C代表Cyclone IV系列中间的10或6代表逻辑单元数量级别后面F17、E22是封装和管脚数C8是速度等级。下载器这块绝大多数学习板标配的是USB-Blaster。这个下载器一端是USB口接电脑另一端是10针或者14针的JTAG排线接开发板功能就是把你电脑上编译生成的配置文件烧写到FPGA里。如果手里没有原装的市面上兼容版也够用但驱动安装上要花点心思后面细说。1.2 Quartus II版本别乱装很多初学者上来就装最新版Quartus结果发现自己的开发板芯片型号在器件列表里根本找不到或者软件启动就要吃好几个G内存电脑直接卡死。这里有个非常现实的原则Quartus版本跟着你的芯片走不是越新越好。如果你用的是Cyclone IV这种老一代芯片Quartus II 13.1或者13.0是教学和自学圈子里最稳的选择。这个版本对Cyclone IV支持非常成熟网上资料多遇到问题一搜就有答案而且软件体量相对小对电脑配置要求也不高。如果芯片是Cyclone 10 LP这类可以考虑Quartus Prime 17.0以上的版本但界面和操作逻辑跟老的Quartus II差别不大本文讲的流程依然适用。关于软件获取和授权建议直接去官网下载对应版本也可以找学校实验室或公司内部分享的安装包。至于License授权现在很多高校都有正版授权可以直接用校园网登录获取个人学习的话Quartus II本身有30天评估期也有免费的Web Edition版本足够做基础的绘图、仿真和下载学习用了。1.3 安装时最容易踩的坑驱动软件本身的安装流程很简单一路Next就行真正的坑在USB-Blaster驱动。安装完Quartus后先把USB-Blaster插到电脑上打开设备管理器如果看到一个带感叹号的未知设备说明驱动还没装上。驱动的路径一般在Quartus安装目录下的drivers文件夹里比如C:\altera\13.1\quartus\drivers\usb-blaster。右键未知设备选“更新驱动程序”手动指定到这个目录让它搜索安装即可。如果提示驱动签名问题Windows会拦截老版本驱动这时可以临时禁用驱动签名强制安装或者用兼容模式安装驱动装完之后再恢复签名验证这个步骤在Win10/Win11上比较容易踩坑。1.4 工程目录规范个人极建议这一条是血的教训。FPGA项目文件特别多一个最简单的原理图工程编译完就会生成几十个衍生文件。我第一次偷懒把所有文件丢在桌面结果编译一次报错都找不到文件在哪后来清理系统时误删了工程文件辛辛苦苦画的电路全部白费。建议每个工程单独建一个文件夹命名规则用“日期-项目名”比如20250312_led_blink。工程内部可以再分src源文件、doc原理图资料、芯片手册、output编译输出、下载文件三个子目录。这样不仅文件好找后面做版本管理、给别人交接也都方便得多。2. 创建工程与原理图绘图2.1 新建工程时的几个关键参数打开Quartus II在主界面选择File → New Project Wizard就开始创建工程了。这里有几个参数要重点注意。第一是工程名称和顶层实体名称必须用英文字母开头不能带中文、空格、特殊符号。比如led_test可以测试不行led test也不行。因为Quartus的编译工具链对路径和名称里的非ASCII字符支持不好开始界面看着没事编译到一半就会报一堆莫名其妙的错误。第二是器件型号选择。这里别偷懒直接点Finish一定要精确选择你的开发板芯片型号。怎么看芯片型号看开发板上的丝印通常芯片表面会印一串字母数字比如EP4CE10F17C8。选错型号会导致后边管脚分配对不上严重的话下载时直接报ID不匹配。如果实在看不清丝印可以去买板子的店铺看商品详情页一般都会把核心芯片型号标出来。第三是EDA工具设置页面如果只是做原理图输入和下载保持默认即可。后面要加ModelSim仿真时再到Settings里把仿真工具指定为ModelSim指定好仿真库路径这个后面可以随时改。2.2 原理图里怎么“画电路”Quartus II支持两种主流设计输入方式原理图输入和Verilog代码。很多学校课程前期会用原理图帮学生建立数字电路概念后面再过渡到代码。这里的绘图其实是画“逻辑电路图”不是画PCB你画的每一个门电路、每一个输入输出符号最终都会映射到FPGA内部的逻辑单元上。新建原理图文件在File → New里选Block Diagram/Schematic File就会进入图形编辑界面。在空白处双击或者从菜单栏的Edit → Insert Symbol打开符号库就可以往原理图上放器件了。符号库里什么都有基本逻辑门与门AND2、或门OR2、非门NOT、触发器DFF、计数器counter、输入输出引脚input、output、还有各种功能模块lpm_*系列。搞数字电路实验时最常用的就是逻辑门、引脚和几个基础的LPM模块。举个最简单的例子做一个LED闪烁的电路。我们先在符号库里放一个input引脚命名为clk再放一个output引脚命名为led。中间放一个counter计数器模块把计数器最高位接到led上。因为FPGA开发板上的晶振一般是50MHz计数器计数到一定位数后最高位的翻转频率差不多就是1Hz左右LED就会以肉眼可见的频率闪烁。把输入输出引脚用连线工具工具栏的直角连线图标连到计数器模块上一个最简单的原理图工程就算画好了。2.3 常用但容易忽略的绘图设置画图时有几个小设置很影响后续效率。连线时如果不想一条条手动点可以用自动连线功能选中一个引脚拖到目标引脚附近松开软件会自动连好不过自动连线偶尔会绕弯还是建议自己拉直角线整洁的图后面排查问题会很省心。总线命名要规范。FPGA开发板上LED灯往往有8个如果每个都画一根线接到输出引脚图会非常乱。正确做法是先定义一个8位总线输出比如led[7..0]然后用总线连线粗线一次性连接到所有引脚上。能看出原理图设计水平的地方一半在总线处理上。每个输入输出引脚双击后都要起名字名字必须和你的硬件连接对应。比如clk、rst_n、led[7..0]这些。不要用pin1、pin2这种没有含义的名字后面做管脚分配时你会疯掉。3. 管脚分配从逻辑符号到物理引脚3.1 为什么要管脚分配这是初学者最容易懵的一步。你在原理图里画的clk、led在Quartus眼里只是一个个“逻辑信号”它并不知道这个信号最终要走FPGA芯片的哪一个物理引脚。FPGA芯片有几十上百个引脚每个引脚都有编号比如PIN_M9、PIN_A11之类。管脚分配Pin Assignment干的事情就是把逻辑信号和物理引脚一一对应起来。如果你不分配Quartus会随便给你挑几个引脚编译能通过但下载到板子上后板子上的LED、按键、晶振根本不会和你的逻辑信号连上灯当然不会亮。3.2 查开发板原理图确认硬件连接管脚分配最关键的参考文件是开发板的原理图。买开发板时店家通常会附带资料包里面一定有原理图PDF。打开原理图找到LED部分的电路一般会标注类似LED1 - PIN_3、LED2 - PIN_4这样的网络名和FPGA引脚号。同样找到晶振部分50MHz晶振的输出引脚通常标注为PIN_M9这类这个引脚就是你要分配给时钟信号的物理引脚。有的开发板原理图可能只标注网络名而非引脚号那还需要对照FPGA芯片手册里的引脚功能表二次确认这个工作宁可慢一点也别错管脚分配错了下载后是没有任何提示的点不亮就是点不亮。3.3 Pin Planner实操步骤管脚分配在Quartus的Pin Planner界面里做。在工程编译前先点菜单栏Assignments → Pin Planner就能打开图形化的管脚编辑窗口。界面左侧是FPGA芯片的物理引脚图右侧是当前工程里未分配的逻辑信号列表。操作很简单选中一个逻辑信号比如clk在对应的Location栏输入物理引脚编号比如PIN_M9或者直接双击后从下拉列表里选择。分配完所有引脚后记得保存。Quartus会把分配结果写入工程的.qsf文件里。这一步千万要养成习惯分配完看一眼I/O Bank电压一般是3.3V或2.5V确保和开发板上的bank电压一致否则就算引脚号对了电平不匹配也可能导致信号异常。3.4 管脚分配三条红线管脚分配虽然操作简单但有几个红线必须记住。第一专用配置引脚不能乱用。FPGA有专用的配置引脚如DATA0、DCLK、nCONFIG、nCEO等这些引脚要么是下载配置用的要么是上电时序控制用的普通IO功能的引脚分配时别去碰它们。在Pin Planner里这类引脚通常会有特殊颜色或标注分配前多留个心。第二时钟信号必须接到专用时钟引脚。FPGA芯片上有一组专用全局时钟引脚用字母加数字表示比如PIN_M9就可能是全局时钟引脚。如果时钟信号接在普通IO上功能上也许能跑但时序会很差频率高了或者逻辑复杂了就会出时序违例、偶发跑飞的问题。看板子原理图时注意晶振连的是哪个引脚那个引脚一般就是专用时钟引脚。第三分配完一定要重新编译。管脚分配是对工程约束的修改改了约束不重新编译下载的还是旧版本等于白改。而且重新编译时Quartus会做管脚合法性检查如果有冲突或非法分配这里会直接报错比下载后点不亮好排查一百倍。4. 编译从原理图到可下载文件4.1 编译四步分别干了什么编译按钮在主工具栏上是最醒目的那个右箭头图标全称是Start Compilation。但很多人不知道点这一个按钮的背后软件自动跑了四个阶段。第一阶段是分析和综合Analysis Synthesis把你画的原理图或者写的Verilog转换成底层的逻辑网表也就是把门电路、触发器这些元素映射成FPGA内部的查找表和寄存器资源。这个阶段如果原理图有语法错误、连线错误都会在这里报出来。第二阶段是适配Fitter也叫布局布线。Quartus会把网表中的逻辑单元放到FPGA内部的物理位置上并规划好它们之间的走线。这个过程受管脚约束影响很大管脚分配得好布线就快且稳管脚分配乱七八糟的Fitter要花很多时间绕线编译速度就慢。第三阶段是装配Assembler生成最终的下载文件。对FPGA来说就是.sof文件对配置芯片来说就是.pof文件。.sof文件是直接烧进FPGA内部SRAM的掉电就丢.pof是写给外部配置芯片的掉电不丢。第四阶段是时序分析Timing Analysis检查你的设计能不能在时钟要求下正常工作有没有建立时间违例、保持时间违例。初学者做简单灯控实验一般不会有时序问题但如果后面做复杂数字系统、跑高速接口这步就是决定成败的关键。4.2 编译通过后看哪几个关键信息编译结束后界面底部的Messages窗口会显示整个编译过程的摘要重点看两个地方。第一个是资源使用报告。在Compilation Report里展开Fitter → Resource Section能看到你的工程用了多少逻辑单元、多少寄存器、多少引脚。如果引脚使用数量和你的管脚分配数量对不上或者逻辑单元用量为0一定要回头检查是不是原理图画错了比如输入输出没有真正连到逻辑门上。第二个是编译告警Warnings。这里有几百条告警很正常但有些告警必须处理。比如提示某某引脚没有分配说明你有逻辑信号没做管脚约束提示时钟没有约束或未使用说明时序分析可能没起作用。双击告警信息可以自动跳到对应位置比肉眼翻报告快得多。4.3 编译告警不用全怕但有几种必须处理刚开始学的时候我一看Warnings几百条就紧张生怕哪里出了问题。后来总结出来告警分三种。第一种是信息性告警比如告诉你某个IP核用了默认参数这种不影响功能可以忽略。第二种是警告性告警比如Pinsled[0]has no clock这类说明你某个引脚没有接时钟查一下是不是漏连了再比如Output pins are stuck at GND or VCC说明输出端接死了多半是逻辑写死的问题。第三种是错误类告警虽然显示在Warnings里但实际是错误前兆比如时序约束缺失、时钟端口没有驱动等这类要当成错误处理。还有一个经验编译报错不可怕最怕的是编译通过但下载后没有现象。所以每次编译通过后我都会去Messages里扫一眼Warnings凡是和“pin”“clock”“unused”相关的全部点开看一遍大概率能提前发现隐患。5. 下载到板子跑起来才是硬道理5.1 硬件连接顺序编译通过生成了.sof文件终于到了最激动人心的下载环节。但先别急着点下载按钮硬件连接顺序很关键。先把USB-Blaster的JTAG排线插到开发板上注意排线方向通常板上会有丝印箭头或者白色标记插反了虽然一般不会烧板子但会检测不到器件。再把USB口插到电脑上。最好先插JTAG再插USB这样设备枚举更稳定。然后给开发板上电。有些开发板支持USB供电有些需要单独的电源适配器。上电后看板上电源指示灯是否亮起。这里有个很经典的问题JTAG排线插着时如果板子没供电电脑是检测不到FPGA的很多人排查半天驱动问题结果发现是板子忘了上电。上电顺序建议是JTAG接好 → USB接好 → 开发板上电 → 打开Quartus Programmer。5.2 Programmer下载实操在Quartus主界面点Tools → Programmer打开下载窗口。第一次打开可能左上角硬件显示No Hardware这时点Hardware Setup在列表里选择USB-Blaster点Close返回。然后在下载列表区域如果之前编译过软件会自动把.sof文件关联进来文件路径显示在列表里。如果没有自动关联点Add File手动选择工程output目录下的.sof文件就好。模式选择保持JTAG即可。勾选列表里的Program/Configure一栏的复选框然后点Start按钮。正常情况下进度条会从0跑到100%窗口下方的Message区域会显示Succeeded。如果这时开发板上的LED开始按照你预期的方式闪烁或点亮恭喜全链路算是真正打通了。5.3 SOF与JIC掉电不丢的固化方案.sof文件是直接配置到FPGA内部SRAM的优点是用JTAG下载快、适合调试缺点是掉电就丢失板子重新上电后配置就没有了。想要掉电不丢需要把配置烧写到板子上的配置芯片里比如EPCS系列。流程是先在Quartus里点File → Convert Programming Files把.sof转换成.jic文件。转换时需要指定配置芯片型号比如EPCS16要跟你板子上实际焊的配置芯片对应上。转换生成.jic后在Programmer里添加这个.jic文件然后勾选下载。这时Quartus会有提示是否覆盖配置芯片确认即可。烧写完成后板子重新上电FPGA会自动从配置芯片加载程序LED照样该闪就闪。日常调试用SOF验证完功能想脱机运行就用JIC固化这两者的区别一定要搞清楚。5.4 加餐SignalTap能省很多事当你的设计变得复杂板上现象不对时全靠肉眼调会非常痛苦。这时候Quartus自带的逻辑分析仪SignalTap II就是救命工具。SignalTap可以实时抓取FPGA内部节点信号基本逻辑和示波器类似。在工程里设置一个.stp文件选择想要观察的信号设置触发条件然后重新编译再用SOF文件下载到板子上。运行SignalTap后它就能把FPGA内部信号实时抓到电脑上显示成波形。对初学者来说这个工具可能用不上但我建议提前知道它的存在。当你第一次遇到“下载成功了但功能不对劲”又完全不知道从哪里排查时能想到用SignalTap去抓内部信号就已经比很多只会干瞪眼的人强一大截了。6. 实测常见问题与排查手册6.1 下载器识别不到症状Programmer窗口Hardware Setup里看不到USB-Blaster或者设备管理器里显示未知设备。排查步骤按顺序来确认开发板已上电电源指示灯亮换一个USB口优先插主机后面的USB口前置USB口供电可能不足换一根USB线有些细的充电线只有电源线没有数据线识别不到就是这原因重新安装USB-Blaster驱动路径在Quartus安装目录的drivers\usb-blaster下如果以上都不行换一台电脑试试排除是下载器本身的问题。6.2 JTAG chain 报错症状下载时报Error (209015): Cant access JTAG register或者JTAG chain broken。这类问题多半是JTAG链路有问题。下载器排线没插牢、插反、或者开发板上JTAG引脚有虚焊都可能导致这个报错。处理方式重新插拔排线检查排线方向确认开发板供电正常如果板子和下载器之间用了转接板也检查一下转接板上的跳线设置。这个报错还有个容易忽略的点开发板上多个JTAG器件——比如FPGA和配置芯片共用一条JTAG链路——如果其中一个器件进入异常状态整条链路就断了排查时可以把链路上所有相关芯片的电源都确认一遍。6.3 引脚冲突与分配后编译错误症状管脚分配后重新编译报出Pin is not assigned或者Conflict错误。第一种情况是你还有信号没分配引脚比如原理图上有个output引脚没做Pin Assignment编译时Fitter不知道放哪就直接报错。解决方法是回到Pin Planner把剩余信号全部指定引脚。第二种情况是分配给某个信号的引脚和另一个信号冲突或者分配到了专用引脚上。比如你把普通信号分配到了nCE、nCEO这类专用引脚上Quartus会直接拒绝。这时要看错误信息里提示的是哪个引脚回到Pin Planner里改掉就好。还有种隐蔽的情况使用了lpm_counter这类IP核时Quartus会为时钟、复位等信号自动分配一些全局信号引脚如果你又在管脚分配里把这些引脚手动分配给别的信号会触发资源冲突。遇到这类错误先别急着删分配看看编译器提示的冲突原因再动手。6.4 编译速度慢到怀疑人生编译一个工程动辄几十秒甚至几分钟很正常但如果慢到离谱就要找原因了。最大的元凶是工程里包含了大量IP核或复用模块。每次编译都要重新综合一遍所有模块哪怕你只是改了一个引脚的约束。解决方案是善用Quartus的Incremental Compilation增量编译功能把稳定的模块设为Partition这样下次编译时没改动的模块可以直接复用上次的结果速度能快好几倍。另一个原因是工程文件夹放在了机械硬盘上。FPGA编译会生成海量的小文件机械硬盘随机读写慢编译速度会被严重拖累。把工程放到SSD上直观感受就是编译快很多。如果你的工程文件夹在一台配置一般的老电脑上可以试试关掉杀毒软件对工程目录的实时监控有时候杀毒软件扫描生成的文件会疯狂占用IO拖慢整个编译过程。管脚分配还有个小技巧工程里引脚数量非常多时手动一个个在Pin Planner里拖很痛苦而且容易出错。这时可以用Tcl脚本批量分配。Quartus支持在命令行里执行Tcl命令也可以写一个.tcl脚本文件放置一段像set_location_assignment PIN_M9 -to clk这样的命令列表然后在Quartus Tcl Console里执行一次就能把几十个引脚全部约束好。工程越复杂这个技巧就越值钱后续改板子改引脚的效率能提升一个量级。整个流程走下来你会发现Quartus和开发板之间的链路其实并不复杂核心就是“绘图→分配管脚→编译→下载”四步。但每一步都有它不能犯的错绘图时命名要规范分配时一定要查原理图编译后要留个心眼看看告警下载时别忽略硬件连接顺序。踩过几次坑之后我对这套流程最大的体会就是FPGA开发不是一个“画画图跑一下”的事而是“设计、约束、实现、验证”四件事的闭环。管脚约束是硬件和软件之间的桥编译是逻辑到物理的映射下载是最后那一脚临门任何一个环节脱节板子都不会理你。最后再分享一个个人习惯每次跑通一个新功能我会把编译报告里资源占用、时序裕量、还有当时的.qsf管脚分配文件都截个图存到工程文件夹里。等哪天功能改挂了、性能对不上了回头翻一翻这些现场记录往往能很快定位是哪一步改动把原来的状态破坏了。这个习惯帮我省过很多次返工希望对你也有用。
返回列表