Quick Start:30分钟跑通第一个LED闪烁工程
本指南面向零基础学生,目标是在30分钟内完成第一个FPGA工程——让开发板上的LED以1Hz频率闪烁。这是所有FPGA学习的“Hello World”,也是后续竞赛项目的基础。
- 步骤1:安装EDA工具。下载并安装Vivado(推荐2019.1或更新版本)或Quartus Prime Lite(免费版)。安装时选择“Vivado HL WebPACK”或“Quartus Prime Lite Edition”,确保包含仿真器(Vivado Simulator或ModelSim)。
- 步骤2:创建工程。打开Vivado,点击“Create Project”,输入工程名“led_blink”,选择RTL Project,勾选“Do not specify sources at this time”。选择目标器件(例如Xilinx Artix-7 XC7A35T或Intel Cyclone IV EP4CE6)。
- 步骤3:编写顶层模块。点击“Add Sources”,新建Verilog文件“top.v”。输入以下代码:
module top(input clk, input rst_n, output reg led); reg [23:0] cnt; always @(posedge clk or negedge rst_n) begin if (!rst_n) cnt <= 0; else cnt <= cnt + 1; end assign led = cnt[23]; endmodule。该代码利用计数器最高位产生约1Hz闪烁(假设时钟为50MHz)。 - 步骤4:添加约束文件。点击“Add Sources”,选择“Constraints”,新建XDC文件“top.xdc”。写入:
set_property PACKAGE_PIN R2 [get_ports clk](根据板卡修改引脚)和set_property IOSTANDARD LVCMOS33 [get_ports clk]。同理添加复位和LED引脚约束。 - 步骤5:综合与实现。点击“Run Synthesis”,等待完成。若无错误,点击“Run Implementation”。观察时序报告,确保无建立时间违例(Setup Violation)。
- 步骤6:生成比特流并下载。点击“Generate Bitstream”。成功后,打开“Hardware Manager”,连接开发板,选择比特文件下载。观察LED是否以约1Hz闪烁。
- 验收点:LED以肉眼可见频率闪烁(约1Hz)。若LED常亮或不亮,检查约束引脚是否正确、时钟频率是否匹配。
前置条件与环境
| 项目/推荐值 | 说明 | 替代方案 |
|---|---|---|
| 器件/板卡 | Xilinx Artix-7(如Nexys A7)或Intel Cyclone IV(如DE0-Nano) | Zynq-7000(带ARM核)、Lattice iCE40(低功耗) |
| EDA版本 | Vivado 2019.1 或 Quartus Prime 18.1 Lite | Vivado 2020.1+(需注意license)、ISE(旧器件) |
| 仿真器 | Vivado Simulator(内置)或 ModelSim | Questa Sim、Verilator(开源,仅支持Verilog) |
| 时钟/复位 | 50MHz 有源晶振,低电平复位 | 100MHz(需调整分频)、高电平复位(代码中取反) |
| 接口依赖 | USB-JTAG 下载线(如Digilent HS2) | USB-Blaster(Intel)、OpenOCD(开源) |
| 约束文件 | XDC(Vivado)或 SDC(Quartus) | UCF(旧ISE)、Tcl脚本动态生成 |
| 操作系统 | Windows 10/11 64-bit | Ubuntu 18.04+(Vivado支持Linux) |
目标与验收标准
本学习路线旨在让学生从零基础达到竞赛获奖水平,具体验收标准如下:
- 功能点:完成至少3个独立项目(LED闪烁、按键消抖、UART通信),并能在开发板上演示。
- 性能指标:设计最高运行频率(Fmax)不低于50MHz,无时序违例;资源利用率(LUT/FF)不超过芯片容量的70%。
- 关键波形:仿真波形显示计数器、UART收发时序正确,无毛刺或亚稳态。
- 日志验收:综合与实现日志无Critical Warning,时序报告建立时间裕度≥0.1ns。
- 竞赛准备:能独立完成一个中等复杂度设计(如数字时钟、简易CPU),并撰写设计文档。
实施步骤
阶段一:工程结构与代码规范
良好的工程结构是竞赛项目的基础。推荐采用以下目录组织:
project/ ├── rtl/ # 所有RTL源码 ├── sim/ # 仿真测试文件 ├── constraints/ # XDC/SDC约束 ├── ip/ # IP核(如PLL、FIFO) └── docs/ # 设计文档代码规范:使用有意义的名词命名模块(如uart_tx),信号名采用小写加下划线(如data_in)。每个模块添加文件头注释,包含作者、日期、功能描述。
常见坑与排查:



