新闻详情

新闻详情

首页 / 资讯中心 / 详情

Quartus II FPGA开发全流程:从原理图绘制到程序下载

发布时间:2026/10/2 4:53:08来源:尧图网络
Quartus II FPGA开发全流程:从原理图绘制到程序下载
做FPGA开发的第一道坎往往不是写代码而是把整套工具链和开发板打通。很多新手在Quartus II里画好了图、写好了代码结果卡在管脚分配上或者编译能过却下载不进去折腾一整天连灯都没点亮。我最早接触Quartus II的时候也是这样对着密密麻麻的管脚表格一头雾水后来经过几次完整的“从绘图到下载”流程才把EDA工具和开发板之间的关系彻底理清楚。这篇内容我就用一套最简单的LED实验把Quartus II连接开发板的完整链路拆开讲清楚覆盖工程建立、原理图绘图、管脚分配、全编译流程、程序下载这几大块还会附上我自己踩过的坑和排查方法。如果你手上有任意一块Altera或Intel FPGA开发板并且刚走到“画完图不知道下一步怎么办”这一步这篇文章就是给你准备的。1. 开工前先把环境弄清楚Quartus II版本、驱动与开发板选型1.1 选对版本比会装软件更关键Quartus II的版本选择是很多人忽略的第一步。网上搜“quartus ii安装教程”跳出来的结果五花八门有13.0、13.1、15.0、18.1甚至Prime系列。别急着下最新版先看你的开发板主芯片是什么型号再决定用哪个版本这一步错了后面全是麻烦。Quartus II 13.1是个分水岭版本。它支持Cyclone IV、Cyclone V、Stratix V等主流器件而且界面经典、资料多、破解和教程齐全很多高校实验室和开发板厂家把13.1作为配套版本。如果你的板子是Cyclone IV系列比如EP4CE6、EP4CE10、EP4CE22用13.1基本不会错。Cyclone 10 LP和MAX 10这类稍新的器件建议用Quartus Prime 17.1或18.1。Intel接手之后把Quartus II改名成Quartus Prime免费版叫Lite版支持中小容量器件对个人学习完全够用。另外提醒一句安装路径不要带中文和空格尽量放在纯英文目录下否则后面综合编译时偶尔会冒出来一些莫名其妙的环境变量问题。安装完成后先确认Device选项里能看到你需要的芯片系列如果找不到说明安装时器件支持包勾选不全需要补装设备库。1.2 开发板选型与芯片型号的对应关系市面上常见的FPGA开发板大致分几类一类是高校实验室常见的DE系列比如DE0、DE10-Lite一类是国内厂商做的黑金、正点原子、小脚丫、米联客这些还有一类是核心板加扩展底板的方式比如AXU15EGZynq UltraScale。无论是哪种拿到板子第一件事不是急着插电而是找到板子对应的原理图PDF和芯片型号。拿Cyclone IV系列举例EP4CE10F17C8这个型号拆开看EP代表Cyclone系列4CE是Cyclone IV E10代表逻辑单元数量大概10K级别F17是封装类型BGAC8是速度等级。管脚分配时Pin Planner里显示的引脚名称比如PIN_M1、PIN_E1这些必须和开发板原理图上的网络标号对上。最简单的确认方法就是打开原理图搜索“LED”字样找到LED灯连接的FPGA引脚编号比如LED1连接的是PIN_M1那你的管脚约束就要写成PIN_M1。如果你是照着一块新板子做实验先花半小时把以下信息记下来时钟引脚通常连接到50MHz有源晶振、复位按键引脚、LED引脚、数码管段选和位选引脚、UART引脚。这些是练手阶段最高频用到的外设。1.3 USB-Blaster驱动与硬件连接Altera/Intel FPGA的下载器通常叫USB-Blaster分原厂版和兼容版。USB-Blaster的驱动在Quartus II安装目录的drivers文件夹里能找到但在Windows 10/11上第一次插入USB-Blaster时经常出现“设备无法启动”或“未知设备”的提示这是驱动签名问题。处理方法是在Windows的“高级启动”选项里选择“禁用驱动程序强制签名”重启后手动更新驱动指向Quartus安装目录下的drivers\usb-blaster文件夹。我这里强调一下必须先禁用驱动签名再装驱动顺序反了反复插拔也没用。装好后打开设备管理器能看到“Altera USB-Blaster”出现在通用串行总线设备下带黄色感叹号就是不正常。连接顺序也有讲究。USB-Blaster一端接电脑USB口另一端是10针或者14针的JTAG排线插到开发板的JTAG口上。注意排线1脚位置一般开发板上会标注反插轻则识别不到重则烧坏下载器。开发板先上电再连接USB-Blaster最后打开Quartus II。虽然大部分时候先开软件再上电也能用但这个顺序能避开很多“No Hardware”的尴尬。2. 从画图开始原理图输入与模块化设计2.1 新建工程时最容易忽略的几个设置打开Quartus II 13.1File - New Project Wizard一路点Next到器件选择页面。这里要选择你开发板对应的芯片家族和具体型号。如果列表里没有说明安装时的Device支持包不全。做完器件选择后还有一个容易被忽略的页面是EDA Tool SettingsQuartus会问你要不要关联第三方工具比如ModelSim-Altera。我建议在这个页面就把仿真工具设置成ModelSim-Altera版本选匹配的Quartus II 13.1对应ModelSim-Altera 10.1e这样后面生成仿真网表的时候路径都是自动配好的。如果现在不设置后面综合出网表再想加就要去Assignments - Settings - EDA Tool Settings里单独加步骤更多。工程路径同样建议用纯英文工程名也不要带空格。比如 d:/fpga/led_test。我见过有人把工程放在桌面中文文件夹里结果编译到一半报一堆诡异错误复制到英文路径后不治而愈。Quartus对路径的容忍度比VS还要低这已经算是个普遍经验了。2.2 原理图绘图从摆放元件到连线标题里说的“绘图”在Quartus II里对应的就是原理图输入Schematic。这种方式对新手非常友好不用写一行HDL代码全靠拖元件和连线完成一个简单设计。新建方式File - New - Block Diagram/Schematic File生成一个.bdf文件。双击空白处打开Symbol窗口在库目录里找到primitives - logic能看到AND2、OR2、NOT这些基础门电路在primitives - pin里能找到input、output引脚。从一个最简单的二输入与门开始拖一个AND2进来再拖两个input和一个output把线连好。连线的细节鼠标左键从一个引脚端点开始拖会出现十字光标到目标端点松手。线必须是实心蓝色虚线的线说明没连上。每条线要起网络名双击input引脚就能改名字比如key1、key2、led_out。命名规范强烈建议用有意义的信号名别用node1、node2这种后面管脚分配全靠名字找信号。保存后最好马上做一次“Create Symbol Files for Current File”也就是把当前.bdf封装成一个符号。这个操作很多人不知道但它能让一个原理图模块被上一层级调用是模块化设计的基础。2.3 把模块封装成符号为复用留好退路一个完整的FPGA设计很少是只有一个门的逻辑所以从画图的第一天起就应该建立模块化意识。比如你画了一个按键消抖模块画好连线后File - Create/Update - Create Symbol Files for Current FileQuartus会生成一个.bsf符号文件。之后新建一个顶层bdf文件双击空白处在Project目录下就能找到刚才生成的符号可以直接拖进顶层图里使用。这样做最大的好处是每个模块独立编译、独立验证出了问题不用在几百条连线里找。而且做完LED流水灯实验后这个流程可以直接复用到数码管扫描、UART收发等项目上。后续如果你转用Verilog/VHDL写代码也可以在File - Create/Update里把HDL文件转成符号混用原理图和HDL这在大项目里很常见。绘图阶段常见的低级错误包括多个output拼在一个信号上产生多驱动冲突、input引脚悬空、信号名大小写不一致。Quartus对信号名是大小写敏感的key1和KEY1是两个不同的信号这个细节在后续管脚分配时最容易坑人。3. 管脚分配实战别直接在代码里写死引脚3.1 拿到开发板原理图先看什么管脚分配是整个流程中对新手最不友好的环节但只要建立好方法其实机械性很强。我习惯拿到一块开发板后先打开原理图PDF按功能搜索关键字LED、CLOCK、KEY、UART。每搜到一个外设就把对应的FPGA引脚号记录下来整理成一个表格。举个例子某开发板的LED接线可能是这样信号名FPGA引脚号网络标号LED1PIN_M1led[0]LED2PIN_M2led[1]LED3PIN_L1led[2]CLK_50MPIN_E1clk整理这个表格的功夫不能省因为Quartus的Pin Planner里列出的引脚是芯片物理引脚不是你代码里的信号名。如果不做这个映射你根本不知道哪个信号应该填哪个位置。更关键的是管脚分配要参考开发板原理图中的“bank电压”Cyclone IV的BANK1如果接了3.3V那么分配到BANK1的I/O Standard就填3.3-V LVTTL填错会导致下载后信号电平不匹配。3.2 Pin Planner操作的细节做完原理图和编译后点击Assignments - Pin Planner会弹出图形化的引脚视图左边是引脚列表右边是芯片封装图。在列表的“Node Name”列找到你的信号名双击“Location”那一列下拉选择对应的引脚编号。这里要强调两点。第一“Location”下拉框里显示的是芯片物理引脚比如PIN_M1不是信号名。很多人在这里把信号名当成引脚填进去保存后编译就报“Cant find pin location”。第二如果同一个信号被多个引脚占用或者同一个引脚分配给了两个信号Pin Planner会直接在左侧用红色标记鼠标悬停能看到冲突原因。分配完之后不要忘记填写I/O Standard。Quartus II默认会自动匹配但强烈建议手动设置为3.3-V LVTTL因为有些开发板的外设接口用了不同电压标准比如LVCMOS、TTL默认值可能跟板子实际电平不匹配。我遇到过下载后LED输出高电平电压不对的情况排查下来就是I/O Standard没设置对。保存管脚分配后Quartus会把约束写进.qsf文件。如果你重新打开了工程发现之前的管脚分配还在就是这个文件在起作用。3.3 用QSF文件管理管脚约束Pin Planner操作的底层其实是编辑QSFQuartus Settings File文件格式如下set_location_assignment PIN_M1 -to led[0] set_instance_assignment -name IO_STANDARD 3.3-V LVTTL -to led[0]当你需要复刻一个工程或者把别人的工程管脚配置快速搬到自己的工程时直接编辑QSF比在图形界面上翻更快。用记事本打开工程的.qsf文件找到set_location_assignment开头的行按上面的格式逐行添加即可。如果把信号定义成数组形式比如output [7:0] led管脚分配也可以逐位写set_location_assignment PIN_M1 -to led[0] set_location_assignment PIN_M2 -to led[1]注意QSF里的信号名必须和设计里的信号名完全一致包括大小写。我试过一次把led[0]写成了led0编译时Quartus直接忽略这条分配直到下载到板子上才发现引脚根本没约束上。使用QSF文件还有一个好处就是可以把整个工程的管脚分配做成模板不同实验之间复用省去重复手动操作。4. 编译不是点一下就行全流程拆解与常见警告4.1 全编译五步走每一步在干什么Quartus II的编译按钮边上有个下拉箭头点开可以看到Analysis Synthesis、Fitter、Assembler、Timing Analyzer、EDA Netlist Writer等选项。直接点“Start Compilation”是跑全流程但理解每一步在干什么才能看懂报错和警告。第一步Analysis Synthesis分析和综合负责检查语法错误、分析原理图连接关系然后把设计转换成一个由逻辑单元和查找表组成的网表。这一步报错的通常是语法问题、信号未定义、模块端口不匹配等。第二步Fitter布局布线把网表里的逻辑单元放到FPGA实际的逻辑阵列中并完成连线。第三步Assembler装配根据布线结果生成用来下载的配置文件包括.sof和.pof文件。第四步Timing Analyzer时序分析检查设计能否在指定的时钟频率下满足建立时间和保持时间要求。第五步EDA Netlist Writer仿真网表生成供ModelSim等外部工具做功能仿真。我见过有人每次都点全编译但对“编译到底做了什么”一无所知。实际排查问题的时候看Compilation Report里的某个步骤尤其是Fitter后的资源使用情况、管脚分配报告能快速定位问题。比如管脚分配后可以在Fitter - Pin Out File里查看最终所有引脚的分配状态。4.2 编译报错与警告的正确处理姿势编译过程中的Error和Warning要认真区分对待。Error不处理就一定不能下载Warning则要分类有些Warning可以忽略有些Warning是在提示你设计可能有隐患。常见Error之一“Cant place multiple assignments to same destination pin”。这个是由于两个信号分配到了同一个引脚导致去Pin Planner里检查重复项就好。另一个常见Error是“Cant find design node”多半是信号名和管脚分配里的名字不一致。修改后必须重新全编译Quartus不会自动把修改过的管脚约束同步到已经生成的文件里。比较隐蔽的是Warning。比如“Warning (10028): Cant resolve multiple constant drivers for net”说明你的设计里有多个驱动源同时连到一个信号上通常表现为原理图里两个输出口接到同一条线这在组合逻辑里会产生竞争必须改掉。再比如“Critical Warning: Pin led[7] not assigned to an output pin”说明你还有未分配管脚的信号这种Warning如果不处理下载后板上那个信号就是悬空的功能肯定不对。我的习惯是编译完成后先从Compilation Report里看“Processing”标签下有没有红色Error再筛“Critical Warning”。普通Warning可以先记录放到一边但只要涉及管脚未分配、时钟未约束、多驱动的必须当场解决。4.3 时序问题从slack为负说起当你跑一个LED闪烁实验10MHz或50MHz的时钟下基本不会遇到时序问题。但当设计复杂度上来时钟频率提高就会在Timing Analyzer报告里看到类似“slack-2.345ns”这样的信息。Slack为负代表时序不满足要求也就是数据传输在一个时钟周期内来不及稳定。遇到负slack优先检查三个地方时钟约束是否设置了正确的时钟频率Assignments - Settings - Timing Analysis Settings里添加时钟约束代码或原理图中是否存在过长的组合逻辑链Fitter报告里是否提示关键路径走得太远。降低工作时钟频率是最直接的应急手段但如果是在做高频设计就需要重新审视流水线划分了。初学阶段只要时钟约束填对了50MHz以下的简单逻辑很难把slack做负。还有一点Quartus II 13.1默认的时序分析流程里如果没有手动添加时钟约束Timing Analyzer基本是“哑巴”状态不报错但也不代表你的设计时序是收敛的。养成写约束、看时序报告的习惯是走向正经FPGA开发的分水岭。5. 下载到板子JTAG与AS模式到底怎么选5.1 Programmer界面操作全流程编译通过后点击Tools - Programmer打开下载界面。第一次进来Hardware Setup那里多半是显示“No Hardware”不要慌点Hardware Setup选USB-Blaster如果能识别出设备界面上会显示“USB-Blaster [USB-0]”。接着在Mode下拉框选JTAG点击Add File把你工程目录下的.sof文件加载进来。然后勾选Program/Configure那一列最后点Start。下载完成后Quartus下方的进度条会显示“100% (Successful)”此时开发板上的设计应该已经跑起来了。如果点Start之后进度条卡在0%不动或者立刻报错先把开发板断电然后重新上电再试一次。JTAG下载对供电稳定性有一定要求有的板子USB口供电不足就会导致下载到一半失败。这种情况接上外部电源基本能解决。5.2 SOF和POF的文件转换与固化JTAG模式下载的是.sof文件这个文件有个特点掉电即失。也就是说开发板断电重启后程序就没了LED也不闪了。要让程序上电自动加载需要用AS模式把配置写进FPGA的配置芯片EPCS系列或者使用支持内部flash的器件如MAX 10。先把.sof转换成.pofFile - Convert Programming FilesProgramming file type选Programmer Object File (.pof)Mode选Active Serial然后在Input files to convert里添加.sof文件点击Generate生成.pof。回到Programmer界面Mode切换为Active Serial Programming添加刚才生成的.pof文件勾选Program/Configure点击Start。这样烧录完成后开发板重新上电也会自动加载配置。需要注意不是所有开发板的下载器都支持AS模式有的简易下载器只做了JTAG电路。如果你手头的板子只支持JTAG但又想上电自启可以查一下你的FPGA芯片是否支持内部配置flash比如MAX 10或者只能外接EPCS芯片。AS模式烧录前记得把下载器的AS排线跳线帽拨到AS一侧很多下载器的JTAG和AS是物理复用同一根排线的。5.3 烧录后不跑先查这四件事程序下载成功但板子上没反应这是新手最容易卡住的场景。根据我的经验按优先级查以下四件事第一时钟是否进来。用示波器或者万用表量FPGA的时钟引脚确认有正常的方波信号。很多设计的逻辑没有问题但板子的晶振没焊好或者没上电导致FPGA内部没有时钟翻转所有时序逻辑全部停摆。第二复位逻辑是否正常。如果设计里用了异步复位且复位按键默认按下那程序可能就是一直处于复位状态看起来像没运行。第三管脚分配是否真的生效。在Compilation Report - Fitter - Pin Out File里搜索你的LED信号名确认物理引脚号和你分配的完全一致。第四电平标准是否匹配。如果你的LED信号分配到了1.8V的BANK而LED灯电路是3.3V的那点亮条件就会比较诡异表现为灯微亮或者不亮。我遇到过一次特别迷惑的情况下载100%成功LED却全灭。找了一圈发现是Pin Planner里LED信号的名字大小写和原理图不一致导致管脚分配实际上失效Quartus把那个信号默认分配到了一个任意引脚上。所以烧录后异常先别怀疑代码先怀疑约束。6. 常见问题排查实录从驱动识别到下载失败6.1 电脑识别不到USB-Blaster现象是打开Programmer的Hardware Setup设备列表空白设备管理器里看到未知设备或带感叹号的Altera USB-Blaster。这个问题的概率很高主要是驱动签名和驱动路径两个原因。如果是新的Win10/Win11系统第一步就是进“恢复”-“高级启动”-“立即重新启动”选择“疑难解答”-“高级选项”-“启动设置”-“重启”然后按数字键7选择“禁用驱动程序强制签名”。然后在设备管理器里右键未知设备选择更新驱动程序手动指向Quartus安装目录下drivers\usb-blaster文件夹。安装成功后设备名称显示为“Altera USB-Blaster”。这里有个细节如果安装后依然显示感叹号右键驱动文件可以看错误代码。代码31通常是因为驱动版本不兼容可以试试手动选择过时版本的驱动代码10一般是USB口供电或接触不良换一个直连的USB口尽量别用前置面板或者USB Hub。我自己一直用的是电脑后置USB 2.0接口来连USB-Blaster兼容性最稳。6.2 下载时报Device Chain Error下载时出现“Unable to access JTAG chain”或“Device chain error”的报错通常不是软件问题而是JTAG链路上没有识别到目标FPGA。排查顺序是确认开发板电源已打开并且电源指示灯亮确认JTAG排线方向正确、接触良好确认Mode模式下JTAG链检测到的器件数量是否为1。如果用了多个JTAG设备串联比如FPGA和CPLD串在同一根链上Quartus会显示多个器件。而有的下载器需要手动指定JTAG链上的器件数量在Programmer界面点击Auto Detect可以自动识别。如果Auto Detect识别不到任何器件那基本可以判断是物理链路问题。还有一个隐蔽的点部分开发板的JTAG口和AS口是复用的跳线帽位置不对时JTAG链上就检测不到FPGA。这种板子在原理图里通常有“JTAG/AS Select”字的跳线说明动手前翻一翻板子旁边的丝印或者用户手册。6.3 SignalTap抓信号让内部节点露出水面当代码功能不符合预期时除了下载后看现象更常用的调试手段是使用Quartus自带的SignalTap II逻辑分析仪。它相当于把示波器的探针放进FPGA内部抓取想看的那几个信号。用法是新建一个.qst文件在Node List里点击“List”添加要观察的内部信号设置采样时钟通常是系统时钟设置采样深度然后保存。编译时会自动把SignalTap的调试逻辑加进去重新下载后点击运行触发SignalTap就会把波形显示出来。我第一次用SignalTap定位流水灯异常的时候发现就是复位信号一直处于低电平问题一目了然效率远高于反复猜测。不过SignalTap会占用额外的逻辑资源和存储块调试完记得禁用SignalTap节点再重新编译下载否则正式版的程序里也会带着调试逻辑资源浪费倒还好时序可能会被悄悄改变。这也是一个很实际的工程习惯。最后分享一个很实用的小习惯项目越做越多之后我最大的体会是Quartus II这套全链路流程真正难的从来不是软件操作而是对整个链路每个环节的“敬畏”。从环境安装、版本选择、绘图、管脚约束到编译下载每一步都藏着一堆“看着小、影响大”的细节。如果你正在学FPGA建议从最简单的LED实验开始逼着自己完整地走完至少三次全流程——第一次用原理图第二次改成Verilog第三次加上SignalTap调试三次下来你对“从绘图到下载”这件事的理解会有质的飞跃。另外每次做完一个工程把引脚约束、工程设置、遇到的问题整理成笔记日后再做新项目直接抄自己的作业比到处百度高效太多。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

