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用户?嗯,装个虚拟机吧。
安装步骤其实不复杂,但有几个坑我得提前告诉你:
- 下载安装包: 去AMD官网注册账号,下载Vivado ML Standard版。注意选对版本——我建议用2022.2或2023.1,这两个版本比较稳定。
- 安装过程: 双击安装程序,一路Next。到了选择产品时,勾选
Vivado ML Standard。设备支持里,根据你的板子选对应的系列。比如你用Artix-7,就勾选7 Series。 - 许可证配置: 安装完后,打开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亮起来
比特流生成好了,接下来就是最激动人心的时刻——下载到板子上。
- 用USB线连接开发板和电脑。确保板子供电正常(通常会有电源指示灯亮起)。
- 在Vivado中点击 Open Hardware Manager → Auto Connect。Vivado会自动识别你的开发板。
- 识别成功后,点击 Program Device,选择刚才生成的
led_blink.bit文件。 - 点击 Program,等待进度条走完。
如果一切正常,你会看到板子上的LED开始以大约1秒的周期闪烁。如果没反应,别慌,检查以下几点:
- 板子供电了吗?电源指示灯亮了吗?
- USB线是数据线还是充电线?有些线只能充电不能传数据。
- 引脚约束写对了吗?时钟引脚和LED引脚是否匹配?
- 复位引脚是否拉高?如果rst_n一直为低,LED永远不会亮。
调试技巧: 如果LED不闪,可以先把计数器改小,比如改成 CNT_MAX = 50,这样LED会以极快的速度闪烁(肉眼可能看到常亮或微暗)。如果这时候LED有变化,说明代码和硬件连接都没问题,只是计数器值太大了。再慢慢调大,找到合适的闪烁频率。
2.5 本章知识体系
为了让你更直观地理解整个流程,我画了一张图。它展示了从环境搭建到上板验证的完整链路:
这张图把整个流程串起来了。你从左上角开始,一步步走到右下角,就完成了第一个FPGA实验。如果中间出错了,别怕——沿着反馈箭头回来,检查代码、约束或硬件连接,再试一次。
说实话,第一次让LED闪烁的那一刻,你会觉得之前所有的折腾都值了。我记得我第一次上板成功时,盯着那个小灯看了好几分钟——它一亮一灭,就像在跟我说「嘿,你做到了」。
嗯,这就是FPGA开发的魅力。你写的是硬件,但感受到的是创造。
本章小结: 你学会了Vivado的安装与配置,创建了第一个FPGA工程,编写了LED闪烁的Verilog代码,添加了引脚约束,生成了比特流,并成功下载到开发板上。现在,你已经迈出了FPGA图像加速的第一步。
可可精品资料库