第一课:课程导论与系统概览
各位同学,欢迎来到《摄像头输入与AXI总线集成实战》课程。
我是你们这门课的主讲。说实话,做FPGA这么多年,我踩过最多的坑,就是摄像头和处理器之间的数据通路。你想想看,摄像头那边哗哗地往外吐数据,处理器这边嗷嗷待哺,中间要是没有一条靠谱的“高速公路”,画面卡顿、丢帧、花屏,那都是家常便饭。
这门课,咱们就专门来解决这个问题。我会带着大家,从摄像头接口的最底层,一路干到AXI总线的集成,最后让摄像头的数据稳稳当当地送进DDR内存里。
1.1 摄像头接口概述:MIPI与DVP
先说摄像头这边。目前主流的接口,就两种:DVP和MIPI。
DVP(Digital Video Port),这是老前辈了。并行接口,一根像素时钟,加上8位、10位或12位的数据线,再加上行同步(HSYNC)、场同步(VSYNC)这些控制信号。好处是简单,逻辑分析仪一抓,波形一目了然。坏处呢?
- 数据线太多,占PCB面积,干扰也大。
- 频率上不去,一般到100MHz左右就到头了。
- 传输距离短,板内玩玩还行。
MIPI(Mobile Industry Processor Interface),这是现在的主流。差分串行接口,一对时钟,一对或几对数据线。优势很明显:
- 线少,一对差分线就能传几Gbps的数据。
- 抗干扰能力强,差分信号嘛。
- 功耗低,适合移动设备。
但MIPI也有它的脾气。协议复杂,有物理层(D-PHY)、协议层(CSI-2)。调试起来比DVP麻烦多了,示波器一上去,波形都是差分对,得用专门的解码软件。
下面这张图,是我自己画的,把DVP和MIPI的核心区别捋了一遍。
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内存的完整路径。
你看,整个链路其实很清晰:
- 摄像头传感器:输出原始的MIPI差分信号或DVP并行信号。
- 物理接口层:FPGA的IOB负责接收这些信号。MIPI的话,需要专用的D-PHY硬核或者用逻辑资源模拟。DVP的话,直接连到普通IO就行。
- 协议解析层:把MIPI CSI-2的包拆开,或者把DVP的同步信号解析出来,还原成像素数据。
- AXI4-Stream接口:把像素数据打包成AXI Stream的格式,加上TVALID、TREADY、TLAST这些控制信号。
- AXI Interconnect:这是一个路由器,把Stream数据转成内存映射的AXI4 Full格式,或者直接送给VDMA(视频直接内存访问)。
- DDR控制器 / 处理器:最终数据存到DDR里,或者直接送给处理器做算法处理。
好了,这一章的内容就是这些。我们先把整个系统的轮廓搭起来,后面每一章,我都会带着大家把每一个模块拆开,揉碎了,讲清楚。嗯,准备好了吗?
本章核心要点:
- DVP简单但速度慢,MIPI复杂但性能强
- AXI4-Stream是摄像头数据的最佳载体
- 系统架构分6层:传感器→物理层→协议层→Stream→Interconnect→存储/处理
- 调试要逐级验证,不要跳步