HDMI/DVI
一.基础知识
1.历史
早期在FPGA芯片上实现HDMI控制显示是使用HDMI发送芯片,eg:ADV7513,sil9022,CH7301等。用之前VGA控制中输出的RGB信号,行场同步信号和使能信号输入到HDMI芯片中处理再输出。
为了节省I/O引脚资源,直接在FPGA上设计HDMI时序并直接连接HDMMI接口。
2.接口比较
①HDMI/DVI
HDMI可以传输音频信号。
HDMI兼容DVI,可通过转换接口将信号接到DVI接口。
②HDMI/VGA
VGA收发都需要数模转换器,传输信号:数字信号 -> 模拟信号 -> 模拟信号 -> 数字信号。
HDMI只需数据收发器,传输信号:数字信号 ->数字信号 ->数字信号 ->数字信号
HDMI采用差分传输,抗干扰能力强,而VGA经历数模转换,当数据变化太快时(颜色变化较大的边界),会出现拖影现象:后一个像素的图像数据可能无法真正显示其想显示的颜色,而是介于 需要显示的颜色和前一个像素的颜色之间的一种颜色。此外会因为抗干扰能力弱,出现杂点。
3.显示原理
HDMI/DVI的编码解码流程如下:我们需要设计的是编码和串行发送,由显示器来解码提取信息。
输入接口层:RGB[23:0],行场同步信号数字接口。(即类似于VGA的输出信号)。
TMDS发送器:对输入的信号进行TMDS编码。经过高速串口输出(4个串口通道)
TMDS接收器:接收,解串,解码,得到RGB行场同步数字信号。
输出接口层:RGB行场同步信号数字信号输出到显示器。
VGA:采用逐行显示(也可以说是逐点显示),随着时钟周期输出每一个像素点的[23:0]RBG值和行场同步信号。
HDMI/DVI:在VGA的基础上采用了TMDS编码方式(减少电磁干扰,增强DC平衡),用差分信号输出。具体操作为:对VGA控制器输出的RGB[23:0]和行场同步信号,分成RGB三个通道和一个同步时钟CLK通道进行TMDS编码器进行编码,然后经过串行发送器把编码值转化为串行数据,分成4个通道输出(也就是8条差分线)。
HDMI/DVI设计:①d_e为高电平时,对RGB数据进行编码,低电平时对同步信号编码。②从VGA控制器输出来看,每个时钟周期会输出一个RGB像素值,而我们的目的是在一个周期内既传输RGB又传输同步信号,所以得在一个周期内让d_e半个周期为1(传输RGB),半个周期为0(传输同步信号),(跟时钟一样),所以VGA的时钟频率应该是HDMI/DVI的二分之一。
3.1框图
3.2.TMDS编码(过渡调制差分信号):一种编码方案
目的:实现最小化传输
Ⅰ.最小化传输
定义:通过对输入的一组数据处理,得到一组跳变次数最少的数据(跳变指:相邻数据为01或10)。
意义:消除电磁干扰(使得HDMI/DVI抗干扰能力强)。(信号跳变会产生磁场,对信号线有电磁干扰)。
实现:TMDS编码。
Ⅱ.直流平衡(DC)
定义:信号在传输中0和1的数据个数相同。
意义:避免收发方有直流电,防止电压不稳引起的问题。
实现:利用上一组数据编码后的极性来指导本组数据的编码,控制0和1数据的平衡。(极性指示0/1数量)
未解的疑惑: de=0时才传输同步信号,那么就得用两个周期来传输一个周期就要传完的数据? 先不管(暂时的想法是:时钟可以控制的嘛,DE也是由VGA控制产生,2倍时钟关系即可解决)
3.3串行差分信号发送
编码后的信号,要经过串行发送器处理,把并行数据转换为串行数据,并设计两路差分信号发送,增强抗干扰能力。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)