1. 系统概述与硬件准备

各位同学,咱们今天正式开始聊图像采集系统。说实话,这个系统是我在FPGA项目里接触最多的一个类型——摄像头把图像数据送进来,FPGA做处理,DDR暂存,最后通过HDMI送到显示器上。听起来简单吧?但真正调通它,我当年可是熬了好几个通宵。

1.1 系统整体架构

先看一张图,把整个系统的脉络理清楚。我习惯把图像采集系统拆成四个核心模块:

摄像头 OV5640 / MT9V034 FPGA 图像采集 + 缓存控制 + 显示驱动 DDR3/DDR4 帧缓存 显示器 HDMI 1080p DVP / MIPI 写数据 读数据 数据流方向:摄像头 → FPGA → DDR → FPGA → 显示器

嗯,这张图我画了好几次才满意。你想想看,数据流其实是一条单向管道:摄像头采集到的原始图像数据,经过FPGA的接口逻辑,先写入DDR做缓存,然后再从DDR读出来,经过显示控制器送到HDMI接口。说白了,FPGA在这里就是个「数据搬运工」加「格式转换器」。

核心要点:整个系统的瓶颈往往不在FPGA逻辑本身,而在DDR的带宽分配。我在项目中遇到过,摄像头分辨率一提高,DDR读写冲突就冒出来了。所以后面我们会专门讲DDR控制器的仲裁策略。

1.2 硬件平台准备

聊完架构,咱们看看手头需要哪些家伙什。我建议你先把这些东西备齐了,别等到调代码时才发现少根线——这种事我干过不止一次。

硬件组件 推荐型号/规格 数量 备注
FPGA开发板 Xilinx Artix-7 / Zynq-7000 系列 1块 带HDMI输出接口,至少256MB DDR
摄像头模组 OV5640(500万像素)或 MT9V034 1个 优先选DVP接口,调试方便
HDMI线缆 标准HDMI 1.4,长度1米以内 1根 太长会引入信号衰减
电源适配器 12V/2A 或 5V/3A(看板子要求) 1个 别用劣质电源,纹波大容易死机
Micro USB线 用于JTAG下载和串口调试 1根 最好带磁环的
显示器 支持HDMI输入的1080p显示器 1台 电视也行,但延迟会大一点

小提示:我个人习惯在桌面上铺一块防静电垫,尤其是北方干燥的冬天,手一碰板子就可能放电。我曾经因为静电把一块Zynq板子的HDMI接口烧了,那叫一个心疼。

1.3 物理连接搭建

东西都齐了,咱们开始接线。别笑,这一步真有人搞反过——我就见过把HDMI插到开发板的USB口上的兄弟。

标准的连接顺序是这样的:

  1. 先断电——所有设备都不要上电,这是铁律。
  2. 连接摄像头:把摄像头模组的排线插到开发板的摄像头接口上。注意排线的方向,金手指朝哪边,插槽上有标记的。我建议你拿手机拍个照,万一插反了还能对比。
  3. 连接HDMI:一头插开发板的HDMI输出口,另一头插显示器。嗯,这里要注意,开发板上的HDMI口通常标有「HDMI OUT」字样,别插到「HDMI IN」上——虽然大部分板子没有输入口。
  4. 连接JTAG调试器:用Micro USB线把开发板和电脑连起来。如果你用的是独立的JTAG调试器(比如Digilent HS2),那还要接上对应的排线。
  5. 上电:先开显示器电源,再给开发板上电。为什么?因为有些显示器在检测到HDMI信号前会显示「无信号」,先上电可以避免误判。

⚠️ 警告:千万不要带电插拔摄像头排线!我刚开始做项目时手贱,板子没断电就换摄像头,结果把摄像头接口的IO引脚烧了。后来查手册才知道,很多摄像头的IO电平不兼容热插拔。记住:断电、断电、断电。

1.4 上电后的初步检查

连接好之后,先别急着烧代码。咱们做几个快速检查,确保硬件没毛病:

  • 检查电源指示灯:开发板上一般有多个LED,至少有一个是电源指示。如果没亮,先检查电源适配器。
  • 检查摄像头供电:用手摸一下摄像头模组,正常应该微微发热。如果冰凉,可能是排线没插好或者供电没起来。
  • 检查HDMI握手:显示器应该能识别到HDMI信号源,虽然现在还没图像。有些显示器会显示「HDMI 1080p 60Hz」之类的信息。
  • 检查串口输出:打开串口终端(比如Putty或MobaXterm),看看开发板有没有打印信息。如果有,说明FPGA的配置电路和串口都正常。

这些检查做完,硬件平台就算准备好了。说实话,这一步虽然简单,但能帮你省下后面至少两个小时的排错时间。我每次带新人做项目,都会让他们先把这些检查流程走一遍,养成习惯。

经验之谈:如果你用的是Xilinx的开发板,上电后可以按住PROG按钮强制重配置FPGA,看看板子上的DONE灯会不会亮。如果DONE灯不亮,说明FPGA配置有问题——可能是bit文件没烧进去,也可能是时钟晶振没起振。我遇到过一块板子,出厂时晶振虚焊,折腾了我一整天。

好了,硬件准备就到这里。下一节我们会开始写第一个测试程序——让FPGA产生一个简单的彩条信号,先验证HDMI通路是否正常。记住,调试要一步一步来,别想一口吃成胖子。


可可精品资料库