1. 系统概述与硬件准备
各位同学,咱们今天正式开始聊图像采集系统。说实话,这个系统是我在FPGA项目里接触最多的一个类型——摄像头把图像数据送进来,FPGA做处理,DDR暂存,最后通过HDMI送到显示器上。听起来简单吧?但真正调通它,我当年可是熬了好几个通宵。
1.1 系统整体架构
先看一张图,把整个系统的脉络理清楚。我习惯把图像采集系统拆成四个核心模块:
嗯,这张图我画了好几次才满意。你想想看,数据流其实是一条单向管道:摄像头采集到的原始图像数据,经过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口上的兄弟。
标准的连接顺序是这样的:
- 先断电——所有设备都不要上电,这是铁律。
- 连接摄像头:把摄像头模组的排线插到开发板的摄像头接口上。注意排线的方向,金手指朝哪边,插槽上有标记的。我建议你拿手机拍个照,万一插反了还能对比。
- 连接HDMI:一头插开发板的HDMI输出口,另一头插显示器。嗯,这里要注意,开发板上的HDMI口通常标有「HDMI OUT」字样,别插到「HDMI IN」上——虽然大部分板子没有输入口。
- 连接JTAG调试器:用Micro USB线把开发板和电脑连起来。如果你用的是独立的JTAG调试器(比如Digilent HS2),那还要接上对应的排线。
- 上电:先开显示器电源,再给开发板上电。为什么?因为有些显示器在检测到HDMI信号前会显示「无信号」,先上电可以避免误判。
⚠️ 警告:千万不要带电插拔摄像头排线!我刚开始做项目时手贱,板子没断电就换摄像头,结果把摄像头接口的IO引脚烧了。后来查手册才知道,很多摄像头的IO电平不兼容热插拔。记住:断电、断电、断电。
1.4 上电后的初步检查
连接好之后,先别急着烧代码。咱们做几个快速检查,确保硬件没毛病:
- 检查电源指示灯:开发板上一般有多个LED,至少有一个是电源指示。如果没亮,先检查电源适配器。
- 检查摄像头供电:用手摸一下摄像头模组,正常应该微微发热。如果冰凉,可能是排线没插好或者供电没起来。
- 检查HDMI握手:显示器应该能识别到HDMI信号源,虽然现在还没图像。有些显示器会显示「HDMI 1080p 60Hz」之类的信息。
- 检查串口输出:打开串口终端(比如Putty或MobaXterm),看看开发板有没有打印信息。如果有,说明FPGA的配置电路和串口都正常。
这些检查做完,硬件平台就算准备好了。说实话,这一步虽然简单,但能帮你省下后面至少两个小时的排错时间。我每次带新人做项目,都会让他们先把这些检查流程走一遍,养成习惯。
经验之谈:如果你用的是Xilinx的开发板,上电后可以按住PROG按钮强制重配置FPGA,看看板子上的DONE灯会不会亮。如果DONE灯不亮,说明FPGA配置有问题——可能是bit文件没烧进去,也可能是时钟晶振没起振。我遇到过一块板子,出厂时晶振虚焊,折腾了我一整天。
好了,硬件准备就到这里。下一节我们会开始写第一个测试程序——让FPGA产生一个简单的彩条信号,先验证HDMI通路是否正常。记住,调试要一步一步来,别想一口吃成胖子。
可可精品资料库