2. 开发环境搭建
说实话,做FPGA硬件加速这行,环境搭建往往是第一道坎。我见过不少新手,板子买回来折腾三天连灯都没点亮,最后发现是驱动没装对。嗯,今天咱们就把这事彻底捋清楚。
1.1 Vivado与Vitis的安装策略
先说说这两个工具的关系。Vivado是负责综合、布局布线的,Vitis则是做嵌入式开发和软件调试的。从2020版本开始,Xilinx把两者打包在一起了,安装一个Vitis就会自动带上Vivado。
版本选择建议:
- 如果你用的是7系列或UltraScale系列,Vivado 2019.1到2021.2都挺稳
- 如果是Versal或Kria系列,建议直接上2022.2以上版本
- 我个人习惯用2021.1,踩过的坑少,社区资料也多
安装步骤(以Vivado 2021.1为例):
- 去Xilinx官网下载Vitis Unified Installer
- 运行安装程序,选择"Vitis"安装类型(会自动包含Vivado)
- 勾选你要支持的器件系列——别全选,除非你硬盘够大
- 安装路径不要有中文和空格,我习惯用
C:\Xilinx\Vivado2021.1 - License配置:可以用Node-Locked或Floating License
1.2 开发板PCIe驱动安装
PCIe驱动这块,说白了就是让操作系统认识你的FPGA板卡。不同厂商的板子驱动不太一样,但核心思路是相通的。
Xilinx官方板卡(如VCU118、Alveo系列):
- Windows下:运行
Xilinx\Vivado\2021.1\data\xicom\cable_drivers\install_drivers.exe - Linux下:用
sudo ./install_drivers脚本
第三方板卡(如S2C、HitechGlobal):
- 一般会提供专用的驱动安装包
- 有些需要手动更新PCIe Vendor ID和Device ID
🔧 驱动验证方法:
Windows下打开设备管理器,看到"Xilinx PCIe Device"或类似名称,且没有黄色感叹号,就说明驱动装好了。
Linux下用 lspci -v | grep Xilinx 查看。
我记得有一次给Alveo U200装驱动,Windows死活认不出来。后来发现是BIOS里没开"Above 4G Decoding",折腾了两天才找到原因。你想想看,这种小细节多坑人。
1.3 JTAG调试器连接与验证
JTAG调试器是FPGA开发者的"听诊器"。没有它,你连板子死活都不知道。
常见JTAG调试器:
| 型号 | 速度 | 适用场景 |
|---|---|---|
| Xilinx Platform Cable USB II | 6 MHz | 调试、下载bitstream |
| Digilent JTAG-HS3 | 30 MHz | 高速调试、批量烧写 |
| Xilinx Virtual Cable (XVC) | 取决于网络 | 远程调试 |
连接步骤:
- 将JTAG调试器连接到开发板的JTAG接口(注意方向,别插反了)
- USB线连接到电脑,开发板上电
- 打开Vivado,点击"Open Hardware Manager"
- 点击"Auto Connect",如果能识别到器件,就说明连上了
- JTAG线太长(超过30cm)会导致信号衰减,我吃过这个亏
- 开发板没上电时不要插JTAG,容易烧接口
- 如果识别不到,试试换USB口或重启Vivado
1.4 环境验证:跑一个LED闪烁
环境搭好没,跑个最简单的LED闪烁就知道了。这就像写代码先打"Hello World"一样。
操作流程:
- 在Vivado中新建工程,选择对应器件型号
- 写一个简单的Verilog代码:
module led_blink(
input clk,
input rst_n,
output reg led
);
reg [31:0] cnt;
always @(posedge clk or negedge rst_n) begin
if (!rst_n)
cnt <= 32'd0;
else
cnt <= cnt + 1;
end
always @(posedge clk or negedge rst_n) begin
if (!rst_n)
led <= 1'b0;
else if (cnt == 32'd50_000_000) // 假设50MHz时钟,1秒翻转一次
led <= ~led;
end
endmodule
- 综合、实现、生成bitstream
- 通过Hardware Manager下载到板子
- 如果LED没亮,先检查约束文件(XDC)里的管脚分配对不对
- 用示波器或逻辑分析仪看时钟信号是否正常
- JTAG下载成功后,Vivado会显示"Programmed successfully"
说实话,我第一次跑LED闪烁时,板子死活没反应。后来发现是复位信号接反了——低电平复位写成了高电平复位。这种低级错误,谁还没犯过呢?
1.5 知识体系总览
下面这张图把整个环境搭建的脉络梳理清楚了,你可以对照着检查自己哪步还没做:
环境搭建这事,说白了就是"磨刀不误砍柴工"。我见过太多人急着写代码,结果环境没配好,浪费的时间比写代码还多。你按这个流程走一遍,基本不会出大问题。
最后提醒一句:装完环境后,一定跑个LED闪烁验证。别等到项目做到一半才发现JTAG连不上,那才叫欲哭无泪。