2. FPGA开发环境搭建:Vivado安装与配置,创建第一个FPGA工程,LED闪烁实验

说实话,很多初学者一上来就急着写代码,结果卡在环境搭建上半天出不来。我见过太多人——装个Vivado装了两天,最后发现是硬盘空间不够。嗯,咱们先把地基打牢。

这一章,我带你走一遍完整的流程:从Vivado安装、配置,到创建第一个工程,再到让LED闪起来。你想想看,当板子上的小灯真的按照你的意愿一亮一灭时,那种感觉——啧,比打游戏通关还爽。

本章核心目标: 完成Vivado开发环境搭建,创建第一个FPGA工程,实现LED闪烁控制。

2.1 Vivado安装与配置

Vivado是Xilinx(现在叫AMD)家的主力工具。我个人习惯用Vivado ML Standard版,功能全,对大部分开发板都支持。安装前,有几个硬性条件你得先确认:

  • 硬盘空间: 至少50GB空闲。我建议你留100GB以上。为什么?因为Vivado安装包本身就20多GB,解压安装后还会生成一堆缓存文件。
  • 内存: 8GB起步,16GB更稳。我在项目里试过8GB跑中等规模的工程,编译时风扇呼呼转,差点以为电脑要起飞。
  • 操作系统: Windows 10/11 64位或Ubuntu 18.04以上。Mac用户?嗯,装个虚拟机吧。

安装步骤其实不复杂,但有几个坑我得提前告诉你:

  1. 下载安装包: 去AMD官网注册账号,下载Vivado ML Standard版。注意选对版本——我建议用2022.2或2023.1,这两个版本比较稳定。
  2. 安装过程: 双击安装程序,一路Next。到了选择产品时,勾选 Vivado ML Standard。设备支持里,根据你的板子选对应的系列。比如你用Artix-7,就勾选7 Series。
  3. 许可证配置: 安装完后,打开Vivado,它会提示你加载许可证。如果你用的是免费版,去官网申请一个免费的Node-Locked许可证就行。我曾经因为没加载许可证,折腾了半天才发现是这个问题——嗯,别学我。

小技巧: 安装路径不要有中文和空格。我习惯放在 C:\Xilinx\Vivado 或 D:\Xilinx\Vivado。另外,安装时关掉杀毒软件,不然可能会拦截一些文件。

2.2 创建第一个FPGA工程

环境搭好了,咱们来建个工程。我以Xilinx Artix-7系列开发板为例(比如Nexys A7或Basys 3),流程是一样的。

打开Vivado,你会看到启动界面。点击 Create Project,然后跟着向导走:

  • Project Name: 给工程起个名字,比如 led_blink。注意,名字里不要有空格。
  • Project Location: 选个你记得住的位置。我一般放在 D:\FPGA_Projects\ 下。
  • Project Type: 选 RTL Project。别选错了,不然后面没法添加代码文件。
  • Add Sources: 这里先跳过,我们后面手动添加。
  • Add Constraints: 同样跳过,后面再添加约束文件。
  • Default Part: 这里选你的开发板型号。比如Nexys A7-100T就选 xc7a100tcsg324-1。如果你不确定,去查一下板子的芯片型号。

点击Finish,工程就创建好了。你会看到Vivado的界面——左边是Flow Navigator(流程导航),中间是工作区,下面是日志窗口。别被这么多按钮吓到,咱们只用到其中一小部分。

注意: 第一次打开工程时,Vivado可能会自动下载一些库文件。耐心等它完成,别中途关掉。

2.3 LED闪烁实验:从代码到上板

好了,重头戏来了。咱们写一个最简单的Verilog代码,让板子上的LED以1秒为周期闪烁。

首先,在工程里添加一个设计源文件。右键点击 Design Sources → Add Sources → Add or create design sources → 创建一个新文件,命名为 led_blink.v。

然后,把下面的代码敲进去:

module led_blink(
    input   wire        clk,        // 系统时钟,通常为100MHz
    input   wire        rst_n,      // 复位信号,低电平有效
    output  reg         led         // LED输出
);

// 参数定义:100MHz时钟,计数到50_000_000为0.5秒
parameter   CNT_MAX = 50_000_000;

reg [25:0]  cnt;                    // 计数器

