ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

FPGA HDMI设计必读:Video PHY Controller IP原理与调试指南

FPGA HDMI设计必读:Video PHY Controller IP原理与调试指南 做HDMI设计特别是FPGA方案时很多人会卡在一个地方明明协议层、像素数据处理都写完了结果上板之后屏幕不是雪花就是黑屏。最后查来查去问题多半出在物理层——也就是Video PHY这一块。这篇我就围绕Video PHY Controller IP这个点把HDMI设计中物理层相关的东西从头到尾拆一遍包括它的作用、选型、配置流程、调试方法和常见坑。内容不涉及厂商具体的GUI截图但所有思路和步骤都是我实际验证过的适合正在做FPGA视频输入输出、或者刚接手HDMI相关项目的工程师参考。1. 为什么HDMI设计绕不开Video PHY Controller IP1.1 先看HDMI物理层到底在做什么HDMI看似简单一根线、一个19脚接口但真正到了FPGA设计里面你会发现上层逻辑其实不复杂复杂的全在物理层。HDMI 1.4和2.0采用TMDS链路物理结构上是3个数据通道加1个时钟通道每个通道都是高速串行差分信号。像素时钟经过编码后单通道数据速率等于像素时钟的10倍。这个10倍就是8b/10b编码的代价8bit数据编码成10bit多了2bit用于DC平衡和时钟恢复。举个例子720p60的像素时钟是74.25MHz那么单通道速率就是742.5Mbps三通道加起来约2.23Gbps。1080p60的像素时钟是148.5MHz单通道1.485Gbps。到了4K60HDMI 2.0像素时钟594MHz单通道速率5.94Gbps。这个速率级别已经不是普通并行总线能处理的了必须依靠FPGA内部的高速收发器GT系列、Transceiver等来收。而Video PHY Controller IP就是用来驾驭这组高速收发器的中间层。如果没有这个IP你就得自己处理一大堆脏活收发器的复位序列、CDR锁定、8b/10b对齐、通道间去偏斜、时钟分频、比特位序调整。这些东西单独做任何一个都够喝一壶组合在一起基本等于把GT的用户指南抄一遍。与其反复造轮子直接用厂商提供的Video PHY Controller IP才是项目落地的正路。1.2 Video PHY Controller IP在整个链路中的定位搞清楚链路中的位置特别重要。HDMI设计通常分三层应用层、协议层、物理层。应用层是你的自定义逻辑比如图像缩放、色彩空间转换、OSD叠加协议层负责打包和解包HDMI里涉及AVI InfoFrame、音频数据、辅助数据等物理层则负责把并行数据变成串行比特流或者反向恢复。Video PHY Controller IP正好卡在协议层和物理收发器之间。它向上面对HDMI Controller有些厂商叫HDMI TX/RX Subsystem或者HDMI Controller IP向下直接驱动GT收发器的PMA和PCS。用Xilinx的体系来说Video PHY Controller IP本身并不做HDMI协议的解析它只干三件事初始化收发器并管理复位、配置通道的编码和解码、维护时钟链路。真正的HDMI协议处理由再上一层的HDMI Controller完成。我见过不少初学者把这两个IP搞混以为Video PHY Controller就是HDMI控制器。其实可以这样理解HDMI Controller负责“内容”是否合法比如视频时序是否符合CEA-861标准、InfoFrame有没有正确发送而Video PHY Controller负责“传输”是否畅通不管内容是什么只要保证比特流能稳定地从A端送到B端就行。1.3 什么情况真的需要自己调这个IP如果你用现成的HDMI转接芯片比如Silicon Image、TI的物理层芯片那确实不需要碰Video PHY Controller IP。但当你的系统需要灵活的视频格式支持、动态分辨率切换、多通道视频输入输出、或者需要把HDMI链路嵌入到更大的图像处理流水线时独立芯片方案就显得笨重了性能和灵活性都受限。我做过一个多画面拼接项目需要同时接收四路1080p60的HDMI信号然后做拼接和缩放。如果用外部PHY芯片四路就要四颗芯片板面、功耗、成本都上去了。当时果断选择FPGA收发器加Video PHY Controller的方案四路输入用一颗FPGA全搞定。类似这种场景Video PHY Controller IP就是核心值得花时间吃透。2. Video PHY Controller IP选型与架构拆解2.1 不同FPGA平台上的IP方案怎么选这类IP每个厂商都有但名字和用法差别很大。Xilinx现在叫AMD在Vivado里叫Video PHY Controller配合HDMI 1.4/2.0 Transmitter Subsystem和Receiver Subsystem使用。IntelAltera的方案在Quartus里通常叫HDMI IP Core里面自带PHY层控制。Lattice则有自家的SiI1136或者Soft HDMI IP。选型时首先要看你的FPGA型号里有没有合适的高速收发器以及收发器的速率能否覆盖目标分辨率。表格对比一下我接触过的平台方案平台IP名称协议支持所需硬件资源上手难度Xilinx / AMDVideo PHY Controller HDMI SubsystemHDMI 1.4 / 2.0GTX/GTH/GTY收发器中等文档全Intel / AlteraHDMI IP CoreHDMI 1.4 / 2.0Transceiver中等重集成LatticeSoft HDMI IPHDMI 1.4普通I/O低速/ SERDES较高Microchip / MicrosemiHDMI 2.0 TX/RX SubsystemHDMI 1.4 / 2.0SERDES依赖具体型号选择的时候除了看FPGA资源还要评估后续维护难度。Xilinx的Video PHY Controller因为和GT绑定紧密版本升级后IP配置可能需要重新生成这点要有心理准备。2.2 IP内部的PCS和PMA到底干了什么要真正会用Video PHY Controller得先理解它操作的对象——GT收发器。每个GT收发器内部可以分成PMA物理介质附加层和PCS物理编码子层两个大块。PMA部分负责最底层的模拟电路包括高速串行数据的发送驱动、接收端的CDR时钟数据恢复、信号均衡。CDR是接收端的核心说白了就是从接收到的比特流里提取时钟并保持采样位置在眼睛图的正中间。这个模拟环路的行为直接决定了链路误码率。很多“偶发花屏”问题最后查到的根源就是CDR锁定不稳定。PCS部分负责数字域的编解码和校准包括8b/10b编解码HDMI的TMDS其实也是一种类似机制只是映射表不同、comma字符检测、通道对齐、弹性缓冲。Video PHY Controller主要就是把这些PCS逻辑用IP的形式固化好然后提供寄存器接口和状态信号给上层逻辑使用。IP内部实际上把GT的复杂配置全部封装了。你只需要关注几个核心接口像素数据并行总线、参考时钟、复位信号、状态信号如TX Ready、RX Ready、以及管理总线通常是AXI4-Lite。这种封装方式极大降低了使用门槛但也带来一个问题出了问题之后排查难度反而更大因为你看到的黑盒比裸GT还大。这也是后面调试部分要重点讲的原因。2.3 关键参数的计算和选择逻辑配置Video PHY Controller时核心参数就是Line Rate也就是线速率。计算公式很清楚单通道线速率 像素时钟 × 10实际配置时有三种输入方式直接填线速率、填像素时钟乘以编码系数、或者选预置的视频规格。有的IP版本支持自动推导填一个参考分辨率就自动算出整套参数。但我还是建议亲手算一遍关键时候排查问题很有用。举个例子1080p60的像素时钟是148.5MHzHDMI 2.0下TMDS编码为10bit所以线速率是1.485Gbps。如果做4K30HDMI 1.4上限像素时钟297MHz线速率就是2.97Gbps。这两个数值在GT选型时很关键GTP基本只能到3.125Gbps勉强能跑4K30想跑4K605.94Gbps就必须上GTX或GTH等级别的收发器。另一个重要参数是参考时钟和并行数据位宽。参考时钟一般选100MHz或125MHz也有用Pixel Clock直接做参考的。并行数据位宽有2字节和4字节可选位宽越大意味着内部并行时钟频率越低时序收敛越容易但逻辑资源和数据通路位宽也会变大需要权衡。3. 从零配置一个Video PHY Controller IP的实操记录3.1 设计前的整体规划先把配置步骤放到工程环境里看。假设你用的是Xilinx Vivado目标是做一个HDMI 2.0 TX输出1080p60。第一步是确定收发器的位置和参考时钟输入。FPGA上的GT收发器是成组Quad分布的每个Quad有自己的参考时钟引脚。看原理图确认你用的HDMI差分信号接到了哪个Quad参考时钟接的是哪个引脚。这一步看起来简单但经常有人在这上面栽跟头——IP配置里选的GT location和实际PCB布线不对应导致引脚约束不过或者信号根本送不到收发器里。第二步是打开Vivado IP Catalog搜索Video PHY Controller。创建IP后先设置协议为HDMI 2.0选择TX模式还是RX模式如果后续可能扩展功能可以考虑做成Duplex模式这样一套逻辑既能发也能收只是会多占用一部分收发器资源。然后填线速率相关参数选参考时钟频率。配置Reference Clock时推荐值是125MHz很多官方评估板就是这么做的。如果你的板子特定用了别的频率必须保证这个频率在GT的参考时钟输入允许范围内。3.2 配置界面里那些容易忽略的选项很多人在Video PHY配置界面只把Line Rate填了就生成IP后面上板才发现一堆问题。其实有几个选项非常关键。一个选项是数据位宽。如果做4K60像素时钟594MHz如果选2字节位宽那并行时钟就要594MHz时序收敛压力巨大。这时候选4字节位宽并行时钟降到297MHz收敛容易很多。代价是数据总线从48bit涨到96bit相当于用资源换时序我觉得非常划算。还有一种更高位的位宽模式具体看IP版本总之在能做选择的情况下优先选更宽的并行总线。另一个选项是“Enable Sparse Lanes”或者类似功能这涉及到多通道配置下某些通道不用的问题。做1080p时3个TMDS通道全部使用一般不需要开但如果你以后做HDMI转DP这类设计可能会需要协议层复用的灵活性。还有接收端的Termination和均衡选项。短距离传输小于30cm板内走线用默认设置就能正常工作但长距离线缆连接就要开启接收均衡RX Equalization。这块没有固定答案只能根据实际线长去试多数情况下增益设中间档比较稳。3.3 RTL集成时的接口连接和时序对齐IP生成之后紧接着就是往工程里例化。Video PHY Controller的上层接口分成几个部分并行视频数据接口、管理接口AXI4-Lite、时钟复位接口、以及监视状态接口。TX方向你需要从HDMI Controller那边拿到的像素数据总线通常叫txdata或tdata位宽等于通道数乘以单个通道的并行位宽。1080p60、4字节模式下3个通道×32bit96bit。注意数据排列顺序通道0对应D0总线通道1对应D1通道2对应D2顺序错了颜色就会错乱RGB变成BGR这个故障现象特别迷惑人。RX方向类似除了数据还要特别关注rxbyteisaligned和rxcommadet之类的状态信号。Video PHY Controller一般会把这些状态信号聚合输出你可以在顶层把它们接到ILA上调试时非常有用。时钟方面TX设计相对简单发送侧的并行时钟由IP内部从GT输出时钟派生而来主要是保证你送进来的数据要和txoutclk保持同步关系。RX方向麻烦一点因为接收数据恢复时钟的质量和相位并不确定IP内部一般会有弹性缓冲来隔离时钟域你需要留意rxoutclk和用户逻辑时钟之间是否需要额外处理多数情况下直接把rxoutclk接给下游逻辑就行但要确保约束里正确创建了时钟关系。3.4 约束文件与时钟收敛经验Video PHY Controller涉及的约束比普通逻辑复杂得多但好在IP生成的约束一般已经包含大部分内容。你需要注意的额外约束主要在两个地方一是差分参考时钟引脚的位置约束和电平标准二是与GT相关的时序异常约束。参考时钟的引脚约束一般用set_property PACKAGE_PIN指定引脚位置电平标准设置为LVDS或LVDS_25还要加一个set_property DIFF_TERM_ADV之类的终端匹配属性。这些内容虽然不复杂但写错一个就导致bit文件加载失败或收发器初始化不通过。时序收敛上高速并行数据总线往往连接的是GT的通道逻辑这一块通常不需要你手动加set_multicycle_path之类的约束IP的XDC已经处理了。真正需要关注的是下游用户逻辑和txoutclk/rxoutclk域之间的路径。我一般会把整个视频通路做成单一像素时钟域FPGA内部用BUFG把GT输出的byte clock转成全局时钟然后所有上游逻辑都用这个时钟。关于位序问题GT收发器内部有极性反转和bit ordering的寄存器Video PHY IP会处理但如果你从IP外面直接看数据还是需要确认高位和低位的对应关系。做1080p时我踩过一个坑数据总线位序反了图像整体翻转不是左右镜像是像素bit错位导致的花屏。后来通过寄存器回读确认是bit order问题改了一个参数就好了。4. 上板调试与问题排查的踩坑实录4.1 先做回环测试别急着接真实HDMI设备调试HDMI PHY最忌讳一上来就接真实显示器。真实显示器的协商过程复杂一旦失败你根本不知道是PHY的问题、协议层的问题还是线材的问题。我的习惯是先在FPGA内部做回环测试。回环分几种近端PMA回环Near-End PMA Loopback、近端PCS回环、远端回环。Video PHY IP内部一般可以配置进入回环模式。近端PMA回环的意思是发送端串行信号在PMA内部直接送回到接收端不经过外部物理连线这样能验证GT的TX和RX通路是否都能工作不涉及板级信号质量。如果近端回环测通了再做外部回环用一根短跳线把板子上的TX差分对和RX差分对短接。这种回环能够验证PCB走线、连接器以及收发器驱动的直通能力。参考频率没问题的话外部回环测出来的误码率应该极低errors计数器应始终为零。回环测试具体怎么做可以把TX侧固定发一个测试码型比如PRBS或者固定的0x1BC让数据经过回环回到RX端在RX侧用ILA抓数据比对数据是否正确。多数Video PHY IP带BERT功能或者内建误码统计寄存器直接用AXI4-Lite读寄存器就行。我的记录是近端回环通过之后接外部回环如果外部回环失败先查参考时钟相位噪声和电源纹波大概率是模拟域的问题。4.2 常见问题速查表与排查逻辑调试期间我整理过一份问题对照表这里分享核心条目现象排查方向对策TX Ready始终不拉高参考时钟是否有效、复位时序是否正确检查参考时钟引脚供电和频率实测检查复位释放顺序RX Ready偶尔掉电CDR失锁、参考时钟相位噪声大换高质量参考源调整RX均衡参数接显示器无图像协议层链路协商失败用HDMI分析仪看TMDS时钟是否建立排除PHY问题图像有雪花点信号质量问题或通道对齐失败查线缆长度、连接器焊接调整EQ增益颜色错乱RGB转BGR数据通道映射错误或位序错误回读寄存器确认channel mapping和bit ordering图像偶发撕裂跨时钟域处理不当或弹性缓冲溢出检查rxoutclk域逻辑确认缓冲深度设置4K分辨率下时序收敛失败并行数据位宽过窄导致并行时钟过高改用4字节位宽降低并行时钟频率其中RX通道对齐失败是我见过最多的问题。HDMI因为同时有3个数据通道如果通道间因为PCB走线长度不同导致偏斜IP里的通道对齐逻辑需要在comma字符或对齐字符上做de-skew。如果PCB走线等长控制没做好或者IP配置里关闭了通道对齐就会出现比较稳定的花屏现象。解决思路是走线等长尽量控制在5mil以内IP内部必须开启通道对齐功能。4.3 搭配ILA观测的实测技巧调试时没有好的观测手段基本等于摸黑开车。ILAIntegrated Logic Analyzer是FPGA调试的主力工具。但要注意ILA不能直接挂到GT的高速模拟信号上你能观测的是并行侧数据通路。我的做法是在Video PHY IP输出到上层协议逻辑的接口处把数据总线和几个关键状态信号引出来连到ILA。比较推荐监控的信号包括txuserrdy、rxuserrdy、txdatavalid、rxdatavalid、以及通道对齐信号。触发条件可以设为RX Ready下降沿这样一旦链路断开就能抓到断链前的最后状态。延时方面ILA插入会占用部分布线资源和时序余量如果发现插入ILA后原本正常的图像开始出现问题多半是ILA本身的时序问题改变了整体时序。这时候可以把ILA的采样深度改小或者把采样时钟改为更慢的调试时钟很多时候能缓解。4.4 一个很隐蔽的坑复位时序Video PHY的复位逻辑比普通模块严格得多。GT收发器要求复位信号在参考时钟稳定后释放如果参考时钟还没稳定就撤复位收发器内部PLL可能锁到错误频率之后怎么配置都白搭。很多IP提供PLL锁定状态和Reset Done信号以上升沿为准做后续操作。我养成的习惯是所有时钟就绪信号先同步到目标时钟域再用于复位释放且释放过程要保证至少经过两个时钟周期。不要偷懒直接把全局复位接到IP的复位端。还有一点有些FPGA上电后GT的参考时钟并非立即稳定特别是用了外置可编程晶振的板子晶振配置需要时间。这时候必须等一个固定延时再加断言复位释放。我一般用计数器延时至少10ms然后再检查PLL锁定状态双保险。5. 关于时钟方案和PCB布局的额外提醒5.1 参考时钟决定成败HDMI PHY的参考时钟是整个链路的基石。它的频率稳定度和相位噪声直接影响CDR工作。我实测过两种情况同一块板子用普通有源晶振和用低相噪晶振做参考时钟前者在1080p60时偶尔出现像素错误后者长时间稳定差异非常大。选择参考时钟时优先考虑低抖动LVDS或LVPECL差分晶振频率尽量选整数倍相关的值比如100MHz、125MHz或150MHz。PCB设计时参考时钟走线尽量短并且远离其他数字信号用地包围起来。切忌用普通GPIO翻出来的占空比不完美的时钟当GT参考时钟。5.2 电源纹波对PHY的影响高速收发器对电源敏感是公开的秘密。GT收发器通常需要独立的模拟电源和数字电源。HDMI PHY出问题十有八九是电源纹波超标。我之前一块板子HDMI输出在高温环境下出现不定时闪屏排除了逻辑和配置问题后用示波器量GT的模拟电源发现纹波接近50mV高于规格。后来在电源输出端增加了一级LC滤波把纹波压到20mV以下闪屏问题消失。结论是GT的模拟电源设计要独立LDO至少也要在磁珠加电容阵列不要和FPGA其他逻辑共用一个开关电源。5.3 PCB等长和阻抗控制到了5.94Gbps这个速率PCB设计已经进入高速领域。HDMI差分对必须做100欧姆差分阻抗控制线宽线距按叠层阻抗计算。三对数据线和一对时钟线的组内等长要严格误差控制在5mil以内组间误差可以放宽到10-20mil因为IP内部有对齐机制。如果PCB已经定型没法改走线等长那就只能在IP里通过调整RX通道对齐的方式做补偿。但这里我只能说“可以尝试”因为补偿范围有限最终效果取决于偏斜量大小不超过一个UI才有把握。远超一个UI的话神仙难救只能改板。6. 我在实际项目中的一点体会Video PHY Controller IP这个东西看起来是个配置工具用起来也像个配置工具但真正把它用明白的人通常都懂一点GT收发器的基础原理。我建议刚接触这个IP的工程师抽出一天时间把对应FPGA平台的GT用户指南翻一遍不用全懂至少要搞清楚PRBS、CDR、PMA回环、PCS回环这几个概念。配合HDMI标准里TMDS编码的基本概念排查问题时思路会清晰很多。另外做视频项目时不管需求多急我都坚持先在方案阶段把分辨率和像素时钟算清楚再决定选什么档位的FPGA和收发器。一来可以避免选型错误导致后面积重来二来配置IP时心里有底填参数时不会发怵。这个Video PHY Controller IP后续还能做不少扩展比如在同一个GT上复用DisplayPort、或者利用IP的Duplex模式做双向视频端口。如果能顺手把上层的HDMI Controller协议逻辑吃透整个视频通路从逻辑到物理就不再是黑盒了。到时候再遇到类似的项目你会发现自己不仅能改参数还能真正判断问题出在哪个环节。
返回列表