DVI(Digital Video Interface)接口[1-3]是由数字显示工作组在1999年制定的,利用最小变换差分信号TMDS作为基本电气链接信号。图像源生成的3路红、绿、蓝信号和控制信号在时钟的作用下由DVI发送器进行编码并串行化后,通过TMDS通道发送给DVI接收器;DVI接收器对其进行串/并转换、通道对齐、解码等一系列处理后发送给显示设备,如图1所示。DVI接口传送的是数字信号,因此可以减少模/数转换的成本,节约时间,速度更快,加之它与HDMI在电气特性上完全兼容,因此升级更容易。DVI链路结构如图1所示。
DVI在高速串行远距离传输后进行接收,常规做法是用接收芯片与FPGA相结合来进行接收,但在用FPGA进行视频信号处理的场合无疑会增加系统功耗和成本。因此,提出一种充分利用FPGA自身资源来实现DVI接收的方法,即采用内置TMDS I/O电气接口的FPGA芯片而无需外接专用芯片来实现TMDS连接,加之FPGA的可编程性,可使用户快速实现设计,从而缩短设计周期。
DVI的单TMDS只提供24 bit色深,当用户要求色深超过24 bit时,并且系统已经确认显卡和显示器都支持双链路TMDS,此时系统会启动双TMDS链路,链路0(数据通道1~3)传输24 bit信息,其他颜色信息由链路1(数据通道4~6)传输。当用户的分辨率和刷新率要求超出单TMDS链路的传输能力时(单链路的最高像素传输频率为165 MHz),系统会启动链路1,并定义显示器上每一行的第一个像素为1,奇数像素。链路0用来传输奇数像素信息,链路1用来传输偶数像素信息。由于TMDS链路共用一条时钟回路,所以双链路工作时,链路的时钟频率为像素数据带宽的一半。
DVI编码器在时钟驱动下, 利用TMDS编码方式对8 bit像素信号和2 bit控制信号分别进行8 bit转10 bit和2 bit转10 bit编码,最低有效位先送出。这种编码方式充分体现了TMDS 的两大优势,即:变换次数最小化和直流均衡作用。
1 接收器设计
1.1 系统架构
DVI接收器的系统结构包括电平转换、时钟恢复、相位调整、串/并转化、字对齐、通道对齐、解码等几部分组成,由TMDS通道传输过来的串行信号最终被转化成3路8 bit的像素信号和2 bit的控制信号,如图2所示。
1.2 时钟恢复和相位调整
时钟与同步是DVI接收器设计中非常重要的一步,以DVI信号提供的像素时钟为参考时钟,在TMDS通道上传输的串行数据的时钟为参考时钟的10倍,在接收端采样时要用倍频后的速率进行采样。文中这几个时钟信号由PLL电路产生,采用DDR[4]的方式采样数据,可实现两倍于以往的串行数据传输速率,因此只需将参考时钟5倍频即可,这样可降低器件成本。
DVI信号在经过长距离传输后,数据与采样时钟的相位不确定性很大,有较大的相位偏移,对正确采样有很大的影响,因此需要进行相位调整[5]。利用FPGA IO 接口模块内置的IODELAY[4]模块,在算法上利用状态机动态调整串行数据的延时来获取最佳的数据采样时刻。由于之前已可用DCM来实现相位调整,IODELAY模块与DCM模块相比较,其缺少两个输出,分别为DCM的psdone和DO[0],因此给IODELAY模块模拟两个输出psdone和DO[0],在调用IODELAY模块的代码中依照它们在DCM中的时序来编写代码,完成在IODELAY中相同的功能。其中psdone相当于DCM模块中的psdone,表示一级调整的完成;DO[0]相当于DCM中的DO[0],表示调整级数超过63级时溢出,用这两个输出送到相位调整算法的状态机上来实现动态调整。由于通过TMDS通道传输的视频数据是随机的,但4个控制字是周期发送的,因此可以用来检测时钟相对于数据的位置。如果收到4个控制字之一, 就认为数据有效。如图3所示,串行数据的两个采样窗口之间是抖动区域,抖动区域描述了时钟和数据在传输边沿的到达时间不确定性,有效采样的部分称作窗。为保证有效采样,采样时钟必须调整到窗的中心。
相位调整算法如下:
(1)如果时钟的初始位置在S2处,则增加IODELAY的相位偏移值至T1并记录下来,再增加相位偏移值至T2并记录下来,(T2-T1)/2即为最佳的采样时刻。
(2)如果时钟的初始位置在S1处,则增加相位偏移至S2处,即从下一个抖动区开始,同步骤(1)分别增加相位偏移至T1、T2记录,则(T2-T1)/2为最佳的采样时刻。
相位调整亦可通过DCM模块来实现,不需要额外模拟输出信号。与通过DCM模块来实现相位调整不同的是,IODELAY实现相位调整时是数据在移动,而DCM则是时钟在动。利用IODELAY可以节约FPGA内的DCM和BUFG资源,但需要额外提供200 MHz的工作时钟,且IODELAY模块的相位调节步长和幅度是固定的,对于较低频率的DVI数据,可能无法完成采样窗口扫描。
1.3 数据串/并转换
利用FPGAIO接口模块内的ISERDES[5]完成串/并转换,与用一系列寄存器完成串/并转换相比,避免了时序混乱且节约资源。要实现1:10串/并转换,需要将两个ISERDES串接起来,即将一个设置为主ISERDES,一个设置为从ISERDES,然后将主ISERDES的输出SHIFTOUT1、SHIFTOUT2连接到从ISERDES的SHIFTIN1、SHIFTIN2上,如图4所示。
串/并转换后还需进行字对齐,ISERDES本身的BITSLIP可完成字对齐,但速度较慢,所以利用多路选择器逻辑来完成,如图5所示。其核心思想依然是靠检测控制字将经过串/并转换后的两次原始10 bit数据rawword[9:0]并接组成20 bit rawwords[19:0],然后依次检测rawwords[9:0]、rawwowds[10:1]、…rawwords[18:9]、rawwords[19:10]是否与控制字相等,若检测到相等,则必为rawwords[9:0]、rawwowds[10:1]、…rawwords[18:9]、rawwords[19:10]之一,之后即可通过多路选择器选出具有正确高低字节的数据输出。
1.4 通道对齐
每个通道会收到一个来自于相位调整状态机的表示字对齐后的数据是否为有效的信号,如果3个通道都有效,则通道对齐模块内的FIFO缓存器开始传送数据,不断地写入和读出。FIFO是一个16 B深度的分布式RAM资源,当一个通道的FIFO输出检测到控制字时,则该通道的读出数据流被延迟,仅当另外两个通道检测到控制字时才恢复,这样可消除通道延迟。
1.5 DVI解码
在经过通道对齐后,通过DVI解码规则可解出8 bit数据信号和2 bit控制信号,解码规则如下:DE=0(消隐期)解出2 bit的控制信号,DE=1解出8 bit的像素信号。
2 仿真结果
本设计在modelsim6.5版本上进行仿真[6],功能仿真如图6所示。用H264E_VDATA文件作为Y、U、V源文件,用它产生R、G、B信号,经过发送端到达接收端时,接收端的输入信号为图中的TMDS差分信号blue_p、blue_n、green_p、green_n、red_p、red_n和时钟tmdsclk_p、tmdsclk_n。输出信号为3路8位的R、G、B信号blue_out、green_out、red_out和一路的时钟恢复信号pixel_clk及控制信号hsync、vsync、de。
此设计在Xilinx公司的Virtex5-330T FPGA上得到验证。资源利用情况如表1所示。受限于FPGA内PLL模块的最高输出主频450 MHz,所以主时钟工作频率为90 MHz,即TMDS串行输入数据的理论最高速率为900 Mb/s。
实际测试使用PC机显卡输出的DVI信号源,DVI传输线长1 m,点频74.5 MHz,视频分辨率1 280×720。接入FPGA后DVI信号解码正确,输出的并行视频数据接入FPGA内的视频处理模块后,可采集得到正确的动态视频画面,且画面清晰无噪点,证明了文中方法的可行性。
本文讨论了一种符合DVI1.0规范的、基于FPGA的DVI接收器设计与实现方法。经验证可得,此方法可用于DVI视频的接收解码,尤其是在利用FPGA进行DVI解码设计时,可减少资源消耗,提高集成度,充分利用FPGA自身资源实现。
参考文献
[1] 王春军,潘昉晟.DVI接口在嵌入式系统中的应该[J]. 计算机工程,2005,31(20):207-208.
[2] 尹淑仙,徐火生.DVI核心技术剖析与逻辑实现[J].液晶与显示,2007,22(6):765-769.
[3] 冯永茂,王瑞光,丁铁头.数字视频接口-DVI1.0[J]. 电子技术应用,2003,29(9):10-14.
[4] Xilinx. Virtex-5 FPGA user guide[EB/OL].(2009-03-19)[2013-06-01]http://www.xilinx.com.
[5] FENG B, CRABILL E. Video connectivity using TMDS I/O in Spartan-3A FPGAs[EB/OL].(2008-07-25)[2013-06-01]http://www.xilinx.com.
[6] Xilinx. Virtex-5 libraries guide for HDL designs[EB/OL].(2009-09-16)[2013-06-01]http://www.xilinx.com.