☰
FPGA实现MIPI DPHY:从硬件设计到软件解析的完整指南
2026/10/7 17:01:18 网站建设 项目流程

1. 为什么MIPI DPHY在FPGA上值得认真做一遍

MIPI DPHY这个接口,做图像和显示方向的人基本绕不开。手机屏、车载摄像头、工业相机模组,大量都在用MIPI DPHY做物理层传输。它的特点是速率高、引脚少、功耗低,但协议层和电气层都比较讲究。很多做FPGA的朋友第一次接触MIPI DPHY,往往卡在两个地方:一是硬件上差分对怎么接、终端电阻怎么放、参考时钟怎么给;二是软件上怎么把高速串行数据恢复成字节流,再解析出图像。

Xilinx FPGA做MIPI DPHY,主流方案有两种。一种是利用HP bank的ISERDES和IDELAY做源同步接收,配合SelectIO的LVDS差分标准,速率一般能跑到800Mbps到1.2Gbps每lane。另一种是用GTP/GTX这类高速收发器,配合MIPI DPHY的电气规范做转换,速率可以更高,但需要额外的电平转换和协议适配。对于大多数摄像头和显示屏应用,第一种方案已经够用,而且资源占用小、调试直观。

这篇文章面向的是有一定FPGA基础、想自己动手把MIPI DPHY跑通的工程师。我会从硬件设计讲到软件解析,把每一步的考量、参数计算、踩过的坑都摊开来说。你不需要有MIPI协议栈的完整背景,但至少要熟悉Vivado的基本流程、SelectIO原语的使用,以及Verilog的时序逻辑写法。

2. 整体方案设计与关键选型考量

2.1 为什么选SelectIO方案而不是GT方案

MIPI DPHY的电气层是SLVS(Scalable Low Voltage Signaling),差分摆幅大约200mV,共模电压200mV左右。Xilinx的HP bank支持LVDS和LVDS_25标准,差分摆幅约350mV,共模约1.2V。直接对接会有共模不匹配的问题,所以中间需要加一级电平转换,或者用AC耦合加偏置网络。

GT方案的优势是速率高、均衡能力强,但GT的参考时钟要求、协议层适配、功耗都更复杂。对于1Gbps以下的MIPI DPHY,SelectIO方案更划算。我实测过用Kintex-7的HP bank接收1.2Gbps的MIPI数据,配合IDELAY做眼图扫描,误码率可以做到1e-12以下。

选SelectIO方案还有一个好处:时钟和数据的关系是源同步的,MIPI DPHY的时钟lane是DDR时钟,数据lane在时钟双沿采样。用ISERDES的DDR模式,配合BUFIO和BUFR,可以比较自然地恢复出并行数据。

2.2 硬件通道规划与Bank选择

MIPI DPHY一般有1个时钟lane加1到4个数据lane。以4 lane为例,需要5对差分线。Xilinx FPGA的HP bank里,差分对是成对分配的,每个bank有若干个差分对。选bank的时候要注意几点:

  • 时钟lane必须接到能驱动BUFIO的时钟 capable 引脚上,否则没法用ISERDES的源同步模式。
  • 数据lane尽量和时钟lane在同一个bank,减少跨bank的时序偏差。
  • 如果bank的VCCO是1.8V,LVDS的共模是1.2V左右,和MIPI的200mV共模差得比较远,需要外部电路做偏置。

我一般会先画一个bank的引脚分配表,把时钟lane放在MRCC或SRCC引脚上,数据lane按差分对顺序排。这样布局布线的时候,IDELAY和ISERDES的约束比较好写。

2.3 电平转换与终端匹配的取舍

MIPI DPHY的发送端是SLVS,接收端需要100欧姆差分终端。Xilinx FPGA的HP bank内部有可配置的终端电阻,可以设成100欧姆差分。但共模电压不匹配的问题还是存在。

常见的做法是AC耦合加偏置。在差分对之间串0.1uF电容,然后在FPGA侧用电阻分压把共模抬到1.2V左右。这样MIPI的200mV共模被隔掉,FPGA侧看到的是以1.2V为中心的差分信号。电容的选择要注意,0.1uF在1Gbps下阻抗大约1.6欧姆,对信号影响不大,但太小了会导致低频分量衰减,太大了体积和寄生参数不好控制。

另一种做法是用专用的电平转换芯片,比如把SLVS转成LVDS。这种芯片一般会集成终端和偏置,用起来省事,但会增加BOM成本和布线复杂度。我个人的经验是,如果速率不超过1Gbps,AC耦合加偏置的方案足够稳定,而且成本低。

