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。安装步骤:

  1. 下载Vitis安装包(和Vivado是同一个安装器,安装时勾选Vitis组件即可)
  2. 安装完成后,设置环境变量:source /opt/Xilinx/Vitis/2021.1/settings64.sh
  3. 验证安装:运行 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? 应用场景 开发板选型 环境搭建 Vivado/Vitis配置 第一个工程验证 图1:本章知识体系结构图

这张图把本章的脉络理清楚了。从“为什么用FPGA”出发,到“应用场景”和“开发板选型”,最后落地到“环境搭建”和“第一个工程”。后面的章节,我们会沿着这条线,一步步深入下去。

好,第一章的内容就到这里。环境搭好了,板子选好了,接下来我们就可以真正开始写代码了。记住,FPGA图像加速的核心是“流水线思维”——把算法拆成一个个小步骤,用硬件并行去实现。这个思维,我会在后面的章节里反复强调。

可可精品资料库