1)实验平台:正点原子领航者ZYNQ开发板 2)平台购买地址:https://item.taobao.com/item.htm?&id=606160108761 3)全套实验源码+手册+视频下载地址:http://www.openedv.com/thread-301505-1-1.html 4)对正点原子FPGA感兴趣的同学可以加群讨论:994244016 5)关注正点原子公众号,获取最新资料更新
HDMI接口在消费类电子行业,如电脑、液晶电视、投影仪等产品中得到了广泛的应用。一些专业的视频设备如摄像机、视频切换器等也都集成了HDMI接口。本章我们将学习如何驱动开拓者开发板上的HDMI接口。 本章包括以下几个部分: 21.1 简介 21.2 实验任务 21.3 硬件设计 21.4 程序设计 21.5 下载验证 21.1 简介 HDMI是新一代的多媒体接口标准,英文全称是High-Definition Multimedia Interface,即高清多媒体接口。它能够同时传输视频和音频,简化了设备的接口和连线;同时提供了更高的数据传输带宽,可以传输无压缩的数字音频及高分辨率视频信号。HDMI 1.0版本于2002年发布,最高数据传输速度为5Gbps;而2017年发布的HDMI 2.1标准的理论带宽可达48Gbps。 在HDMI接口出现之前,被广泛应用的是VGA接口。VGA的全称是Video Graphics Array,即视频图形阵列,是一个使用模拟信号进行视频传输的标准。VGA接口采用15针插针式结构,里面传输模拟信号颜色分量、同步等信号,是很多老显卡、笔记本和投影仪所使用的接口。由于VGA接口传输的是模拟信号,其信号容易受到干扰,因此VGA在高分辨率下字体容易虚,信号线长的话,图像有拖尾现象。VGA接口由下图所示: 第二十一章 HDMI彩条显示实验 HDMI接口在消费类电子行业,如电脑、液晶电视、投影仪等产品中得到了广泛的应用。一些专业的视频设备如摄像机、视频切换器等也都集成了HDMI接口。本章我们将学习如何驱动开拓者开发板上的HDMI接口。 本章包括以下几个部分: 21.1 简介 21.2 实验任务 21.3 硬件设计 21.4 程序设计 21.5 下载验证
21.1 简介 HDMI是新一代的多媒体接口标准,英文全称是High-Definition Multimedia Interface,即高清多媒体接口。它能够同时传输视频和音频,简化了设备的接口和连线;同时提供了更高的数据传输带宽,可以传输无压缩的数字音频及高分辨率视频信号。HDMI 1.0版本于2002年发布,最高数据传输速度为5Gbps;而2017年发布的HDMI 2.1标准的理论带宽可达48Gbps。 在HDMI接口出现之前,被广泛应用的是VGA接口。VGA的全称是Video Graphics Array,即视频图形阵列,是一个使用模拟信号进行视频传输的标准。VGA接口采用15针插针式结构,里面传输模拟信号颜色分量、同步等信号,是很多老显卡、笔记本和投影仪所使用的接口。由于VGA接口传输的是模拟信号,其信号容易受到干扰,因此VGA在高分辨率下字体容易虚,信号线长的话,图像有拖尾现象。VGA接口由下图所示:
图 7.5.13.1 VGA接口 VGA接口除信号容易受到干扰外,其体积也较大,因此VGA接口已逐渐退出舞台,一些显示器也不再带有VGA接口,在数字设备高度发展的今天,取而代之的是HDMI接口和DP(Display Port)接口等。 HDMI向下兼容DVI,但是DVI(数字视频接口)只能用来传输视频,而不能同时传输音频,这是两者最主要的差别。此外,DVI接口的尺寸明显大于HDMI接口,如下图所示:
图 7.5.13.2 DVI接口(左)和HDMI接口(右)实物图 图 7.5.13.2右侧是生活中最常见的A型HDMI接口,其引脚定义如下图所示:
图 7.5.13.3 HDMI接口引脚定义 DVI和HDMI接口协议在物理层使用TMDS标准传输音视频数据。TMDS(Transition Minimized Differential Signaling,最小化传输差分信号)是美国Silicon Image公司开发的一项高速数据传输技术,在DVI和HDMI视频接口中使用差分信号传输高速串行数据。TMDS差分传输技术使用两个引脚(如图 7.5.13.3中的“数据2+”和“数据2-”)来传输一路信号,利用这两个引脚间的电压差的正负极性和大小来决定传输数据的数值(0或1)。 Xilnx在Spartan-3A系列之后的器件中,加入了对TMDS接口标准的支持,用于在FPGA内部实现DVI和HDMI接口。 由于本次实验只是使用HDMI接口来显示图像,不需要传输音频,因此我们只需要实现DVI接口的驱动逻辑即可。不过在此之前我们还需要简单地了解一下TMDS视频传输协议。 图 7.5.13.4是TMDS发送端和接收端的连接示意图。DVI或HDMI视频传输所使用的TMDS连接通过四个串行通道实现。对于DVI来说,其中三个通道分别用于传输视频中每个像素点的红、绿、蓝三个颜色分量(RGB 4:4:4格式)。HDMI默认也是使用三个RGB通道,但是它同样可以选择传输像素点的亮度和色度信息(YCrCb 4:4:4或YCrCb 4:2:2格式)。第四个通道是时钟通道,用于传输像素时钟。独立的TMDS时钟通道为接收端提供接收的参考频率,保证数据在接收端能够正确恢复。
图 7.5.13.4 TMDS连接示意图 如果每个像素点的颜色深度为24位,即RGB每个颜色分量各占8位,那么每个通道上的颜色数据将通过一个8B/10B的编码器(Encoder)来转换成一个10位的像素字符。然后这个10位的字符通过并串转换器(Serializer)转换成串行数据,最后由TMDS数据通道发送出去。这个10:1的并转串过程所生成的串行数据速率是实际像素时钟速率的10倍。 在传输视频图像的过程中,数据通道上传输的是编码后的有效像素字符。而在每一帧图像的行与行之间,以及视频中不同帧之间的时间间隔(消隐期)内,数据通道上传输的则是控制字符。每个通道上有两位控制信号的输入接口,共对应四种不同的控制字符。这些控制字符提供了视频的行同步(HSYNC)以及帧同步(VSYNC)信息,也可以用来指定所传输数据的边界(用于同步)。 对于DVI传输,整个视频的消隐期都用来传输控制字符。而HDMI传输的消隐期除了控制字符之外,还可以用于传输音频或者其他附加数据,比如字幕信息等。这就是DVI和HDMI协议之间最主要的差别。从图 7.5.13.4中也可以看出这一差别,即“Auxiliary Data”接口标有“HDMI Olny”,即它是HDMI所独有的接口。 从前面的介绍中我们可以看出,TMDS连接从逻辑功能上可以划分成两个阶段:编码和并串转换。在编码阶段,编码器将视频源中的像素数据、HDMI的音频/附加数据,以及行同步和场同步信号分别编码成10位的字符流。然后在并串转换阶段将上述的字符流转换成串行数据流,并将其从三个差分输出通道发送出去。 DVI编码器在视频有效数据段输出像素数据,在消隐期输出控制数据,如图 7.5.13.5所示。其中VDE(Video Data Enable)为高电平时表示视频数据有效,为低电平代表当前处于视频消隐期。
图 7.5.13.5 DVI编码输出示意图 图 7.5.13.6给出了三个通道的DVI编码器示意图。对于像素数据的RGB三个颜色通道,编码器的逻辑是完全相同的。VDE用于各个通道选择输出视频像素数据还是控制数据。HSYNC和VSYNC信号在蓝色通道进行编码得到10位字符,然后在视频消隐期传输。绿色和红色通道的控制信号C0和C1同样需要进行编码,并在消隐期输出。但是DVI规范中这两个通道的控制信号是预留的(未用到),因此将其置为2’b00。
图 7.5.13.6 DVI编码器示意图 每个通道输入的视频像素数据都要使用DVI规范中的TMDS编码算法进行编码。每个8-bit的数据都将被转换成460个特定10-bit字符中的一个。这个编码机制大致上实现了传输过程中的直流平衡,即一段时间内传输的高电平(数字“1”)的个数大致等于低电平(数字“0”)的个数。同时,每个编码后的10-bit字符中状态跳转(“由1到0”或者“由0到1”)的次数将被限制在五次以内。 除了视频数据之外,每个通道2-bit控制信号的状态也要进行编码,编码后分别对应四个不同的10-bit控制字符,分别是10’b1101010100,10’b0010101011,10’b0101010100,和10’b1010101011。可以看出,每个控制字符都有七次以上的状态跳转。视频字符和控制字符状态跳转次数的不同将会被用于发送和接收设备的同步。 HDMI协议与DVI协议在很多方面都是相同的,包括物理连接(TMDS)、有效视频编码算法以及控制字符的定义等。但是,相比于DVI,HDMI在视频的消隐期会传输更多的数据,包括音频数据和附加数据。4-bit音频和附加数据将通过TERC4编码机制转换成10-bit TERC4字符,然后在绿色和红色通道上传输。 HDMI在输入附加数据的同时,还需要输入ADE(Aux/Audio Data Enable)信号,其作用和VDE是类似的:当ADE为高电平时,表明输入端的附加数据或者音频数据有效。如果大家想了解更多有关HDMI的细节,可以参考开发板资料(A盘)/软件资料中的HDMI接口规范——《High-Definition Multimedia Interface Specification Version 1.3a》。为了简单起见,我们在这里把HDMI接口当作DVI接口进行驱动。 在编码之后,3个通道的10-bit字符将进行并串转换,这一过程是使用7系列FPGA中专用的硬件资源来实现的。ZYNQ PL部分与7系列的FPGA是等价的,它提供了专用的并串转换器——OSERDESE2。单一的OSERDESE2模块可以实现8:1的并串转换,通过位宽扩展可以实现10:1和14:1的转换率。 21.2 实验任务 本章的实验任务是驱动领航者ZYNQ开发板上的HDMI接口,在显示器上显示彩条图案。 21.3 硬件设计
图 7.5.13.1 HDMI接口原理图1 图 7.5.13.1是领航者ZYNQ底板HDMI接口原理图的一部分,其中HDMI的三个数据通道HDMI_D[2:0]至和一个时钟通道HDMI_CLK直接与ZYNQ PL端的TMDS差分引脚相连。 HDMI_HPD指的是热拔插检测(Hot Plug Detect),当视频设备与接收设备通过HDMI连接时,接收设备将HPD置为高电平,通知发送设备。当发送设备检测到HPD为低电平时,表明断开连接。
图 7.5.13.2 HDMI接口原理图2 在图 7.5.13.2中,HDMI_SCL_LS和HDMI_SDA_LS是HDMI接口的显示数据通道(DDC,Display Data Channel),用于HDMI 发送端和接收端之间交换一些配置信息,通过I2C协议通信。发送端通过 DDC 通道,读取接收端保存在HDMI显示器EEPROM中的EDID数据,获取接收端的信息,确认接收端终端显示的设置和功能,决定跟接收端之间以什么格式传输音/视频数据。 本次实验只使用了HDMI接口的TMDS数据和TMDS时钟信号,各端口的管脚分配如下表所示: 表 21.3.1 HDMI彩条显示实验管脚分配 信号名 方向 管脚 端口说明 电平标准 sys_clk input U18 系统时钟,50M LVCMOS33 sys_rst_n input N16 系统复位,低有效 LVCMOS33 tmds_data_p[2] output J20 TMDS 数据通道2(正极) TMDS_33 tmds_data_p[1] output K19 TMDS 数据通道1(正极) TMDS_33 tmds_data_p[0] output G19 TMDS 数据通道0(正极) TMDS_33 tmds_clk_p output J18 TMDS 时钟通道(正极) TMDS_33 需要注意的是,TMDS数据和时钟信号需要在约束文件中指定电平标准为TMDS_33。另外,对于差分信号我们只需要指定正极的引脚位置,工具会自动对负极进行管脚分配。 相关的管脚约束如下所示: #系统时钟和复位
set_property -dict {PACKAGE_PIN U18 IOSTANDARD LVCMOS33} [get_ports sys_clk]
set_property -dict {PACKAGE_PIN N16 IOSTANDARD LVCMOS33} [get_ports sys_rst_n]
#HDMI
set_property -dict {PACKAGE_PIN J20 IOSTANDARD TMDS_33 } [get_ports {tmds_data_p[2]}]
set_property -dict {PACKAGE_PIN K19 IOSTANDARD TMDS_33 } [get_ports {tmds_data_p[1]}]
set_property -dict {PACKAGE_PIN G19 IOSTANDARD TMDS_33 } [get_ports {tmds_data_p[0]}]
set_property -dict {PACKAGE_PIN J18 IOSTANDARD TMDS_33 } [get_ports tmds_clk_p]
21.4 程序设计 由于本次实验只需要通过HDMI接口显示图像,因此将其当成DVI接口进行驱动。另外我们只需要实现图像的发送功能。由此得出本次实验的系统框图如下所示:
图 7.5.13.1 系统框图 本次实验在LCD彩条显示实验的基础上添加一个RGB2DVI模块,将RGB888格式的视频图像转换成TMDS数据输出。本章的重点是介绍RGB2DVI模块,其余模块的介绍请参考LCD彩条显示实验。 RGB2DVI顶层模块的设计框图如下所示:
图 7.5.13.2 RGB2DVI模块框图 图 7.5.13.2中,Encoder模块负责对数据进行编码,Serializer模块对编码后的数据进行并串转换,最后通过OBUFDS转化成TMDS差分信号传输。 整个系统需要两个输入时钟,一个是视频的像素时钟Pixel Clk,另外一个时钟Pixel Clk x5的频率是像素时钟的五倍。由前面的简介部分我们知道,并串转换过程的实现的是10:1的转换率,理论上转换器需要一个10倍像素时钟频率的串行时钟。这里我们只用了一个5倍的时钟频率,这是因为OSERDESE2模块可以实现DDR的功能,即它在五倍时钟频率的基础上又实现了双倍数据速率。 TMDS连接的时钟通道我们采用与数据通道相同的并转串逻辑来实现。通过对10位二进制序列10’b11111_00000在10倍像素时钟频率下进行并串转换,就可以得到像素时钟频率下的TMDS参考时钟。 另外需要注意的是,图中左下脚HDMI的音频/附加数据输入在本次实验中并未用到,因此以虚线表示。 首先来看一下Encoder模块的代码:
1 `timescale 1 ps / 1ps
2
3 module dvi_encoder (
4 input clkin, // pixel clock input
5 input rstin, // async. reset input (active high)
6 input [7:0] din, // data inputs: expect registered
7 input c0, // c0 input
8 input c1, // c1 input
9 input de, // de input
10 output reg [9:0] dout // data outputs
11 );
12
13
14 // Counting number of 1s and 0s for each incoming pixel
15 // component. Pipe line the result.
16 // Register Data Input so it matches the pipe lined adder
17 // output
18
19 reg [3:0] n1d; //number of 1s in din
20 reg [7:0] din_q;
21
22 //计算像素数据中“1”的个数
23 always @ (posedge clkin) begin
24 n1d 4'h4) | ((n1d == 4'h4) & (din_q[0] == 1'b0));
36
37 wire [8:0] q_m;
38 assign q_m[0] = din_q[0];
39 assign q_m[1] = (decision1) ? (q_m[0] ^~ din_q[1]) : (q_m[0] ^ din_q[1]);
40 assign q_m[2] = (decision1) ? (q_m[1] ^~ din_q[2]) : (q_m[1] ^ din_q[2]);
41 assign q_m[3] = (decision1) ? (q_m[2] ^~ din_q[3]) : (q_m[2] ^ din_q[3]);
42 assign q_m[4] = (decision1) ? (q_m[3] ^~ din_q[4]) : (q_m[3] ^ din_q[4]);
43 assign q_m[5] = (decision1) ? (q_m[4] ^~ din_q[5]) : (q_m[4] ^ din_q[5]);
44 assign q_m[6] = (decision1) ? (q_m[5] ^~ din_q[6]) : (q_m[5] ^ din_q[6]);
45 assign q_m[7] = (decision1) ? (q_m[6] ^~ din_q[7]) : (q_m[6] ^ din_q[7]);
46 assign q_m[8] = (decision1) ? 1'b0 : 1'b1;
47
48 /
49 // Stage 2: 9 bit -> 10 bit
50 // Refer to DVI 1.0 Specification, page 29, Figure 3-5
51 /
52 reg [3:0] n1q_m, n0q_m; // number of 1s and 0s for q_m
53 always @ (posedge clkin) begin
54 n1q_m N0q_m)] or [(cnt < 0) and (N0q_m > N1q_m)]
69 /
70 assign decision3 = (~cnt[4] & (n1q_m > n0q_m)) | (cnt[4] & (n0q_m > n1q_m));
71
72
73 // pipe line alignment
74
75 reg de_q, de_reg;
76 reg c0_q, c1_q;
77 reg c0_reg, c1_reg;
78 reg [8:0] q_m_reg;
79
80 always @ (posedge clkin) begin
81 de_q
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?