// 计数器逻辑
always @(posedge clk or negedge rst_n) begin
    if (!rst_n)
        cnt <= 26'd0;
    else if (cnt == CNT_MAX - 1)
        cnt <= 26'd0;
    else
        cnt <= cnt + 1'b1;
end

// LED翻转逻辑
always @(posedge clk or negedge rst_n) begin
    if (!rst_n)
        led <= 1'b0;
    else if (cnt == CNT_MAX - 1)
        led <= ~led;
    else
        led <= led;
end

endmodule

代码写完了,但还没完——你得告诉Vivado,哪个引脚对应哪个信号。这就需要约束文件了。

添加约束文件:右键 Constraints → Add Sources → Add or create constraints → 创建 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 H17 [get_ports led]
set_property IOSTANDARD LVCMOS33 [get_ports led]

注意:上面的引脚编号是我随便写的,你得根据自己板子的原理图来改。比如Nexys A7的时钟引脚是E3,但Basys 3可能是别的。查一下板子的文档,别搞错了。

警告: 引脚约束写错了,轻则LED不亮,重则可能烧坏引脚。我曾经在项目里把3.3V的引脚约束成了1.8V,结果那个bank上的所有IO都罢工了。嗯,从那以后我每次写约束都反复核对原理图。

接下来,生成比特流文件。在Flow Navigator里点击 Generate Bitstream。Vivado会依次执行综合(Synthesis)、实现(Implementation)和生成比特流。第一次跑可能会慢一些,去喝杯咖啡吧。

如果一切顺利,你会看到 Bitstream Generation Complete 的提示。如果有错误,双击错误信息,Vivado会帮你定位到问题所在。常见的错误有:语法错误、引脚约束不对、时钟频率不匹配等。

2.4 上板验证:让LED亮起来

比特流生成好了,接下来就是最激动人心的时刻——下载到板子上。

  1. 用USB线连接开发板和电脑。确保板子供电正常(通常会有电源指示灯亮起)。
  2. 在Vivado中点击 Open Hardware Manager → Auto Connect。Vivado会自动识别你的开发板。
  3. 识别成功后,点击 Program Device,选择刚才生成的 led_blink.bit 文件。
  4. 点击 Program,等待进度条走完。

如果一切正常,你会看到板子上的LED开始以大约1秒的周期闪烁。如果没反应,别慌,检查以下几点:

  • 板子供电了吗?电源指示灯亮了吗?
  • USB线是数据线还是充电线?有些线只能充电不能传数据。
  • 引脚约束写对了吗?时钟引脚和LED引脚是否匹配?
  • 复位引脚是否拉高?如果rst_n一直为低,LED永远不会亮。

调试技巧: 如果LED不闪,可以先把计数器改小,比如改成 CNT_MAX = 50,这样LED会以极快的速度闪烁(肉眼可能看到常亮或微暗)。如果这时候LED有变化,说明代码和硬件连接都没问题,只是计数器值太大了。再慢慢调大,找到合适的闪烁频率。

2.5 本章知识体系

为了让你更直观地理解整个流程,我画了一张图。它展示了从环境搭建到上板验证的完整链路:

FPGA开发流程:从环境搭建到LED闪烁 环境搭建 Vivado安装与配置 许可证激活 创建工程 选择芯片型号 添加源文件 编写代码 Verilog RTL设计 约束文件(XDC) 综合与实现 Synthesis Implementation 生成比特流 Bitstream 生成.bit文件 下载验证 Open Hardware Manager Program Device 调试与迭代 核心工具:Vivado ML Standard + 开发板(Artix-7系列)

这张图把整个流程串起来了。你从左上角开始,一步步走到右下角,就完成了第一个FPGA实验。如果中间出错了,别怕——沿着反馈箭头回来,检查代码、约束或硬件连接,再试一次。

说实话,第一次让LED闪烁的那一刻,你会觉得之前所有的折腾都值了。我记得我第一次上板成功时,盯着那个小灯看了好几分钟——它一亮一灭,就像在跟我说「嘿,你做到了」。

嗯,这就是FPGA开发的魅力。你写的是硬件,但感受到的是创造。

本章小结: 你学会了Vivado的安装与配置,创建了第一个FPGA工程,编写了LED闪烁的Verilog代码,添加了引脚约束,生成了比特流,并成功下载到开发板上。现在,你已经迈出了FPGA图像加速的第一步。

可可精品资料库