1. 课程导论与开发环境搭建
各位同学,欢迎来到《从零搭建FPGA图像采集系统》的第一课。
说实话,每次带新人入门FPGA,我都要先问一个问题:你为什么要学FPGA? 如果只是为了应付考试,那趁早换个方向。但如果是为了真正理解数字电路、做点硬核的东西——比如我们今天要讲的图像采集系统,那你就来对地方了。
1.1 FPGA图像采集系统概述
FPGA图像采集系统,说白了就是用FPGA芯片把摄像头传来的图像数据接进来,做点处理,再送出去显示或存储。听起来简单,但里面门道不少。
我当年第一个项目就是做这个。记得当时用的是OV7670摄像头,30万像素,现在看简直弱爆了。但就这,我折腾了整整两周才把第一帧图像稳定显示在屏幕上。嗯,那种成就感,至今难忘。
一个典型的FPGA图像采集系统包含这几个部分:
- 图像传感器:CMOS或CCD摄像头,负责把光信号转成电信号
- FPGA主控:核心处理单元,负责数据采集、缓存、处理
- 外部存储器:DDR3/DDR4或SRAM,用于帧缓存
- 显示接口:HDMI、VGA或LCD,把处理后的图像展示出来
- 通信接口:UART、USB或以太网,用于和上位机交互
核心要点:FPGA的优势在于并行处理和低延迟。CPU处理一帧图像可能要几十毫秒,FPGA可以在几微秒内完成像素级操作。这就是为什么工业相机、医疗内窥镜这些对实时性要求高的场景,几乎清一色用FPGA。
1.2 应用场景
你可能会问:FPGA图像采集到底能干啥?我简单列几个我实际接触过的项目:
- 工业视觉检测:流水线上的产品缺陷检测,要求毫秒级响应。我曾经给一个电子厂做过PCB焊点检测,FPGA实时处理1080p@60fps的视频流,识别速度比CPU方案快了10倍。
- 医疗影像设备:内窥镜、超声设备,对图像质量和实时性要求极高。FPGA可以做实时去噪、增强,而且功耗控制得好。
- 自动驾驶:摄像头数据预处理,比如畸变校正、色彩空间转换。这些计算量大的操作,用FPGA做硬件加速再合适不过。
- 安防监控:多路视频拼接、运动检测。FPGA的并行性可以同时处理多路数据流。
你看,这些场景都有一个共同点:数据量大、实时性要求高、算法相对固定。这就是FPGA的舒适区。
1.3 开发板选型
选开发板这件事,我踩过不少坑。刚开始做项目时,总觉得板子越贵越好,结果买回来一堆用不上的外设,白白浪费预算。
目前主流FPGA厂商就两家:Xilinx(现在叫AMD Xilinx) 和 Altera(现在叫Intel PSG)。我个人的建议是:
| 对比项 | Xilinx | Altera (Intel) |
|---|---|---|
| 开发工具 | Vivado | Quartus Prime |
| IP核生态 | 非常丰富,MIPI、HDMI都有现成IP | 也不错,但部分IP需要额外付费 |
| 学习资源 | 社区活跃,资料多 | 相对少一些 |
| 适合入门 | 推荐Artix-7系列 | 推荐Cyclone IV/V系列 |
我的建议:如果你是纯新手,选Xilinx的Artix-7系列开发板,比如Nexys Video或Basys 3。原因很简单:资料多、社区活跃、Vivado用起来比Quartus顺手。我当年就是从Basys 3入门的,到现在还留着那块板子当纪念。
选板子时要注意几点:
- IO口数量:图像采集需要大量IO,至少要有40个以上可用GPIO
- 片上存储:BRAM大小,至少要有几百KB,用于行缓存
- 外部存储接口:最好带DDR接口,做帧缓存用
- 视频接口:HDMI输入输出、或者FPC摄像头接口
1.4 Vivado/Quartus安装与配置
安装开发工具这件事,说起来简单,做起来全是坑。我见过太多同学卡在这一步了。
Vivado安装要点:
- 去Xilinx官网下载Vivado HLx WebPACK版本(免费,够用)
- 安装时选择Vivado HL System Edition,勾选Design Tools和Devices(选你板子对应的器件)
- 安装路径不要有中文和空格,否则编译时会报一些莫名其妙的错误
- 安装时间很长(1-2小时),建议找个电影边看边等
避坑指南:我曾经因为安装路径带了中文,结果Vivado死活识别不了IP核。折腾了一天才发现是路径问题。所以,所有FPGA工具链的安装路径,一律用英文。
Quartus安装要点:
- 去Intel官网下载Quartus Prime Lite Edition(免费版)
- 安装时选择Quartus Prime (includes Nios II EDS)
- 同样,路径不要有中文
- Quartus比Vivado轻量一些,安装时间短
安装完成后,建议做一件事:跑一个LED闪烁的例程。这是FPGA界的"Hello World",能验证工具链是否正常工作。我每次换新电脑,第一件事就是跑这个例程,确保环境没问题。
1.5 硬件描述语言选择
Verilog还是VHDL?这个问题几乎每个初学者都会问。我的回答很简单:选Verilog。
为什么?
- 语法更像C,上手快。VHDL的语法太啰嗦,一个简单的计数器要写好几行
- 业界主流,尤其是图像处理领域,几乎清一色Verilog
- 资源多,网上开源的Verilog代码比VHDL多得多
但我也要说句公道话:VHDL在大型项目和军工航天领域用得不少,因为它的类型系统更严格,不容易出错。不过对于咱们做图像采集来说,Verilog完全够用。
来看一个最简单的Verilog代码,一个D触发器:
module d_flip_flop (
input wire clk,
input wire rst_n,
input wire d,
output reg q
);
always @(posedge clk or negedge rst_n) begin
if (!rst_n)
q <= 1'b0;
else
q <= d;
end
endmodule
这段代码你看着可能有点懵,没关系。我们后面会一点点拆解。你只需要记住:Verilog的核心就是描述电路,不是写软件。这个思维转变很重要。
核心思维:写Verilog时,脑子里要想的是门电路、触发器、连线,而不是变量、函数、循环。这是FPGA开发和软件开发的本质区别。
1.6 本章知识体系
为了让你更直观地理解本章内容,我画了一张图:
这张图把本章的核心内容串起来了。你看到没?所有知识点都围绕着FPGA图像采集系统这个中心展开。后面的课程,我们会一步步把这些模块填满。
好了,第一章的内容就到这里。工具装好了,语言选好了,接下来就该动手了。下一章我们会正式开始写代码,从最简单的LED控制开始,逐步深入到图像采集的核心逻辑。
可可精品资料库