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安装要点:

  1. 去Xilinx官网下载Vivado HLx WebPACK版本(免费,够用)
  2. 安装时选择Vivado HL System Edition,勾选Design Tools和Devices(选你板子对应的器件)
  3. 安装路径不要有中文和空格,否则编译时会报一些莫名其妙的错误
  4. 安装时间很长(1-2小时),建议找个电影边看边等

避坑指南:我曾经因为安装路径带了中文,结果Vivado死活识别不了IP核。折腾了一天才发现是路径问题。所以,所有FPGA工具链的安装路径,一律用英文。

Quartus安装要点:

  1. 去Intel官网下载Quartus Prime Lite Edition(免费版)
  2. 安装时选择Quartus Prime (includes Nios II EDS)
  3. 同样,路径不要有中文
  4. 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图像采集系统 - 知识体系 FPGA图像采集系统 系统概述:摄像头 → FPGA → 显示/存储 应用场景:工业检测、医疗、自动驾驶 开发板选型:Xilinx vs Altera 工具安装:Vivado / Quartus 语言选择:Verilog(推荐) 并行处理 低延迟 硬件加速 实时处理 像素级操作 多路并行

这张图把本章的核心内容串起来了。你看到没?所有知识点都围绕着FPGA图像采集系统这个中心展开。后面的课程,我们会一步步把这些模块填满。

好了,第一章的内容就到这里。工具装好了,语言选好了,接下来就该动手了。下一章我们会正式开始写代码,从最简单的LED控制开始,逐步深入到图像采集的核心逻辑。

可可精品资料库