RGB归一化全解析:从数值稳定到高效工程实现 2026/10/2 5:36:17

RGB归一化全解析:从数值稳定到高效工程实现

做图像处理和视觉算法的,几乎没有人能绕开RGB归一化这件事。我第一次认真琢磨它,不是因为读论文受启发,而是因为训练时loss从第一个epoch开始就一路NaN,排查到凌晨才发现输入张量还停在0到255的整数区间,几层卷积一叠加…

阅读更多 →
OpenShell深度指南:从安装到高级玩法,打造高效命令行环境 2026/10/2 5:36:10

OpenShell深度指南:从安装到高级玩法,打造高效命令行环境

如果你每天要在终端里敲几百条命令,大概率会有一个时刻让你觉得“这玩意儿太原始了”:同一个目录要cd半天,复杂命令的参数永远记不全,换一台机器就要重新教Shell“做人”。OpenShell就是冲着这些痛点来的——它是一款开源的Shell环…

阅读更多 →
智能电表与水表工程落地实操指南:选型、通信与故障根因 2026/10/2 5:36:04

智能电表与水表工程落地实操指南:选型、通信与故障根因

简介:本资源是一份面向能源管理从业者、智能电网初学者及高校相关专业师生的实用型技术课件,系统讲解智能电表与智能水表的核心原理、分类演进、关键功能及典型应用方案。内容覆盖双向计量、实时用电存储、供用双方数据共享等智能化特性,并深…

