1. 工程简介
如需要代码联系博主。
本工程基于 QC-FPGA-C1 FPGA 开发板完成多外设控制系统设计,采用 VHDL 编写,顶层实体为 fpga_rs232_top。系统包含 UART 地址帧通信、LED 显示、蜂鸣器、数码管、电机、8×8 点阵以及 LCD1602 本地菜单控制等功能。
开发流程中,ModelSim 主要用于 RTL 功能仿真,Quartus II 主要用于工程综合、引脚分配、布局布线、时序分析以及生成 FPGA 下载文件。上一篇博客已经介绍了ModelSim 的使用,本文记录 Quartus II 中从打开工程到准备烧写开发板的基本流程。
2. 开发板与工程环境
本工程使用 QC-FPGA-C1 开发板,板载 Cyclone 系列 FPGA、48 MHz 晶振、USB-Blaster 下载接口、串口接口、LED、数码管、蜂鸣器、8×8 点阵、LCD1602 接口和矩阵按键等资源。
工程配置如下:
| 项目 | 内容 |
|---|---|
| FPGA 系列 | Cyclone |
| 目标器件 | EP1C3T144C8 |
| 顶层实体 | fpga_rs232_top |
| 开发软件 | Quartus II 13.0.1 |
| 设计语言 | VHDL |
| 下载文件 | .sof |
| 固化文件 | .pof |


QC-FPGA-C1 开发板资源示意
3. Quartus II 的作用
FPGA 工程通常包含以下流程:
text
编写 VHDL 代码
↓
ModelSim 功能仿真
↓
Quartus II 综合与布局布线
↓
引脚分配和时序分析
↓
生成 SOF/POF 文件
↓
下载到 FPGA 开发板
ModelSim 关注代码逻辑是否正确,例如 UART 是否正确接收数据帧、命令是否能控制对应模块。Quartus II 则负责把 HDL 代码转换为 FPGA 内部真实的逻辑资源,并生成可以下载到芯片中的配置文件。
4. 打开 Quartus 工程
Quartus 工程文件一般以 .qpf 结尾。启动 Quartus II 后,通过以下路径打开工程:
text
File → Open Project
选择工程目录下的 .qpf 文件即可。工程打开后,左侧 Project Navigator 会显示当前工程结构,包括源文件、顶层模块和编译相关信息。

Quartus 工程打开界面
常见工程文件说明:
| 文件类型 | 作用 |
|---|---|
.qpf |
Quartus 工程文件 |
.qsf |
工程设置、器件选择、引脚分配 |
.vhd |
VHDL 源代码 |
.sdc |
时序约束文件 |
.sof |
JTAG 临时下载文件 |
.pof |
配置芯片固化文件 |
5. 检查器件型号和顶层实体
工程打开后,需要先确认器件型号和顶层实体。器件型号错误会导致引脚、资源和下载文件不匹配。
检查路径:

text
Assignments → Device
本工程目标器件为:
text
EP1C3T144C8
顶层实体为:
text
fpga_rs232_top
工程设置中对应内容如下:
tcl
set_global_assignment -name FAMILY Cyclone
set_global_assignment -name DEVICE EP1C3T144C8
set_global_assignment -name TOP_LEVEL_ENTITY fpga_rs232_top

Quartus 器件型号设置
顶层实体必须是整个系统的入口模块。如果误把某个子模块设为顶层,编译虽然可能继续进行,但最终端口和引脚会与实际工程不一致。
6. 检查源文件列表
Quartus 只会编译已经添加到工程中的源文件。即使文件存在于文件夹中,如果没有加入工程,也不会参与综合。
检查路径:
text
Project → Add/Remove Files in Project
本工程主要源文件包括:
text
uart_rx_even.vhd
uart_tx_even.vhd
uart_frame_protocol.vhd
command_controller.vhd
key_matrix_2x2.vhd
menu_controller.vhd
lcd1602_menu.vhd
led_patterns.vhd
buzzer_ctrl.vhd
seg7_scan.vhd
motor_ctrl.vhd
dot_matrix_ctrl.vhd
fpga_rs232_top.vhd

Quartus 工程源文件列表
如果编译时出现实体未定义、端口不存在或模块找不到等错误,需要优先检查源文件是否添加完整。
7. 引脚分配
FPGA 顶层端口需要和开发板原理图中的实际引脚对应。引脚分配可以在 .qsf 文件中查看,也可以使用 Pin Planner 图形界面查看。
打开路径:
text
Assignments → Pin Planner
部分引脚分配示例:
tcl
set_location_assignment PIN_16 -to clk
set_location_assignment PIN_17 -to rst_n
set_location_assignment PIN_92 -to uart_rxd
set_location_assignment PIN_59 -to uart_txd
set_location_assignment PIN_26 -to LedOut[0]
set_location_assignment PIN_11 -to LedOut[1]
set_location_assignment PIN_10 -to LedOut[2]
set_location_assignment PIN_36 -to Bell
set_location_assignment PIN_97 -to lcd_e
set_location_assignment PIN_99 -to lcd_rw
set_location_assignment PIN_100 -to lcd_rs

Pin Planner 引脚分配界面
引脚分配需要与开发板原理图保持一致。若下载后外设没有反应,首先应检查时钟、复位、串口、LED、LCD 等端口是否绑定到正确引脚。
8. 编译工程
确认源文件、器件型号、顶层实体和引脚分配后,可以开始编译。
操作路径:
text
1.Processing → Start Compilation
2.或者直接点击三角箭头
Quartus 编译主要包括以下步骤:
- Analysis & Synthesis:分析 HDL 代码并综合逻辑;
- Fitter:将逻辑放置到 FPGA 具体资源中;
- Assembler:生成下载文件;
- TimeQuest Timing Analyzer:进行时序分析;
- EDA Netlist Writer:生成仿真或外部工具相关文件。

