1. 课程导论与开发环境搭建
1.1 为什么是FPGA做图像加速?
大家好,我是你们的讲师。在正式开始之前,我想先聊聊一个核心问题:图像处理这么重的活儿,为什么偏偏要用FPGA来干?
你想想看,传统的CPU是串行执行的,一条指令处理一个像素。GPU虽然并行度高,但功耗和延迟摆在那里。而FPGA呢?它本质上是一张白纸,你可以把图像处理算法直接“画”成硬件电路。像素数据流进来,经过流水线,结果直接流出去——没有指令取指,没有缓存颠簸,一切都是硬件直通。
我做过一个项目,需要在4K分辨率下实时做边缘检测。CPU跑OpenCV,帧率不到10fps。换成FPGA,同样的算法,直接跑到60fps,功耗还不到CPU方案的十分之一。说白了,FPGA就是为“流式处理”而生的。
核心优势总结:
- 低延迟: 硬件流水线,像素级处理延迟可控制在几个时钟周期
- 高吞吐: 并行架构,轻松应对4K/8K视频流
- 低功耗: 相比GPU,功耗通常低一个数量级
- 可重构: 算法升级只需重新烧录比特流,硬件不用换
1.2 应用场景:FPGA图像加速到底能干什么?
很多同学觉得FPGA图像加速离自己很远。其实不然。我随便举几个例子,你肯定见过:
- 工业相机: 产线上的缺陷检测,每秒处理几百张图片,CPU根本扛不住。FPGA做预处理(滤波、直方图均衡),CPU只做决策。
- 医疗影像: 内窥镜、超声设备,需要实时降噪和增强。FPGA的低延迟特性在这里是刚需。
- 自动驾驶: 摄像头输入的原始数据,FPGA先做去马赛克、白平衡、畸变校正,再送给AI芯片做目标检测。
- 视频编解码: 一些专用的FPGA方案,可以实现低延迟的H.264/H.265编码,用于直播推流。
我记得有一次给一个客户做方案,他们要求对1080p@60fps的视频做实时色彩空间转换和缩放。用ARM做,延迟有3帧。用FPGA做,延迟只有2行像素的时间。客户当场就拍板了。
1.3 开发板选型:别盲目跟风,适合的才是最好的
选开发板这件事,我踩过不少坑。刚开始做FPGA图像处理时,我直接买了一块最贵的旗舰板,结果发现大部分资源根本用不上,而且散热风扇吵得我头疼。
这里我给大家一个选型建议,按预算和需求分:
| 需求等级 | 推荐芯片/板卡 | 适合场景 | 参考价格 |
|---|---|---|---|
| 入门学习 | Xilinx Artix-7 / Zynq-7010 | 基础图像处理、简单滤波、边缘检测 | ¥500-1500 |
| 中级实战 | Xilinx Zynq-7020 / Artix-7 200T | 实时视频流处理、多路摄像头、HDMI输入输出 | ¥1500-4000 |
| 高级工程 | Xilinx Kintex-7 / Zynq UltraScale+ | 4K视频处理、深度学习加速、多算法融合 | ¥5000-20000 |
我的个人建议: 如果你是初学者,别一上来就买Zynq。先买一块纯FPGA的板子(比如Artix-7),把RTL设计、时序约束、IP集成这些基本功练扎实了,再上Zynq做ARM+FPGA协同。我见过太多人买了Zynq,结果只用了FPGA部分,ARM核一直闲置着。
1.4 Vivado/Vitis开发环境安装与配置
好,板子选好了,接下来就是搭环境。这部分我尽量说得简洁,因为安装过程其实没什么技术含量,但坑不少。
1.4.1 Vivado安装要点
Vivado是Xilinx的FPGA开发套件,集成了综合、实现、仿真、调试等功能。安装时注意以下几点:
- 版本选择: 我个人习惯用LTS版本(比如2020.2、2021.1),稳定,bug少。别追最新版,除非你想当小白鼠。
- 安装路径: 不要有中文路径!不要有空格!我曾经因为路径里带了个空格,折腾了一整天找不到license。
- 组件选择: 如果你只做FPGA逻辑开发,只勾选“Vivado”即可。如果你要用Zynq的ARM核,记得勾选“Vitis”和“SDK”。
- License: 学生或个人学习,可以用WebPACK版本(免费)。商业项目,买Node Locked License或者浮动License。
避坑指南: 我曾经在Windows上安装Vivado 2020.1,结果综合时总是报错“out of memory”。查了半天,发现是Windows的虚拟内存设置太小。解决办法:把虚拟内存调到32GB以上,或者直接换Linux系统。嗯,从那以后,我所有FPGA开发都在Ubuntu上做了。
1.4.2 Vitis安装与配置
Vitis是Xilinx的统一开发平台,用于Zynq的ARM+FPGA协同开发。安装Vitis之前,必须先装好Vivado。安装步骤:
- 下载Vitis安装包(和Vivado是同一个安装器,安装时勾选Vitis组件即可)
- 安装完成后,设置环境变量:
source /opt/Xilinx/Vitis/2021.1/settings64.sh - 验证安装:运行
vitis -version,看到版本号就对了
配置Vitis时,有一个关键点:Platform(平台)。你需要为你的开发板创建一个Platform,或者使用官方提供的Platform。比如Zynq-7020,官方有 zybo_z7_20 的Platform。如果你自己画板子,就得自己创建Platform,把DDR、UART、GPIO这些外设的地址映射配好。
1.4.3 第一个工程:点亮LED(顺便验证环境)
环境搭好了,我们跑一个最简单的工程,验证一下工具链是否正常。代码很简单,就是一个计数器,让LED闪烁:
module led_blink (
input wire clk,
input wire rst_n,
output reg led
);
reg [24:0] cnt;
always @(posedge clk or negedge rst_n) begin
if (!rst_n)
cnt <= 25'd0;
else
cnt <= cnt + 1'b1;
end
always @(posedge clk or negedge rst_n) begin
if (!rst_n)
led <= 1'b0;
else if (cnt == 25'd24_999_999)
led <= ~led;
end
endmodule
综合、实现、生成比特流,下载到板子上。如果LED开始闪烁,恭喜你,环境没问题了。
小技巧: 第一次跑综合时,Vivado会生成很多临时文件。我建议你专门建一个 project 目录,把工程文件放进去,别跟安装目录混在一起。否则以后找文件会疯掉。
1.5 本章知识体系总览
为了让大家对本章内容有个整体印象,我画了一张图,把核心知识点串起来:
这张图把本章的脉络理清楚了。从“为什么用FPGA”出发,到“应用场景”和“开发板选型”,最后落地到“环境搭建”和“第一个工程”。后面的章节,我们会沿着这条线,一步步深入下去。
好,第一章的内容就到这里。环境搭好了,板子选好了,接下来我们就可以真正开始写代码了。记住,FPGA图像加速的核心是“流水线思维”——把算法拆成一个个小步骤,用硬件并行去实现。这个思维,我会在后面的章节里反复强调。
可可精品资料库