3. 硬件设计细节与实操要点

3.1 差分对布线与阻抗控制

MIPI DPHY的差分阻抗要求是100欧姆。PCB走线的时候,差分对要等长、等距,尽量少打过孔。如果必须换层,要在过孔附近加回流地过孔。差分对的间距要均匀,避免出现stub。

我踩过的一个坑是:差分对走线经过一个连接器,连接器的引脚定义把P和N分到了两边,导致差分对在连接器处不得不分开走。结果眼图闭合得很厉害,速率降到800Mbps才能勉强工作。后来换了一个连接器,把差分对放在相邻引脚上,问题就解决了。

所以画原理图的时候,一定要确认连接器的引脚排列,尽量让差分对在物理上相邻。如果连接器是自定义的,最好在引脚定义阶段就把差分对安排好。

3.2 参考时钟与复位设计

MIPI DPHY的时钟lane是DDR时钟,频率等于数据速率的一半。比如1Gbps每lane,时钟lane就是500MHz。这个时钟进FPGA后,要经过BUFIO和BUFR,分别给ISERDES和区域时钟用。

参考时钟的抖动要求比较高,一般建议用差分晶振,抖动在1ps RMS以下。如果时钟抖动太大,ISERDES的采样窗口会变窄,误码率上升。

复位方面,MIPI DPHY的复位一般由协议层控制,但FPGA内部的IDELAY和ISERDES需要在上电后做一次校准。我一般会用一个复位状态机,先复位IDELAY,然后做眼图扫描,找到最佳采样点,再释放ISERDES。

3.3 电源与去耦

FPGA的HP bank电源VCCO和VCCAUX要干净。MIPI DPHY的速率高,电源噪声会直接耦合到差分信号上。我一般会在每个bank的电源引脚附近放0.1uF和0.01uF的电容,再并一个10uF的钽电容。

如果bank的VCCO是1.8V,而MIPI的共模是200mV,AC耦合后的偏置电压要由外部电阻分压产生。这个偏置电压的噪声也要控制,最好用LDO单独供,或者在分压电阻上并一个大电容。

4. 软件解析与核心逻辑实现

4.1 ISERDES与IDELAY的配置

Xilinx的ISERDESE2支持DDR模式,可以把高速串行数据解成8位或10位并行数据。对于MIPI DPHY,数据lane在时钟双沿采样,所以ISERDES要配成DDR模式,数据宽度设成8位。

IDELAY用于调整采样点。IDELAYE2的抽头数一般是31个,每个抽头的延迟约78ps(在7系列里)。对于1Gbps的数据,UI是1000ps,31个抽头覆盖约2.4个UI,足够做眼图扫描。

配置的时候要注意:IDELAYCTRL要提供一个200MHz的参考时钟,这个时钟的精度直接影响IDELAY的延迟精度。我一般用FPGA的MMCM产生200MHz,精度控制在100ppm以内。

4.2 时钟lane的恢复与BUFIO/BUFR使用

时钟lane进FPGA后,先经过IBUFDS转成单端,然后进BUFIO和BUFR。BUFIO给ISERDES提供高速采样时钟,BUFR给区域逻辑提供分频后的时钟。

这里有一个细节:BUFIO的时钟只能驱动同一个bank里的ISERDES,不能跨bank。所以时钟lane和数据lane必须在同一个bank,或者用BUFR把时钟分频后跨bank传递。但BUFR的抖动比BUFIO大,跨bank传递会恶化采样窗口。

我一般会把时钟lane和数据lane放在同一个bank,这样BUFIO直接驱动ISERDES,时序最干净。如果bank资源不够,必须跨bank,那就用BUFR,但速率要降一点。

4.3 数据对齐与字对齐

ISERDES输出的并行数据是8位,但MIPI DPHY的字节边界不一定和ISERDES的边界对齐。所以需要一个字对齐逻辑,找到同步头或者特定的训练序列。

MIPI DPHY的协议层有同步码,比如HS同步序列是00011101。我一般会在FPGA里做一个状态机,搜索这个序列,找到后把字节边界调整过来。

字对齐的逻辑可以用移位寄存器实现:把ISERDES的输出不断移位,每移一位就和同步码比较,匹配上了就锁定。这个逻辑要放在BUFR的时钟域里,速率不高,时序容易满足。

4.4 协议层解析与图像恢复

