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收发器是行业标配,生态也最全。

我的建议: 如果你是初学者,或者项目预算有限,选Xilinx Artix-7系列。性价比高,资料多,踩坑了也容易找到答案。如果追求极致性能,直接上Kintex-7或Virtex-7。

2.2 Xilinx Vivado安装与配置:别让工具卡住你

工具链选好了,接下来就是装Vivado。我记得第一次装Vivado时,下载了整整一个晚上,结果安装到一半报错说磁盘空间不够。你想想看,一个IDE装完要占用30GB以上,这还不算后续的IP核库。所以,我建议你提前准备一块至少100GB的空闲SSD。

2.2.1 下载与安装步骤

  1. 去官网注册账号:Xilinx官网(www.xilinx.com)注册一个AMD账号,免费。
  2. 选择版本:目前主流是Vivado 2023.1或2024.1。我个人习惯用LTS版本,稳定。
  3. 下载安装包:选择“Vivado HL WebPACK”或“Vivado HL Design Edition”。WebPACK免费,支持Artix-7和部分Kintex-7,够用了。
  4. 安装过程:双击运行,一路Next。注意在“Product to Install”这一步,勾选“Vivado”和“Vitis”(如果你要用Zynq)。
  5. 添加License:WebPACK版本不需要License,直接能用。如果你用Design Edition,需要申请一个免费的Node-Locked License。
避坑指南: 我曾经在Windows上安装Vivado时,因为杀毒软件拦截了后台进程,导致安装到99%卡死。解决办法:安装前关闭所有杀毒软件,包括Windows Defender的实时防护。

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 创建工程

  1. 打开Vivado,点击Create Project
  2. 输入工程名:led_blink,选择保存路径。
  3. 选择RTL Project,勾选Do not specify sources at this time
  4. 选择芯片型号。我用的是xc7a35tcsg324-1(Artix-7 35T)。如果你用其他板子,按实际型号选。
  5. 点击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的频率闪烁了。

关键点: 注意时钟频率是50MHz,所以计数到25_000_000时正好是0.5秒。如果你板子上的时钟频率不同,记得调整CNT_MAX的值。

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 综合、实现与下载

  1. 点击Run Synthesis,等待综合完成。
  2. 综合完成后,点击Run Implementation
  3. 实现完成后,点击Generate Bitstream,生成比特流文件。
  4. 连接开发板,打开Open Hardware Manager,点击Auto Connect
  5. 选择生成的.bit文件,点击Program Device

如果一切顺利,你会看到板子上的LED开始以1Hz的频率闪烁。那一刻,说实话,挺有成就感的。

我的经验: 第一次下载时,如果提示“No cable connected”,别慌。检查一下下载器驱动是否装好,或者换个USB口。我遇到过USB 3.0口不兼容的情况,换成USB 2.0就好了。

2.4 本章小结

这一章,我们从FPGA选型讲到了第一个工程跑通。说白了,选Xilinx做高速数据采集是稳妥的选择,Vivado工具虽然大,但用熟了很顺手。那个LED闪烁工程虽然简单,但它验证了整个开发流程:代码编写、约束添加、综合实现、下载调试。后面所有复杂的项目,都是在这个基础上叠加的。

下一章,我们会深入时钟和复位设计。嗯,那是FPGA设计的基石,也是很多新手容易翻车的地方。到时候我会分享一些我踩过的坑,保证让你少走弯路。