Quartus 启动工程编译
编译完成后,需要查看 Flow Summary。重点关注 Flow Status 是否为 Successful,以及是否存在 Error。
本工程编译结果示例:
text
Flow Status Successful
Top-level Entity Name fpga_rs232_top
Family Cyclone
Device EP1C3T144C8
Total logic elements 1,167 / 2,910
Total pins 53 / 104
逻辑单元使用率约为:
1167 2910 × 100 % ≈ 40 % \frac{1167}{2910} \times 100\% \approx 40\% 29101167×100%≈40%
引脚使用率约为:
53 104 × 100 % ≈ 51 % \frac{53}{104} \times 100\% \approx 51\% 10453×100%≈51%
说明工程可以放入目标 FPGA,资源占用处于合理范围。

Quartus 编译成功结果
9. 生成下载文件
编译成功后,Quartus 会在 output_files 目录下生成下载文件。常见文件包括:
text
RS232_FPGA_Controller_V4_0.sof
RS232_FPGA_Controller_V4_0.pof
.sof 和 .pof 的区别如下:
| 文件 | 用途 | 掉电后是否保留 |
|---|---|---|
.sof |
通过 JTAG 下载到 FPGA | 不保留 |
.pof |
写入配置芯片 | 保留 |
调试阶段通常使用 .sof 文件,下载速度快,便于反复修改和验证。程序稳定后,如果需要上电自动运行,再考虑使用 .pof 固化到配置芯片。

Quartus 输出文件目录
10. 打开 Programmer
编译成功并生成 .sof 文件后,可以打开 Programmer 准备下载。
操作路径:
text
Tools → Programmer
Programmer 中需要确认以下内容:
- Hardware Setup:选择 USB-Blaster;
- Mode:选择 JTAG;
- File:添加
.sof文件; - Device:确认器件型号;
- Program/Configure:勾选下载选项;
- Start:开始下载。


Quartus Programmer 主界面
如果没有连接开发板,Hardware Setup 中可能显示 No Hardware。这种情况说明 Quartus 当前没有检测到下载器,需要连接 USB-Blaster 并给开发板供电后再操作。
11. 选择 USB-Blaster
连接开发板后,在 Programmer 中点击:
text
Hardware Setup
在 Currently selected hardware 中选择:
text
USB-Blaster [USB-0]
如果列表为空,常见原因包括:
- USB-Blaster 未连接;
- 开发板未供电;
- USB-Blaster 驱动未安装;
- USB 线接触不良;
- JTAG 接口方向接反;
- Quartus 未正确识别下载器。
下载器识别正常后,Programmer 才能通过 JTAG 与 FPGA 通信。
12. 添加 SOF 并下载
如果 Programmer 没有自动加载文件,可以手动添加:
text
Add File → 选择 output_files 目录下的 .sof 文件
添加后勾选:
text
Program/Configure
然后点击:
text
Start
下载完成后,Progress 会显示 100%。此时 .sof 文件已经通过 JTAG 写入 FPGA,开发板开始运行当前设计。

Programmer 添加 SOF 文件
完整下载流程如下:
text
开发板供电
↓
连接 USB-Blaster
↓
打开 Programmer
↓
选择 USB-Blaster
↓
Mode 选择 JTAG
↓
添加 SOF 文件
↓
勾选 Program/Configure
↓
点击 Start
13. 常见问题
13.1 Hardware Setup 显示 No Hardware
说明 Quartus 没有检测到下载器。需要检查 USB-Blaster 是否连接、开发板是否供电、驱动是否安装,以及 JTAG 接口是否连接正确。
13.2 点击 Start 后显示 Failed
一般优先检查硬件链路,而不是直接怀疑代码。常见原因包括下载器未选择、开发板未上电、SOF 文件与器件不匹配、未勾选 Program/Configure、JTAG 接触不良等。
13.3 编译成功但开发板无现象
需要检查以下内容:
- 时钟引脚是否正确;
- 复位信号是否释放;
- 引脚分配是否和原理图一致;
- 外设是否需要跳线;
- 串口波特率和校验位是否正确;
- LED、数码管、LCD 是否存在低电平有效的情况。
编译成功只说明工程能够映射到 FPGA,并不代表外设连接和控制电平一定完全正确。
14. 下载前检查清单
下载前可以按以下顺序检查:
text
1. 工程 qpf 能正常打开
2. 顶层实体为 fpga_rs232_top
3. 目标器件为 EP1C3T144C8
4. VHDL 源文件已全部加入工程
5. 引脚分配已完成
6. 工程编译结果为 Successful
7. output_files 中存在 sof 文件
8. Programmer 模式为 JTAG
9. Hardware Setup 选择 USB-Blaster
10. 勾选 Program/Configure 后点击 Start
15. 总结
Quartus II 负责将 VHDL 工程综合并映射到 FPGA 硬件中,是 FPGA 开发流程中连接代码和实物开发板的关键工具。工程在 ModelSim 中完成逻辑仿真后,需要在 Quartus II 中完成器件选择、源文件管理、引脚分配、综合编译、时序分析和下载文件生成。
调试阶段一般使用 .sof 文件通过 JTAG 下载到 FPGA,适合反复修改和验证;需要掉电后自动运行时,再使用 .pof 文件进行固化。通过 Quartus 的编译报告、资源占用信息和 Programmer 下载流程,可以较完整地确认工程是否具备上板运行条件。