Quick Start:30分钟跑通一个最小原型系统
本指南面向FPGA竞赛参赛者,帮助你在30分钟内完成一个最小原型系统的搭建与验证。你将掌握从环境准备到代码编写、再到上板测试的完整流程,为后续复杂设计打下基础。
前置条件
- 一块竞赛常用的FPGA开发板,如Xilinx Artix-7或Altera Cyclone V系列。
- 已安装对应EDA工具:Vivado(Xilinx板)或Quartus Prime(Intel/Altera板)。
- 一根Micro USB或USB Type-C下载线,用于连接开发板与PC。
- 基本的Verilog/VHDL语法知识,了解模块、端口、寄存器等概念。
目标与验收标准
- 目标:在开发板上实现一个LED闪烁电路,通过板载时钟驱动,复位后LED以约1Hz频率闪烁。
- 验收标准:下载程序后,板载4个LED同时以肉眼可见的节奏(约1秒一次)亮灭。
实施步骤
步骤1:准备硬件与软件环境
确保开发板通过下载线连接至PC,并上电。打开Vivado或Quartus Prime,创建一个新工程:
- Vivado:选择“Create Project”,设置工程名称与路径,选择目标器件(如xc7a35ticsg324-1L),其余选项保持默认。
- Quartus Prime:选择“New Project Wizard”,指定工程目录与器件型号(如5CSEMA5F31C6),完成创建。
步骤2:编写顶层模块
在工程中新建一个Verilog文件,命名为top.v。定义时钟输入clk、复位输入rst_n(低电平有效)、以及4位LED输出led。代码如下:
module top (
input clk,
input rst_n,
output reg [3:0] led
);
reg [23:0] counter;
always @(posedge clk or negedge rst_n) begin
if (!rst_n)
counter <= 24'd0;
else
counter <= counter + 1'b1;
end
always @(posedge clk or negedge rst_n) begin
if (!rst_n)
led <= 4'b0000;
else if (counter == 24'hFFFFFF)
led <= ~led;
else
led <= led;
end
endmodule代码说明:counter是一个24位计数器,在每个时钟上升沿递增。当计数器溢出(达到最大值0xFFFFFF)时,翻转LED输出。假设板载时钟频率为50 MHz,则溢出周期约为50 MHz / 2^24 ≈ 2.98 Hz,LED翻转频率约为1.49 Hz,肉眼可见。
步骤3:添加约束文件
根据开发板的原理图,为clk、rst_n和led分配物理引脚。以Nexys A7(Artix-7)为例:
- 时钟:
set_property PACKAGE_PIN E3 [get_ports clk],并设置时钟周期:create_clock -period 20.000 [get_ports clk]。 - 复位:
set_property PACKAGE_PIN C12 [get_ports rst_n](接板载按钮,按下为低电平)。 - LED:
set_property PACKAGE_PIN H5 [get_ports {led[0]}],依次类推到led[3]。
将上述约束保存为top.xdc文件并添加到工程。
步骤4:综合、实现与生成比特流
- 点击“Run Synthesis”进行综合,检查无语法错误。
- 综合完成后,点击“Run Implementation”执行布局布线。
- 最后点击“Generate Bitstream”生成比特流文件(.bit)。
整个过程在Vivado中通常需要5-10分钟(视工程复杂度与PC性能而定)。
步骤5:下载与验证
- 打开“Hardware Manager”,连接开发板。
- 选择生成的
top.bit文件,点击“Program”下载。 - 观察板载LED是否以约1Hz频率闪烁。若闪烁,则验证通过。
验证结果
成功下载后,4个LED应同时亮灭,周期约0.67秒(1.49 Hz)。若LED常亮或常灭,检查复位按钮是否被按下(低电平有效),或约束文件中的引脚分配是否正确。
排障指南
- 综合报错:检查代码语法,特别是端口声明与模块实例化。
- 实现失败:查看时序报告,确认时钟约束是否正确;若时序违规,可降低时钟频率或优化代码。
- 下载后无反应:确认开发板供电正常,下载线连接可靠,比特流文件已正确加载。
- LED闪烁频率不对:调整计数器位宽或时钟分频系数。
扩展:从最小系统到竞赛原型
在最小系统基础上,可快速添加以下模块以应对竞赛需求:
- UART通信:添加串口收发模块,用于与PC交互数据或调试。
- 按键输入:复用复位按钮或新增按键,实现状态切换。
- VGA/HDMI输出:连接显示接口,实现图像或字符显示。
- 外部存储器接口:添加SDRAM或Flash控制器,扩展存储能力。
建议在竞赛前搭建好这些基础IP的测试工程,形成可复用的模块库,大幅缩短原型开发周期。
参考
- Xilinx Vivado Design Suite User Guide (UG910)
- Intel Quartus Prime Pro Edition Handbook
- Nexys A7 Reference Manual
附录:常见竞赛开发板引脚速查
| 开发板型号 | 时钟引脚 | 复位引脚 | LED引脚示例 |
|---|---|---|---|
| Nexys A7-50T | E3 | C12 | H5, J5, T9, T10 |
| DE10-Lite | PIN_P11 | PIN_M9 | PIN_B10, PIN_A10, PIN_D9, PIN_C9 |
| Arty A7-35T | E3 | D2 | H5, J5, T9, T10 |