阅读更多 →
openrig开源模块化装备支架:从图纸到实战的完整复盘 2026/10/2 5:36:04

openrig开源模块化装备支架:从图纸到实战的完整复盘

我记得很清楚,第一次在社区看到 openrig 这个名字时,第一反应是:这不就是一套铝型材架子吗,有什么值得开源折腾的?但真等我自己把图纸拉下来、对着 BOM 表买材料、花一个周末装完之后,我发现自己错得挺离谱…

阅读更多 →
MCP协议实战:Agent集成OA/ERP从Demo到生产的避坑指南 2026/10/2 5:36:04

MCP协议实战:Agent集成OA/ERP从Demo到生产的避坑指南

Agent 项目从 Demo 走到生产环境,真正让人头疼的往往不是模型选型或 Prompt 调优,而是怎么把它跟企业里已经跑了十几年的 OA、ERP 系统接上。我最近刚交付完一个基于 MCP 协议的 Agent 集成项目,踩坑无数,也积累了一些实战经验。这…

阅读更多 →
AI资讯日报制作全流程:从信息源管理到自动化筛选的实操指南 2026/10/2 5:36:04

AI资讯日报制作全流程:从信息源管理到自动化筛选的实操指南

1. 一份AI日报的诞生:从信息洪流到结构化情报每天早上七点,我的手机就开始震。十几个AI相关的社群、二十多个行业资讯站、还有数不清的邮件订阅和社交平台推送,全都在往外吐新消息。如果只是随便刷刷,半小时就过去了,但…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