2、FPGA选型与开发环境搭建:主流FPGA厂商对比、Xilinx Vivado安装与配置、第一个LED闪烁工程
好,咱们正式开始动手了。这一章,我带你走一遍从选芯片到点亮第一个LED的完整流程。说白了,就是先搞清楚市面上这些FPGA厂商谁家强,然后装好工具,最后让板子上的灯闪起来。
2.1 主流FPGA厂商对比:选对平台少走弯路
做高速数据采集,FPGA选型是第一步。选错了,后面全是坑。我个人习惯把厂商分成三个梯队来讲。
| 厂商 | 代表系列 | 核心优势 | 适合场景 |
|---|---|---|---|
| Xilinx(AMD) | Artix-7, Kintex-7, Virtex-7, Zynq, Versal | 生态成熟,Vivado工具链强大,高速收发器性能好 | 高速数据采集、通信、AI加速 |
| Intel(Altera) | Cyclone V, Arria 10, Stratix 10 | 功耗控制优秀,Quartus工具稳定,硬核ARM集成方便 | 工业控制、嵌入式、低功耗场景 |
| Lattice | ECP5, CrossLink, iCE40 | 超低功耗,小封装,瞬时启动 | 便携设备、接口桥接、传感器处理 |
你可能会问,为什么我推荐Xilinx?嗯,这里有个原因。我在做第一套高速ADC采集板时,用的是Altera的Cyclone IV。当时项目赶得急,结果发现它的高速串行收发器(SERDES)速率上限只有3.125Gbps,根本跑不满ADC的10Gbps JESD204B接口。后来换成Xilinx的Kintex-7,一次搞定。说白了,做高速数据采集,Xilinx的GTX/GTH收发器是行业标配,生态也最全。
2.2 Xilinx Vivado安装与配置:别让工具卡住你
工具链选好了,接下来就是装Vivado。我记得第一次装Vivado时,下载了整整一个晚上,结果安装到一半报错说磁盘空间不够。你想想看,一个IDE装完要占用30GB以上,这还不算后续的IP核库。所以,我建议你提前准备一块至少100GB的空闲SSD。
2.2.1 下载与安装步骤
- 去官网注册账号:Xilinx官网(www.xilinx.com)注册一个AMD账号,免费。
- 选择版本:目前主流是Vivado 2023.1或2024.1。我个人习惯用LTS版本,稳定。
- 下载安装包:选择“Vivado HL WebPACK”或“Vivado HL Design Edition”。WebPACK免费,支持Artix-7和部分Kintex-7,够用了。
- 安装过程:双击运行,一路Next。注意在“Product to Install”这一步,勾选“Vivado”和“Vitis”(如果你要用Zynq)。
- 添加License:WebPACK版本不需要License,直接能用。如果你用Design Edition,需要申请一个免费的Node-Locked License。
2.2.2 环境配置要点
装完Vivado,别急着打开。先做两件事:
- 设置环境变量:把Vivado的bin目录加到系统PATH里。这样你可以在命令行里直接敲
vivado启动。 - 安装驱动:如果你用的是Digilent或Xilinx官方的下载器(比如JTAG-HS3),需要安装对应的驱动。Vivado安装包自带驱动,在
Vivado/2023.1/data/xicom/cable_drivers目录下。
嗯,这里要注意:如果你用的是Linux系统,记得给USB设备添加udev规则,否则下载器识别不到。我当年在Ubuntu上折腾了一下午,才发现是权限问题。
2.3 第一个LED闪烁工程:从零到一
好了,工具装好了,咱们来写第一个工程。让板子上的LED以1Hz的频率闪烁。这就像学编程时的“Hello World”,但FPGA的Hello World是点灯。
2.3.1 创建工程
- 打开Vivado,点击Create Project。
- 输入工程名:
led_blink,选择保存路径。 - 选择RTL Project,勾选Do not specify sources at this time。
- 选择芯片型号。我用的是xc7a35tcsg324-1(Artix-7 35T)。如果你用其他板子,按实际型号选。
- 点击Finish,工程创建完成。
2.3.2 编写Verilog代码
在工程中新建一个设计源文件,命名为led_blink.v。代码如下:
module led_blink(
input wire clk, // 板载时钟,50MHz
input wire rst_n, // 复位,低有效
output reg led // LED输出
);
// 计数器最大值:50MHz / 2 = 25MHz,翻转一次 = 0.5秒
// 所以计数到 25_000_000 - 1 时翻转
parameter CNT_MAX = 25_000_000 - 1;
reg [24:0] cnt;
always @(posedge clk or negedge rst_n) begin
if (!rst_n) begin
cnt <= 0;
led <= 0;
end else if (cnt == CNT_MAX) begin
cnt <= 0;
led <= ~led; // 翻转LED
end else begin
cnt <= cnt + 1;
end
end
endmodule
这段代码的逻辑很简单:用计数器分频,每计数到2500万次(对应0.5秒),就翻转一次LED。这样LED就以1Hz的频率闪烁了。
2.3.3 添加约束文件
代码写好了,但FPGA不知道哪个引脚接LED,哪个引脚接时钟。所以需要写一个XDC约束文件。新建一个约束文件led_blink.xdc:
# 时钟引脚
set_property PACKAGE_PIN E3 [get_ports clk]
set_property IOSTANDARD LVCMOS33 [get_ports clk]
# 复位引脚
set_property PACKAGE_PIN C12 [get_ports rst_n]
set_property IOSTANDARD LVCMOS33 [get_ports rst_n]
# LED引脚
set_property PACKAGE_PIN H5 [get_ports led]
set_property IOSTANDARD LVCMOS33 [get_ports led]
引脚编号取决于你的板子。我用的是Artix-7 35T开发板,LED接在H5上。如果你用其他板子,查一下原理图,把引脚号改过来就行。
2.3.4 综合、实现与下载
- 点击Run Synthesis,等待综合完成。
- 综合完成后,点击Run Implementation。
- 实现完成后,点击Generate Bitstream,生成比特流文件。
- 连接开发板,打开Open Hardware Manager,点击Auto Connect。
- 选择生成的
.bit文件,点击Program Device。
如果一切顺利,你会看到板子上的LED开始以1Hz的频率闪烁。那一刻,说实话,挺有成就感的。
2.4 本章小结
这一章,我们从FPGA选型讲到了第一个工程跑通。说白了,选Xilinx做高速数据采集是稳妥的选择,Vivado工具虽然大,但用熟了很顺手。那个LED闪烁工程虽然简单,但它验证了整个开发流程:代码编写、约束添加、综合实现、下载调试。后面所有复杂的项目,都是在这个基础上叠加的。
下一章,我们会深入时钟和复位设计。嗯,那是FPGA设计的基石,也是很多新手容易翻车的地方。到时候我会分享一些我踩过的坑,保证让你少走弯路。