1. HDMI概述
各位同学好,我是你们的FPGA讲师。今天咱们聊聊HDMI。说实话,HDMI这玩意儿在FPGA开发板上太常见了。我最早接触HDMI还是十年前做视频采集卡的时候,那时候HDMI 1.4刚普及,4K还是个新鲜词。现在呢?HDMI 2.1都出来了,8K 60Hz都能跑。
这一章,咱们把HDMI的底裤扒干净。从标准演进到接口类型,从TMDS编码到和DP、VGA的对比,全给你讲透。
1.1 HDMI标准演进:从1.0到2.1
HDMI标准从2002年发布到现在,经历了十几个版本。我整理了一张表,你看一眼就明白了。
| 版本 | 发布时间 | 最大带宽 | 最大分辨率 | 主要特性 |
|---|---|---|---|---|
| HDMI 1.0 | 2002年 | 4.95 Gbps | 1080p @ 60Hz | 基础数字音视频传输 |
| HDMI 1.3 | 2006年 | 10.2 Gbps | 1440p @ 60Hz | 深色技术、无损音频 |
| HDMI 1.4 | 2009年 | 10.2 Gbps | 4K @ 30Hz | 以太网通道、ARC音频回传 |
| HDMI 2.0 | 2013年 | 18 Gbps | 4K @ 60Hz | HDR、32声道音频 |
| HDMI 2.1 | 2017年 | 48 Gbps | 8K @ 60Hz / 4K @ 120Hz | FRL模式、动态HDR、eARC |
你可能会问:为什么带宽涨了这么多?说白了,分辨率上去了,像素时钟就跟着涨。1080p的像素时钟才148.5 MHz,到了4K 60Hz就变成594 MHz了。8K 60Hz?直接飙到2376 MHz。不升级带宽根本跑不动。
关键点:HDMI 2.1最大的变化是引入了FRL(Fixed Rate Link)模式,取代了传统的TMDS编码。FRL模式下,数据通道从3条变成4条,每条速率最高12 Gbps。嗯,这里要注意:FPGA实现HDMI 2.1的FRL模式非常复杂,目前主流方案还是用专用芯片。
1.2 HDMI接口类型:A/B/C/D/E
接口类型这块,我估计你见过最多的就是Type A。但做FPGA开发板设计时,Type C和Type D也经常用到。我简单说一下区别。
- Type A(标准型):19针,宽13.9mm。台式机、显示器、电视上最常见。引脚间距1.0mm,手工焊接还算友好。
- Type B(双链路型):29针,基本绝迹了。当年为了支持高分辨率设计的,后来被HDMI 1.3的单链路10.2 Gbps干掉了。
- Type C(迷你型):19针,宽10.42mm。相机、平板电脑上用得多。引脚间距0.8mm,焊接要小心。
- Type D(微型型):19针,宽6.4mm。手机、便携设备上用。引脚间距0.4mm,我建议你直接买转接板,别自己焊。
- Type E(汽车型):19针,带锁扣。车载娱乐系统专用,抗震防脱落。
实战建议:做FPGA开发板时,我个人习惯用Type A接口。原因很简单:好买、好焊、好测试。Type C虽然体积小,但引脚间距小,手工焊接容易短路。我曾经在一个项目里为了省空间用了Type C,结果焊接良率只有70%,后来乖乖换回Type A了。
1.3 TMDS编码原理
TMDS(Transition Minimized Differential Signaling)是HDMI 1.0到2.0的核心编码方式。说白了,就是把8位数据编码成10位,目的是减少信号跳变次数,降低电磁干扰。
编码过程分两步:
- 第一步:XOR/XNOR编码。把8位数据转换成9位,尽量减少跳变。具体来说,如果数据中1的个数多,用XNOR;0的个数多,用XOR。
- 第二步:DC平衡。第10位用来控制直流平衡,保证传输的0和1数量大致相等。
我画了个流程图,帮你理解TMDS编码的完整过程。
你可能会问:为什么非要编码成10位?直接传8位不行吗?
不行。原因有两个:
- 时钟恢复:8位数据里可能出现连续多个0或1,接收端没法恢复时钟。编码后保证了足够的跳变。
- EMI控制:减少跳变次数,电磁干扰就小了。这在高速传输中特别重要。
避坑指南:我曾经在一个项目里,TMDS编码的DC平衡逻辑写错了,导致画面出现水平条纹。查了两天才发现是第10位极性判断反了。所以写编码器时,一定要仔细核对DC平衡的累加器逻辑。
1.4 HDMI与DP/VGA对比
做FPGA开发板,你迟早要面对接口选型的问题。我直接给你对比一下。
| 特性 | HDMI | DisplayPort | VGA |
|---|---|---|---|
| 信号类型 | 数字(TMDS/FRL) | 数字(微包架构) | 模拟(RGB+同步) |
| 最大带宽 | 48 Gbps(2.1) | 80 Gbps(2.1) | 约 400 MHz 像素时钟 |
| 最大分辨率 | 8K @ 60Hz | 16K @ 60Hz | 2048×1536 @ 60Hz |
| 音频传输 | 支持 | 支持 | 不支持 |
| FPGA实现难度 | 中等(有IP核) | 较高(协议复杂) | 低(DAC+同步) |
| 应用场景 | 消费电子、开发板 | PC、专业显示器 | 老旧设备、教学 |
我个人建议:做FPGA开发板时,优先选HDMI。原因很简单:
- HDMI的IP核成熟,Xilinx和Intel都有现成的。
- HDMI接口普及率高,随便找个显示器就能测试。
- VGA虽然简单,但模拟信号容易受干扰,分辨率也上不去。
小技巧:如果你的FPGA开发板同时有HDMI和VGA接口,可以用VGA做调试,HDMI做最终输出。调试时VGA的模拟信号更容易用示波器抓波形。我当年调试TMDS时钟时,就是先用VGA确认了像素时钟正确,再切到HDMI的。