第一章:系统概述与需求分析
各位同学,大家好。我是你们的FPGA讲师。今天咱们正式开始这门课——HDMI与MIPI双路采集系统设计实战。
第一节课,我不会直接扔给你一堆代码。咱们先聊聊:这东西到底能干嘛?为什么要做?技术指标怎么定?
说白了,这就是一个系统的顶层设计。你想想看,盖房子之前总得先画图纸吧?做FPGA系统也是一样。需求分析做不好,后面全是坑。我当年刚入行时,就吃过这个亏——项目做到一半,甲方突然说要加一路MIPI输入,结果整个架构推倒重来。嗯,从那以后,我养成了一个习惯:开工前,先把需求聊透。
1.1 应用场景:这东西用在哪?
HDMI和MIPI,这两个接口大家应该不陌生。HDMI是电视、显示器、机顶盒的标配。MIPI呢,是手机摄像头、平板屏幕的常用接口。
那为什么要把它们俩做到一个系统里?
我举几个真实场景:
- 视频会议终端:你需要同时采集电脑的HDMI输出(PPT画面)和摄像头的MIPI输出(主讲人画面)。两路信号要同步处理、叠加显示。
- 医疗内窥镜:HDMI接外部监视器,MIPI接内部CMOS传感器。两路数据要实时融合,用于手术导航。
- 工业检测:HDMI接上位机显示界面,MIPI接高速工业相机。两路信号需要精确对齐,做缺陷比对。
你看,这些场景都有一个共同点:需要同时处理两路不同接口的视频流。而且,往往对实时性、同步性要求极高。
核心痛点:市面上大多数采集卡只支持单路输入。双路采集要么用两台设备拼凑,要么用昂贵的专用板卡。我们的目标,就是用FPGA做一款低成本、低延迟、高灵活度的双路采集方案。
3.2 技术指标:定多少才算合理?
需求明确了,接下来就是定指标。我个人习惯,先列一个表格,把关键参数敲死。这样后面做设计时,心里有底。
| 参数项 | 指标要求 | 说明 |
|---|---|---|
| HDMI输入分辨率 | 1920x1080@60Hz | 支持1080p全高清,向下兼容720p |
| MIPI输入分辨率 | 1920x1080@30Hz | 常见摄像头模组规格,4-lane MIPI |
| 数据位宽 | 24-bit RGB | 每像素8-bit,色彩深度足够 |
| 系统延迟 | < 2帧 | 从输入到输出,不超过33ms(@60Hz) |
| 存储带宽 | ≥ 4.8 Gbps | 两路同时写入DDR4,预留余量 |
| 接口类型 | HDMI 1.4 + MIPI CSI-2 | 主流标准,兼容性好 |
这里我要多说一句:指标不是越高越好。比如MIPI,你非要上4K@60Hz,那FPGA的选型、DDR的带宽、PCB的层数,全都要跟着涨。成本翻倍,但实际场景用不上。我建议:够用就好,留20%余量。
避坑指南:我曾经在一个项目里,把MIPI的lane数从4条砍到2条,想着省点IO。结果发现摄像头模组不支持2-lane模式,最后只能换模组。所以,定指标前,先确认外设的规格。别想当然。
3.3 总体架构设计:怎么搭积木?
指标定好了,接下来就是画架构图。我习惯用模块化的思路来设计。每个模块各司其职,接口清晰。这样后期调试、升级都方便。
下面这张图,是我为这个系统画的顶层架构。你看一眼,大概就能明白数据是怎么流的。
这张图里,我画了两条数据路径:
- 主路径(实线):HDMI/MIPI -> 预处理 -> DDR4 -> 输出。这是标准模式,两路数据先存到DDR里,再按需读出。好处是灵活,可以做帧缓存、叠加、缩放。
- 直通路径(虚线):预处理 -> 输出。这是低延迟模式,数据不经过DDR,直接输出。适合对延迟极度敏感的场景,比如游戏直播。
你可能会问:为什么不用DDR直通?嗯,这里有个权衡。直通模式延迟低,但只能做简单的格式转换。一旦你要做多路叠加、画中画,就必须走DDR。所以,我设计时把两种模式都做了,通过一个寄存器来切换。这样,同一个硬件,可以适应不同场景。
注意:直通模式下,两路输入必须严格同步。否则输出画面会出现撕裂。我建议:除非你确定输入源是同步的,否则老老实实走DDR。别为了省那几毫秒延迟,搞出一堆bug。
3.4 关键模块拆解
架构图看完了,咱们再深入一层。我把几个核心模块拆开讲讲:
- HDMI RX:负责接收HDMI信号,做TMDS解码、EDID读取、HDCP解密(如果需要)。输出并行RGB数据+行场同步信号。
- MIPI CSI-2 RX:负责接收MIPI差分信号,做lane对齐、字节解包、长包解析。输出像素数据+帧同步信号。
- 帧同步模块:这是整个系统的心脏。它负责把两路不同步的视频流,对齐到同一个时间基准上。我常用的方法是:写一个双口RAM,用输入帧同步信号写,用输出帧同步信号读。只要RAM深度够大,就能容忍两路之间的帧偏移。
- DDR4控制器:负责管理DDR的读写。这里要注意带宽分配。两路写入+一路读出,总带宽要小于DDR理论带宽的70%。否则,一旦出现背压,系统就会丢帧。
个人经验:帧同步模块的深度,我一般设为4帧。为什么是4帧?因为两路输入的最大帧偏移,通常不超过2帧。留2帧余量,足够应对大部分情况。当然,如果你用的是USB摄像头,那偏移可能更大。我建议:先实测,再定深度。
3.5 本章小结
好了,第一节课的内容就到这里。咱们回顾一下:
- 明确了双路采集的应用场景:视频会议、医疗、工业检测。
- 敲定了技术指标:1080p@60Hz + 1080p@30Hz,延迟小于2帧。
- 画出了顶层架构:HDMI/MIPI -> 预处理 -> DDR -> 输出,带直通模式。
- 拆解了关键模块:RX、帧同步、DDR控制器。
这些内容,是后面所有章节的地基。地基打不牢,楼盖得再高也是危房。我建议你:把这张架构图记在脑子里。后面每讲一个模块,你都要能把它放回这张图里,知道它处在哪个位置、负责什么功能。
下一节课,咱们开始动手——搭建HDMI RX模块。我会从原理图讲到代码实现,再到仿真验证。嗯,到时候见。
可可精品资料库