MIPI DPHY的协议层有几种包:短包、长包、帧起始、帧结束。短包用于同步和命令,长包用于传图像数据。解析的时候,先根据包头的数据类型判断是短包还是长包,然后按长度字段读取数据。

图像恢复的关键是知道像素格式。比如RAW10、RAW8、RGB888,每种格式的字节排列不一样。RAW10是4个像素用5个字节传,需要做位拼接。RGB888是3个字节一个像素,直接按顺序取就行。

我一般会用一个FIFO把解析后的像素数据缓存起来,然后按视频时序输出。FIFO的深度要够,至少能缓存一行像素,避免因为协议层的突发传输导致视频时序断流。

5. 常见问题与排查技巧实录

5.1 眼图闭合与误码率高

眼图闭合是最常见的问题。原因可能有几个:差分对阻抗不匹配、终端电阻不对、参考时钟抖动大、IDELAY采样点没对准。

排查的时候,先用示波器看差分信号的眼图。如果眼图本身就闭合,那是硬件问题。如果眼图还行但误码率高,那是采样点的问题。用IDELAY做眼图扫描,把误码率对IDELAY抽头画出来,找到误码率最低的抽头。

我遇到过一种情况:眼图看起来还行,但误码率就是下不去。后来发现是参考时钟的抖动太大,换了一个低抖动的晶振就好了。所以参考时钟的质量不能省。

5.2 字对齐失败

字对齐失败一般是同步码没搜到。可能的原因有:ISERDES的位序反了、字节边界不对、同步码的极性反了。

排查的时候,先把ISERDES的输出打印出来,看看有没有固定的模式。如果数据看起来是乱的,可能是位序反了,把ISERDES的BITSLIP或者位序配置改一下。如果数据有规律但同步码对不上,可能是极性反了,把差分对的P/N交换一下试试。

5.3 视频输出花屏

视频花屏一般是协议层解析的问题。可能的原因有:包长度读错了、像素格式搞错了、FIFO溢出或下溢。

排查的时候,先把解析后的像素数据存到RAM里,用ILA抓出来看。如果数据看起来是对的,但视频花屏,那是视频时序的问题。如果数据本身就是乱的,那是协议层解析的问题。

我踩过的一个坑是:RAW10的位拼接搞错了,导致像素值偏移。后来仔细看了MIPI的规范,发现RAW10的5个字节里,前4个字节是高8位,第5个字节是4个像素的低2位拼在一起。按这个规则重新拼,图像就正常了。

5.4 常见问题速查表

问题现象可能原因排查方法解决措施
眼图闭合阻抗不匹配、终端不对示波器看眼图调整差分对阻抗、检查终端电阻
误码率高采样点不对、时钟抖动大IDELAY扫描、测时钟抖动找最佳采样点、换低抖动晶振
字对齐失败位序反、极性反打印ISERDES输出改BITSLIP、交换P/N
视频花屏像素格式错、FIFO溢出ILA抓像素数据核对像素格式、加大FIFO深度
时钟不锁定参考时钟不对、BUFIO配置错测时钟频率检查MMCM配置、确认BUFIO连接

6. 实操心得与经验总结

做MIPI DPHY这几年,我最大的体会是:硬件和软件要一起调,不能分开搞。硬件上差分对走不好,软件再怎么调IDELAY也救不回来。软件上字对齐逻辑写错了,硬件眼图再好也解不出图像。

另一个体会是:参考时钟和电源的质量,比想象中重要得多。我见过太多案例,眼图看起来还行,但误码率就是下不去,最后发现是电源噪声或者时钟抖动的问题。所以在PCB设计阶段,就要把电源和时钟当回事,不要等到调试的时候再补。

还有一点:MIPI DPHY的规范要仔细看,尤其是包格式和像素格式的部分。很多花屏问题,根源都是像素格式搞错了。RAW10、RAW12、RGB888、YUV422,每种格式的字节排列都不一样,搞错一个位,图像就偏了。

最后分享一个小技巧:调试的时候,先用一个固定的测试图案,比如彩条或者渐变,这样出了问题容易定位。等测试图案正常了,再换成真实的摄像头数据。这样可以把协议层的问题和图像处理的问题分开,排查起来快很多。

这个方案后续还可以扩展:比如加一个MIPI CSI-2的协议层,支持多lane聚合;或者加一个MIPI DSI的发送端,做显示输出。硬件上如果速率不够,可以换成GT方案,用Aurora或者自定义协议做高速传输。软件上可以把解析逻辑做成IP核,方便复用。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询