HDMI_FPGA实现4K60TMDS编码解码之一

hdmi1.4 tmds编码解码原理

一个HDMI包括三个TMDS 数据通道和一个 TMDS 时钟通道(像素时钟),如图所示

每一个 TMDS 时钟周期内,TMDS 数据通道上会发送一个 10 位的字符信息。

信号源编码逻辑的输入数据包括控制周期,数据岛周期,视频像素周期,编码器将 2 位的控制数据、4 位的数据岛数据、8 位的视频数据采取不同的编码方式编码成 10位数据

HDMI_FPGA实现4K60TMDS编码解码之一_第1张图片

 

三个周期编码类型:

视频像素周期:TMDS视频数据编码,控制周期:控制周期编码,数据岛周期:terc编码

HDMI_FPGA实现4K60TMDS编码解码之一_第2张图片

 

TMDS视频数据编码:TMDS视频数据编码(TMDS Video Data Coding)是将像素的8位数据转化成10个位的字符,但他不是主流的8b/10b编码方式。其编码需两道过程:首先将8位转换到9位,将位的转换最小化。转换最小化可以降低铜连接线环境的电磁干扰(Electromagnetic Interference)。其次,产生10位来造成直流平衡化理想的字符。

TMDS视频数据编码算法过程如下:

HDMI_FPGA实现4K60TMDS编码解码之一_第3张图片

 

TMDS编码算法可分为两个阶段:(引用)

1) 第一阶段是将输入的D【0:7] 变换成最小变换码

q_m[ 0:8] ,其中第9位( q_m【8] ) 指示运算的方式,若是采

用异或运算( XOR) 取1,采用同或运算( NXOR) 取0。

这里用3个8位数来举例:

当D[ 0:7] ==10111010时,q_m[ 0:8]=100001100;

当D[ 0:7] ==10101000时,q_J Il [ 0:8】_1 1001 1 11 1;

当D[ 0:7]=-- 00101 101时,q_m[ 0:8] =01 10001 10。

从这3组数据可以看出,经编码后的数据比原始数

据具有更少的跳变( 这里的跳变是指0和1之间的跳

变) ,采用最小变换码进行编码的目的是为了提高数据在

线缆中传输的稳定性。

2) 第二阶段是将9位的最小变换码( q_m【0:8】) 变换

成10位的直流平衡码( q_out [ 0:9] ) 。如果编码中的1和0

的数量相等,则低8位( q_out [ 0:7] ) 由q_m[ 8] 决定,若

q m[8] 为1,低8位原样输出q_out [ 0:7] =q—m【0:7】,否则取

反,第10位q_out [ 9] =- q_m[ 8】;若q' m[ 0:7】有过多1(O)

且上次的编码数据中有过多1( 0) ,则低8位取反,并且

第10位取1;否则低8位原样输出,并且第l O位取0。不

论是何种情况,输出的第9位q out [8] =q m[ 8] 。

TMDS视频数据解码算法过程如下:

 

HDMI_FPGA实现4K60TMDS编码解码之一_第4张图片

 

 

 

控制周期编码:2位控制数据编码为10位,

HDMI_FPGA实现4K60TMDS编码解码之一_第5张图片

 

terc编码:4位数据编码为10位

HDMI_FPGA实现4K60TMDS编码解码之一_第6张图片

 

下图为一帧视频各个周期的分布:灰色为视频像素周期,浅灰色为控制周期,深蓝色为数据岛周期,区分数据岛周期和视频像素周期采用ch1ch2 控制周期ctl0,ctl1,ctl2,ctl3组成的8个前导码,视频像素周期前导码为ctl0,ctl1,ctl2,ctl3=4‘b1000,就是说解码中出现8个ctl0123=4‘b1000就说明接下来的数据周期为视频像素周期,数据岛周期一样,数据岛周期前导码为ctl0123=4‘b1010

 

HDMI_FPGA实现4K60TMDS编码解码之一_第7张图片

 

再者数据岛和视频像素周期开始前有2个字付的保护带,数据岛周期结束也有2个字付的保护带,频像素周期结束没有字付的保护带

视频像素周期保护带:

HDMI_FPGA实现4K60TMDS编码解码之一_第8张图片

 

数据岛周期保护带:

HDMI_FPGA实现4K60TMDS编码解码之一_第9张图片

 

数据岛周期包括音频数据包以及激活视频信息的视频辅助数据包(其中avi信息帧时激活hdmi模式的辅助包必不可少,avi信息帧参考CEA-861-D)3条tmds数据通道数据岛封包下图所示:

 

HDMI_FPGA实现4K60TMDS编码解码之一_第10张图片

具体封包解包参考hdmi1.4规范

你可能感兴趣的:(fpga)