HDMI介绍
HDMI是新一代的多媒体接口标准。
high definition multimedia interface 高清多媒体接口
能够同时传输视频和音频,简化了设备的接口和连线。能够提供更高的数据传输带宽,可以传输无压缩的数字音频及高分辨率视频信号。
bps: 每秒传输多少bit数据 数据带宽
HMDI和DVI DVI&HDMI接口
HDMI 向下兼容DVI。
DVI 数字视频接口,只能用来传输视频,而不能同时传输音频。
DVI和HDMI 接口协议在物理层 均使用TMDS标准传输音视频数据。
TMDS标准
最小化传输差分信号,TMDS是一项高速数据传输技术,在DVI和HDMI视频接口中使用 差分信号 传输高速串行数据。
TMDS差分传输计数使用两个引脚来传输一路信号,利用两个引脚间的电压差的正负极值和大小 来决定传输数据的数值。0或1
DVI或HDMI视频传输所使用的的TMDS连接通过四个串行通道实现。
同时传输 blue green red三个通道,时钟信号通道。 四个通道
DVI: RGB 444
HDMI: RGB 444
YCrCb 444
Ycrcb 422
独立的TMDS时钟通道为接收端 提供接收的参考频率,保证数据在接收端能够正确恢复。
图像格式:
1 RAW
图像传感器中,感光阵列由红,绿,蓝三种感光点组成,假如这种每个感光像素点转换成数字信号后直接输出就得到了RAW格式的图像数据。
这种数据保留了很多原始信息,数据量大。保存了更多的细节。
2 RGB
RGB是RAW格式经一系列处理后得到的图像格式,三原色组合的图像格式。
3 YCrCb 即YUV
YcrCb,Y代表亮度分量 灰度值,Cb代表蓝色色度分量,Cr代表红色色度分量。
Ycrcb 分为444 和442.
YUV 中Y代表明亮度,也就是灰度值。 U和V代表色度描述色彩和饱和度。色度定义了颜色的两个方面,色调和饱和度。 Cr反映了RGB输入信号红色部分和RGB信号亮度值的差异。Cb反映了RGB输入信号蓝色部分和亮度值之间的差异。
TMDS连接在逻辑功能上分为两个阶段 编/解码 和并串转换。
编码阶段,编码器把视频源中的像素数据,HDMI的音频数据,,行场信号编码为10位字符流。
串并转换阶段将10位字符流转化为串行数据流,并将三个差分输出通道发送出去。
DVI编码 只有HDMI有音频通道
DVI编码机制
传输视频图像过程中,数据通道上传输的是编码后的有效像素字符。
每一帧图像行与行间,以及视频不同帧之间的时间间隔 消隐期,数据通道上传输的则是控制字符。
每个通道上有两位控制信号的输入接口,提供四种不同控制字符。 这些控制字符提供了视频的行同步以及场同步信息,在蓝色通道传输。
HDMI编码
编码机制
HDMI传输的消隐期除了控制字符外,还可以用于传输音频或者附加数据,比如字幕信息。
TMDS为视频编码。
4bit的音频和附加数据 通过TERC4编码机制转换成10bit的TERC7字符,在红色和绿色通道行传输。
在蓝色通道传输的是行场同步信号。
DVI编码器
VDE 用于各个通道选择输出视频像素数据 还是控制数据。
HSYNC和Vsync 信号早蓝色通道进行编码得到10位字符,然后在视频消隐期传输。 VDE=0时候
绿色和红色通道的控制信号C0和C1同样需要编码,并在消隐期输出。
每个通道输入的视频像素值都要使用 DVI规范中的TMDS编码算法进行编码。
TMDS编码算法:
TMDS和LVDS、TTL相比有更好的电磁兼容性能。
这种算法可以减少传输信号过程的上冲和下冲。 可以用低成本的专用电缆实现长距离、高质量的数字信号传输。
每个通道的8bit像素数据都被转换成460个特定10bit字符中的一个。
这种编码机制大致上实现了传输过程中的直流平衡。
视频字符和控制字符 状态跳转次数 的不同 将会被用于发送和接收设备的同步。
HDMI模块框图:
HDMI source 发送端:
TMDS四路信号,三路数据一路时钟。
CEC line: 用户电气控制
EDID: 扩展显示 标识数据
DDC: 可以理解为IIC通信。
HDMI引脚定义
数据和时钟均为差分信号。 TMDS
CEC用户电气控制 SCL和SDA 时钟和数据 IIC的信号线。
地线和电源。
热拔插检测: 换设备时候通过读取EDID,重新对设备连接进行配置。
硬件设计:
TMDS的数据通道和TMDS的时钟通道。
如果只用视频传输可以用DVI来代替HDMI。
HDMI彩条显示实验
驱动ZYNQ上的HDMI接口显示彩条图案。
视频显示产生视频图案,视频驱动产生一个驱动时序,转换为DVI接口时序。
行同步和场同步:
消隐期和边界 有效数据 边界和消隐期
场扫描周期以行扫描周期为单位。
常用显示器时序参数:
分辨率 像素时钟 行时序 帧时序
HDMI模块设计
1产生 rgb hsync vsync de clk信号
2 产生串行10位数据 hdmi控制模块
hdmi控制模块
分两部分:
1: 8bit - 10bit 编码过程
2:10bit并行数据到差分数据串行 转换
1: 8bit - 10bit 编码过程
2:10bit并行数据到差分数据串行 转换
par_to_ser模块并转串需要调用四次,三次数据一次时钟。转换为差分信号。
encode:调用三次
子模块:encode编码模块
可以直接使用XILINX官方文档程序,TMDS编码。
encode.v
TMDS编码
子模块:par_to_ser模块
三部分组成:
并行 - 串行
单端 - 差分
单沿采样 - 双沿采样
使用ip核: ALTDDIO_OUT可以将单沿信号变为双沿信号。
ALTDDIO_OUT属于DDR双倍数据速率一部分
Double DATE rate:双倍速率的含义是在时钟的上升沿和下降沿采样。
并行数据 - 串行数据 转换部分
10 bit的数据 奇数位下降沿发送5位宽 偶数位上升沿发送5位宽。 而ip核为1位宽。
数据做处理:
通过计数器控制数据移位,完成数据更新。 通过五位的数据移位,完成一个时钟周期一位。 五个时钟周期后传入新的数据。
通过这种方式可以完成串行数据10bit传递。
奇数位偶数位都采用这种方法。
640x480分辨率时钟为25M,我们这里使用125M时钟,完成10bit并行数据转换成10bit串行数据,我们要10倍的速率完成数据同步。而单双沿信号检测,故使用5倍的时钟信号即可,125M。
移位操作:
wire [4:0] data_rise = {data_in[8],data_in[6],data_in[4],data_in[2]};
wire [4:0]data_fall = {data_in[9],data_in[7],data_in[5],data_in[3]};
reg [4:0] data_rise_s = 0;
reg [4:0] data_fall_s = 0;
always@(posedge clk_5x)
begin
//cnt 计数范围为0-4,以最高位作为判断
cnt <= (cnt[2] == 1'b1) ? 3'd0 : cnt +1'b1;
//高四位给低四位,实现移位。新数据更新或者移位
data_rise_s <= (cnt[2] == 1'b1) ?data_rise: data_rise_s[4:1];
data_fall_s <= (cnt[2] == 1'b1) ?data_rise: data_rise_s[4:1];
end
通过移位寄存器和 ALTDDIO_OUT ip核完成了 并行到串行,单沿到双沿信号的处理。
单端到差分 部分
单端输入指信号有一个参考端和一个信号端构成,参考端一般为地端,差分是将单端信号进行差分变换,输出两个信号,一个和原信号同相,一个和原信号反相。
差分信号两根线传输,对单端信号取反,然后分别传输。
单端使用一个线传输 电压值超过一个信号阈值为1,低于为0.
故例化两个ddio_out 模块,将第二个模块信号取反,第一个ip核输出为ser_p,第二个模块输出ser_n。
完成hdmi控制模块
encode模块例化三次 分别对应红绿蓝三部分。
并行到串行模块实例化四次。
总的框图:
vga_ctrl:
vga_pic:图像数据生成模块 pix_data 图像数据
clk_gen: 可以调用ip核 PLL锁相环。输出25M工作时钟vga_clk 640x480,再生成一个125M时钟 clk_5x
例化vga_pic图像数据生成模块,vga_ctrl vga控制模块生成行场同步信号,图像有效信号等。 实例化hdmi_ctrl控制模块。
HDMI连接器
8路信号为4个 差分对 还有两个ddc的scl和sda信号,共10路信号。scl和sda信号为高电平。