第一课:课程导论与系统概览

各位同学,欢迎来到《摄像头输入与AXI总线集成实战》课程。

我是你们这门课的主讲。说实话,做FPGA这么多年,我踩过最多的坑,就是摄像头和处理器之间的数据通路。你想想看,摄像头那边哗哗地往外吐数据,处理器这边嗷嗷待哺,中间要是没有一条靠谱的“高速公路”,画面卡顿、丢帧、花屏,那都是家常便饭。

这门课,咱们就专门来解决这个问题。我会带着大家,从摄像头接口的最底层,一路干到AXI总线的集成,最后让摄像头的数据稳稳当当地送进DDR内存里。

1.1 摄像头接口概述:MIPI与DVP

先说摄像头这边。目前主流的接口,就两种:DVP和MIPI。

DVP(Digital Video Port),这是老前辈了。并行接口,一根像素时钟,加上8位、10位或12位的数据线,再加上行同步(HSYNC)、场同步(VSYNC)这些控制信号。好处是简单,逻辑分析仪一抓,波形一目了然。坏处呢?

  • 数据线太多,占PCB面积,干扰也大。
  • 频率上不去,一般到100MHz左右就到头了。
  • 传输距离短,板内玩玩还行。
我的经验: 我在一个老项目里用过DVP接口的OV7670传感器。当时为了把30根信号线在两层板上走通,头发都掉了不少。如果你做低分辨率、低帧率的项目,DVP确实够用,成本也低。

MIPI(Mobile Industry Processor Interface),这是现在的主流。差分串行接口,一对时钟,一对或几对数据线。优势很明显:

  • 线少,一对差分线就能传几Gbps的数据。
  • 抗干扰能力强,差分信号嘛。
  • 功耗低,适合移动设备。

但MIPI也有它的脾气。协议复杂,有物理层(D-PHY)、协议层(CSI-2)。调试起来比DVP麻烦多了,示波器一上去,波形都是差分对,得用专门的解码软件。

避坑指南: 我曾经在一个项目中,MIPI的D-PHY电平匹配没做好,导致摄像头在高温下频繁丢包。查了三天,最后发现是端接电阻的精度不够。嗯,这种细节,书上不会告诉你。

下面这张图,是我自己画的,把DVP和MIPI的核心区别捋了一遍。

摄像头接口对比:DVP vs MIPI DVP 接口 特点: • 并行总线(8/10/12位) • 时钟 + 数据 + 同步信号 • 频率上限 ~100MHz • 适合低分辨率、低成本 典型传感器: OV7670, OV2640, MT9V034 调试难度: ★☆☆☆☆(简单) MIPI CSI-2 接口 特点: • 差分串行(D-PHY) • 1-4 Lane 数据通道 • 每Lane速率可达 2.5Gbps • 适合高分辨率、高帧率 典型传感器: IMX219, OV5640, AR0234 调试难度: ★★★★☆(复杂) 注:实际选型需综合考虑分辨率、帧率、功耗、成本等因素

1.2 AXI总线基础

摄像头的数据进来了,怎么送给处理器或者DDR呢?这就得靠总线了。在Xilinx的FPGA里,这个总线就是AXI。

AXI(Advanced eXtensible Interface),是ARM公司AMBA总线协议的一部分。说白了,它就是一套握手规则,规定了主设备(Master)和从设备(Slave)之间怎么传数据。

咱们最常用的,是AXI4-Stream。为什么?因为它简单啊!没有地址,没有读写控制,就是一股脑地流数据。摄像头输出的像素,天然就是流式的,一拍一个像素,用AXI4-Stream再合适不过了。

AXI4-Stream的核心信号,其实就几个:

信号名 方向 作用
TVALID Master → Slave 主设备说:“数据准备好了,快拿!”
TREADY Slave → Master 从设备说:“我准备好了,来吧!”
TDATA Master → Slave 数据总线,宽度可以是8、16、32、64位等
TLAST Master → Slave 告诉从设备:“这是这一包的最后一个数据”
TKEEP Master → Slave 指示哪些字节是有效的(用于非对齐传输)

核心要点: TVALID和TREADY必须同时为高,数据才算真正传输成功。这就是AXI的握手规则。我见过很多新手,只拉了TVALID,没等TREADY,结果数据全丢了。

1.3 系统架构图:从摄像头到DDR

好了,我们把摄像头和AXI串起来,看看整个系统长什么样。

下面这张图,是我用SVG画的系统架构。它展示了数据从摄像头传感器,一路流到DDR内存的完整路径。

摄像头输入与AXI总线集成系统架构 摄像头传感器 MIPI / DVP 输出 物理接口层 MIPI D-PHY / DVP IOB 串并转换 / 电平适配 协议解析层 CSI-2 协议解析 像素重组 / 同步 AXI4-Stream 像素流打包 TVALID/TREADY AXI Interconnect 数据路由 / 带宽仲裁 DDR 控制器 MIG / 用户接口 处理器系统 PS / MicroBlaze 数据流方向:摄像头 → 物理层 → 协议层 → AXI-Stream → Interconnect → DDR/处理器

你看,整个链路其实很清晰:

  1. 摄像头传感器:输出原始的MIPI差分信号或DVP并行信号。
  2. 物理接口层:FPGA的IOB负责接收这些信号。MIPI的话,需要专用的D-PHY硬核或者用逻辑资源模拟。DVP的话,直接连到普通IO就行。
  3. 协议解析层:把MIPI CSI-2的包拆开,或者把DVP的同步信号解析出来,还原成像素数据。
  4. AXI4-Stream接口:把像素数据打包成AXI Stream的格式,加上TVALID、TREADY、TLAST这些控制信号。
  5. AXI Interconnect:这是一个路由器,把Stream数据转成内存映射的AXI4 Full格式,或者直接送给VDMA(视频直接内存访问)。
  6. DDR控制器 / 处理器:最终数据存到DDR里,或者直接送给处理器做算法处理。
我的建议: 刚开始做这个系统时,别想着一步到位。先把摄像头接到FPGA,用ILA抓一下MIPI的波形,确认物理层通了。再一步步往后推。我见过太多人,一上来就写VDMA驱动,结果摄像头根本没输出,白忙活。

好了,这一章的内容就是这些。我们先把整个系统的轮廓搭起来,后面每一章,我都会带着大家把每一个模块拆开,揉碎了,讲清楚。嗯,准备好了吗?

本章核心要点:

  • DVP简单但速度慢,MIPI复杂但性能强
  • AXI4-Stream是摄像头数据的最佳载体
  • 系统架构分6层:传感器→物理层→协议层→Stream→Interconnect→存储/处理
  • 调试要逐级验证,不要跳步
可可精品资料库