使用Xilinx FPGA完成HDMI LOOPBACK回环显示设计(一)
1-1概况说明
HDMI(High Definition Multimedia Interface)显示端口因其高分辨率高帧率的显示性能,成为当今电子设备中主流的视频显示接口.最新的HDMI2.1规范可以支持到4K@120Hz及8K@60Hz,这个规格可以满足大多数高清视频传输或高端显示器的要求.从硬件设计的角度讲,HDMI总线是标准的高速信号.其包含四组差分信号,在设计时关注PCB阻抗匹配,组间串扰,以及组间的线长匹配.从信号协议的角度讲,其四组差分信号包含一组时钟源及三组视频(及音频)数据(本实验使用的RGB数据格式),属于源同步信号.数据通道在数据有效区间(DE HIGH)传输视频数据,在Blank period(类似VGA信号border/Blanking区)传输控制及音频信号.从设备连接搭建的角度讲,HDMI一根19PIN的线缆就可传输高清视频/音频,甚至包括控制信号回馈的路径(如CEC PIN),对于用户的使用是很方便的.所以,HDMI端口流行于大多数视频显示设备中.HDMI信号数据的传输与上一章节介绍的VGA有很多类似的概念,通过这两章节的介绍,也可以看出技术的传承与发展.也建议在了解本实验之前先了解一下上一章节的VGA彩条实验.
1-2实验设计
本实验设计为HDMI输入输出回环显示.HDMI信号源(本实验使用开发者的笔记本电脑)通过HDMI线缆连接至开发板上的HDMI IN端口,HDMI IN端口将数据传输至FPGA, HDMI接收模块对其进行串并转换,数据对齐,10B8B解码出像素数据及控制信号.这些解码出的数据发送给HDMI发送模块.HDMI发送模块再将这些像素数据反向操作进行8B10B编码,并串转换后发送给开发板中的HDMI OUT端口,HDMI OUT端口通过HDMI线缆连接至显示器,则显示器可以显示笔记本电脑上的画面.
本实验中没有涉及音频的部分,对于HDMI信号的处理可以简化为DVI协议规范.DVI的协议可以看做是HDMI协议的简化,在CTS认证机构的测试认证中,HDMI端口强制兼容DVI协议,所以使用DVI的协议在HDMI端口时可以被识别的.
本实验说明的1-3/1-4/1-5/1-6章节对同一个概念有不同角度的解释和补充.在阅读时可以前后参考,会更容易理解.
1-3技术背景
(1)HDMI总线框架
[1]DDC通道:DDC通道使用IIC总线协议,用来读取HDMI receiver设备(通常是显示器)的EDID信息.EDID存储HDMI receiver设备支持的显示分辨率,TMDS时钟频率等信息. HDMI source端通过IIC总线读取这个EDID ROM中的内容,就可以知道显示器所能显示哪些图像格式,那么就可以输出相应的信号格式给显示器.本实验中开发板上有一个HDMI receiver端口,按照协议要求,我们需要在FPGA上生成一个ROM IP并存储EDID数据.一般而言,只有正确建立了IIC通信后,才会诱发实验中使用笔记本电脑输出HDMI有效信号.所以,实验中HDMI receiver端的IIC设计是必须的.相对的, HDMI driver的数据传输的主动在FPGA端,没有设计与driver端口的IIC连接,而是直接输出接收到像素数据给显示器.这种做法在很多工厂测试环境中很常用,可以节省不少IIC建立连接的时间.
[2]TMDS通道:共有4组TMDS通道.一组为时钟信号.此时钟为像素时钟,也就是一个时钟周期内,数据通道需要传输一个像素的数据.本实验中像素格式为RGB格式. channel0传输Blue蓝色数据,蓝色像素本身是8bits格式,在进入HDMI通道之前会先经过8B/10B编码,即8bits数据通过一定算法转换成10bits数据.可以看出,时钟通道传输一个像素周期,TMDS数据通道的数据速率传输了10bits,传输速度是10倍的像素时钟.本实验中显示分辨率画面采用和VGA章节中一样的1024*768@60Hz格式,像素时钟为65MHz,所以TMDS数据传输率为650Mbits/s.
[3]图中橘色框中信号本实验不涉及.比如AUDIO数据等.去掉这些设计因素,简化后的框架图就和DVI的协议框图一样了,所以如1-2小节提及,本实验代码以DVI规范进行.
(2)DVI总线框架
[1]GREEN/RED数据通道中的CONTROL信号协议中只是预留,实际不使用.HSYNC/VSYNC行场同步信号编码在BLUE数据通道.
[2]对比HDMI/DVI框架图, DVI协议可以看作简化的HDMI协议.
(3)本实验搭建的框架
[1]结合1-2小节的实验目的描述与DVI架构图,可以做出本实验需要实现的架构图.
[2]左边框图TMDS receiver中分别解码出的三个通道DE.因为经过通道对齐模块,时序完全一致,所以任何一个均可作为右侧框图TMDS transmitter的DE.
[3]1-3-(2)的DVI框图中TMDS receiver右侧有一个模块Inter-channel alignment.意思是数据流先经过10B/8B decode模块,然后将8B格式的数据进行组间对齐后输出.本实验代码的数据流是先对10B格式数据进行组间数据对齐(chnlbond模块/channel alignment),然后进行10B/8B解码.最终的效果是一致的,为了避免误解本实验中数据流,上图中删除了Inter-channel alignment示意模块.
(3)实验顶层hdmi_loopback代码RTL视图
[1]RTL视图中有三个模块,分别为hdmi_receiver, hdmi_driver, iic_control_edid.
从架构图上的信号可以看出,与上一小节中理论分析的框图基本是一致的.
下面再详细介绍一下这些模块的作用.考虑到hdmi_driver的方案比较直接明了,而hdmi_receiver模块的逻辑比较复杂.另外,了解了hdmi_driver的行为,也更容易理解hdmi_receiver各自模块的作用和用意,所以下面先从hdmi_driver模块开始介绍.
(4) hdmi_driver模块
[1] hdmi_driver需要完成哪些任务呢?
<1>hdmi_driver模块输入端的像素数据及行场同步信号是直接由hdmi_receiver解码HDMI信号源而来,其中已经包含符合VESA规范的时序,所以像素数据和HSYNC/VSYNC的时序无需hdmi_driver模块再处理.
<2>输出端是差分串行总线,显然需要hdmi_driver模块把RGB并行数据转换为串行数据,由serializer_10_to_1模块完成.TMDS信号是差分输出,需要使用原语OBUFDS将单端信号变换为差分信号.
<3>从架构上可以看出直接看出以上两点,但作为高速串行的总线,通常还需要对原数据进行编码再进行实际传输,而不是直接传输原数据.HDMI协议使用的是TMDS 8B/10B编码,将每个通道的8bits像素数据通过一定的算法变换成10bits的数据.DVI的协议(PAGE29)及HDMI 1.4B的协议中(page103)都有8B/10B编码的算法流程图,实验中的代码dvi_encode完全按照此流程图编写.
8B/10B编码方案在得到好处的同时,损失了传输效率.因为数据中有2/10=20%的编码损耗.
(现在有一些其他的编码方案效率更高一些,比如USB3.1总线使用128B/132B方案,只有3%的编码损耗).
另外,请留意,这里讨论的8B/10B转换(或10B/8B转换)是tmds协议中定义的转换算法.在DVI协议或HDMI协议中都有完整的转换流程图.业界还有其他的算法进行8B/10B转换(或10B/8B转换),数据的映射关系和tmds算法不同,在处理时不要混淆.
[2]以上概念性的介绍了hdmi_driver个子模块的功能.下一章节1-4中会再详细的介绍verilog代码.
下一章节将更新hdmi_receiver和iic_control_edid的介绍.