【FPGA开发】HDMI通信协议解析及FPGA实现

这篇具有很好参考价值的文章主要介绍了【FPGA开发】HDMI通信协议解析及FPGA实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


  笔者在这里使用的开发板是正点原子的达芬奇开发板,FPGA型号为XC7A35TFGG484-2。参考的课程是正点原子的课程手把手教你学达芬奇&达芬奇Pro之FPGA开发篇。


一、HDMI简介

【FPGA开发】HDMI通信协议解析及FPGA实现,FPGA开发,fpga开发

  HDMI,全称为High Definition Multimedia Interface,即高清多媒体接口。它不仅可以传输视频信号,还可以传输音频信号。上图所示的HDMI接口即为最常见的HDMI-A型接口。有19个引脚,尺寸为13.9×4.45mm,广泛应用于笔记本,投影仪,显示器等,工作频率约为160MHz。MDMI有不同的协议版本,比较重要的几个协议版本如1.0(2002.12)、1.3(2006.6)、2.0(2013.9)、2.1(2017.1),协议版本越高级,HDMI信号的传输速率、支持的分辨率以及帧率就越高。目前主流的HDMI协议版本为2.0。

1.1 HDMI引脚解析

  HDMI的引脚及其定义如下图所示:
【FPGA开发】HDMI通信协议解析及FPGA实现,FPGA开发,fpga开发
  在HDMI协议中,总共有4组差分线,每组分别由+信号-信号屏蔽信号组成。四组信号线分别传输R、G、B信号以及时钟信号。CEC为HDMI的扩展功能,可以使用这一条线传输两个设备之间的控制信息,SCLSDA是HDMI的I2C接口,可以实现不同设备之间EDID信息传输(Extended Display Identification Data 、外部显示设备标识数据——指DDC通讯中传输的显示设备数据)。热插拔检测线用于检测是否有从机连接到主机。

1.2 HDMI工作原理

  HDMI的工作原理图如下所示。图中,TMDS指最小化传输差分信号(Transition Minimized Differential Signaling),是指被转换后的传输信号。视频信号Video和音频信号Audio通过一种特定的编码方式转换为10bit的串行差分信号,这种信号即成为TMDS信号。在主机上进行编码,在从机上进行解码,从而实现两个设备之间的信息交互。
【FPGA开发】HDMI通信协议解析及FPGA实现,FPGA开发,fpga开发
【FPGA开发】HDMI通信协议解析及FPGA实现,FPGA开发,fpga开发

  上图展示了RGB-888格式下的TMDS信号和TERC4转换以及连接方式。视频信息采用TMDS进行编码,音频信号采用TERC4进行编码。每一路信号都是并行信号,HSYNCVSYNC是显示的水平同步信号和竖直同步信号,这两个信号只和蓝色通道一起编码。绿色通道和红色通道的CTL0-3用来传输控制信号。TERC4频编码较为复杂,本文章不涉及。时钟信号也需要编码,但是较为简单,上图中没有展示出来。

1.3 DVI编码

【FPGA开发】HDMI通信协议解析及FPGA实现,FPGA开发,fpga开发

  当HDMI只传递视频信息不传递音频信息,HDMI协议就可以退化为DVI协议。DVI也使用
TMDS进行编码。DVI编码中有一个视频数据使能VDE信号,当它拉高时传递像素信号,当它拉低时传递控制信号和水平数值同步信号。

1.4 TMDS编码

  TMDS指最小化传输差分信号(Transition Minimized Differential Signaling),主要适用于HDMI和DVI视频信号的编码。它的编码方式是将原有的8bit数据编码为10bit数据。

  1. 8bit数据:通过同或/异或算法得到。
  2. bit9:反映前8bit数据的运算方式,如果是0,则说明前8bit通过异或非(同或)方式得到的,如果是1,就说明是通过异或方式得到的。
  3. bit10:直流平衡位。在高速的差分信号传输中,通常在接口处采用交流耦合,即会在接口处添加一个隔直电容去掉交流量。如果传输的信号长时间保持不变,就有可能在信号接收端出现直流偏移,导致解码错误。所以我们在编码时添加一个直流平衡位,如果前面数据1比较多,那么bit10 = 0,反之,如果前面数据0比较多,那么bit10 = 1

【FPGA开发】HDMI通信协议解析及FPGA实现,FPGA开发,fpga开发
  TMDS的编码过程可以由下图所示:
【FPGA开发】HDMI通信协议解析及FPGA实现,FPGA开发,fpga开发

参数名称 含义
D C1 C0 DE D是视频信号, C是控制信号, DE是使能信号
Cnt(t) 寄存器参数,用来存储第t次编码中1的个数比0的个数多多少(为了满足TMDS减少上冲下冲和确保直流平衡的要求)
N1{x} 输入信号中1的个数
N0{x} 输入信号中0的个数
q_m 临时寄存的数据输出
q_out 编码输出

二、并串转换、单端差分转换原语

2.1 原语简介

  原语:英文名称Primitive,是Xilinx针对其器件特征开发的一系列常用模块名称,涵盖了FPGA开发过程中的常用领域,方便用户直接调用FPGA的底层组件。以Xilinx为例,共分为10类:计算组件、IO端口组件、寄存器/锁存器、时钟组件、处理器组件、移位寄存器、配置和检测组件、RAM/ROM组件、Slice/CLB组件以及G-tranceiver。可以将原语理解为一段特殊的代码。实际上,调用原语是在实例化某个Xilinx的内置模块。
  原语的好处在于原语可以之间看作为“库函数”,可以直接例化调用,比创建IP要更加方便,功能也更全面,可以有效提高开发效率。

2.2 原语:IO端口组件

  IO端口组件是Xilinx的一类原语。IO组件中一共包含了21个原语,对应21个功能。在本次实验中主要采用并转串OSERDES和单端转差分OBUFDS两个原语。
【FPGA开发】HDMI通信协议解析及FPGA实现,FPGA开发,fpga开发
  IO组件的结构如下图所示。图中IDELAYE2ODELAYE2分别是输入延迟和输出延迟,主要作用是为了解决高速信号传输中信号线可能不等长的问题(等待最长的一根线数据到来后再读取数据)。ILOGICE2OLOGICE2中主要包含了IDDRODDR的资源,用于双边沿取样。ISERDESE2的作用是将单端输入的串行数据转换为并行数据,OSERDESE2的作用是将并行数据转换为单端串行数据输出。

  达芬奇使用的FPGA芯片为A7系列,其中没有HPBANK,所以没有ODELAYE2。ZYNQ也只有7030以上系列才有HPBANK,所以一般使用的FPGA芯片是没有ODELAYE2的。

【FPGA开发】HDMI通信协议解析及FPGA实现,FPGA开发,fpga开发

2.3 IOB 输入输出缓冲区

  IOB的结构如下所示,在本次实验中它主要完成单端转差分的操作。因为差分信号至少需要两条线,所以一个IOB是无法完成的,至少需要两个IOB才能完成这个功能。
【FPGA开发】HDMI通信协议解析及FPGA实现,FPGA开发,fpga开发

2.4 并转串原语OSERDESE2

2.4.1 OSERDESE2 工作原理

  对于一个并行数据,要想把它转换为串行数据有以下两种做法:

  1. 一个时钟周期内有10bit数据,将该时钟作10倍频,倍频后的时钟每一个周期存放一个数据。这种做法易于理解,但是最大的问题是将时钟进行10倍频后芯片以及外部设备可能不支持这样高的频率。
  2. 一个时钟周期内有10bit数据,将该时钟作5倍频,倍频后的时钟的上升沿和下降沿都进行数据转换输出,即DDR双边沿采样。这样可以有效缓解倍频给时钟带来的压力。

  OSERDESE2的结构如下图所示。该组件可以分成三部分,上面的TCETBYTEIN和一部分电路组成三态控制;中间的CLKCLKIDIVRST组成时钟控制部分,CLK为快速时钟(5倍频),CLKDIV是低速时钟(1倍频);下面的OCED1-D8OQOFB等组成并转穿的转换部分。数据转换数据只有8个数据输入口,要想实现10转1,则需要将两个OSERDESE2级联使用。
【FPGA开发】HDMI通信协议解析及FPGA实现,FPGA开发,fpga开发
【FPGA开发】HDMI通信协议解析及FPGA实现,FPGA开发,fpga开发

2.4.2 OSERDESE2 级联示意图

  级联时需要注意:根据硬件的硬性要求,从模式的OSERDESE2D1-D2不支持输入,只能从D3开始输入引脚,即可以选择D3-D8
【FPGA开发】HDMI通信协议解析及FPGA实现,FPGA开发,fpga开发

2.4.3 OSERDESE2 工作时序图

  下面是OSERDESE2工作在普通模式和三态模式的两种时序工作图。第一张图数据为8位并行转串行,CLKCLKDIV的周期之比为4:1。第二张图数据为4位并行转串行,并且包含T1-T4三态门控制,CLKCLKDIV的周期之比为2:1。
【FPGA开发】HDMI通信协议解析及FPGA实现,FPGA开发,fpga开发
  T1-T4均为高电平有效,对应TQ将要输出的数据。且在当前CLKDIV周期采样,下个周期输出。在TQ高电平期间,可以执行输入操作。
【FPGA开发】HDMI通信协议解析及FPGA实现,FPGA开发,fpga开发

2.4.4 OSERDESE2 原语调用实例

【FPGA开发】HDMI通信协议解析及FPGA实现,FPGA开发,fpga开发
  在原语调用实例中,需要特别注意以下几个参数:

  1. .DATA_RATE_OQ("DDR"):采用双边沿采样;
  2. .DATA_WIDTH(10):将要转换的数据宽度;
  3. .SERDES_MODE("MASTER"):设置级联下的主从模式;
  4. .SHIFTOUT1/2(SHIFTOUT1/2).SHIFTIN1/2(SHIFTIN1/2):级联下的数据线连接方式,注意不要连错。
	OSERDESE2 #(
        .DATA_RATE_OQ("DDR"),           // DDR, SDR
        .DATA_RATE_TQ("DDR"),           // DDR, BUF, SDR
        .DATA_WIDTH(10),                // Parallel data width (2-8,10,14)
        .INIT_OQ(1'b0),                 // Initial value of OQ output (1'b0,1'b1)
        .INIT_TQ(1'b0),                 // Initial value of TQ output (1'b0,1'b1)
        .SERDES_MODE("MASTER"),         // MASTER, SLAVE
        .SRVAL_OQ(1'b0),                // OQ output value when SR is used (1'b0,1'b1)
        .SRVAL_TQ(1'b0),                // TQ output value when SR is used (1'b0,1'b1)
        .TBYTE_CTL("FALSE"),            // Enable tristate byte operation (FALSE, TRUE)
        .TBYTE_SRC("FALSE"),            // Tristate byte source (FALSE, TRUE)
        .TRISTATE_WIDTH(4)              // 3-state converter width (1,4)
    ) OSERDESE2_inst (
        .OFB(OFB),                      // 1-bit output: Feedback path for data
        .OQ(OQ),                        // 1-bit output: Data path output
        // SHIFTOUT1 / SHIFTOUT2: 1-bit (each) output: Data output expansion (1-bit each)
        .SHIFTOUT1(SHIFTOUT1),
        .SHIFTOUT2(SHIFTOUT2),
        .TBYTEOUT(TBYTEOUT),            // 1-bit output: Byte group tristate
        .TFB(TFB),                      // 1-bit output: 3-state control
        .TQ(TQ),                        // 1-bit output: 3-state control
        .CLK(CLK),                      // 1-bit input: High speed clock
        .CLKDIV(CLKDIV),                // 1-bit input: Divided clock
        // D1 - D8: 1-bit (each) input: Parallel data inputs (1-bit each)
        .D1(D1),
        .D2(D2),
        .D3(D3),
        .D4(D4),
        .D5(D5),
        .D6(D6),
        .D7(D7),
        .D8(D8),
        .OCE(OCE),                      // 1-bit input: Output data clock enable
        .RST(RST),                      // 1-bit input: Reset
        // SHIFTIN1 / SHIFTIN2: 1-bit (each) input: Data input expansion (1-bit each)
        .SHIFTIN1(SHIFTIN1),
        .SHIFTIN2(SHIFTIN2),
        // T1 - T4: 1-bit (each) input: Parallel 3-state inputs
        .T1(T1),
        .T2(T2),
        .T3(T3),
        .T4(T4),
        .TBYTEIN(TBYTEIN),              // 1-bit input: Byte group tristate
        .TCE(TCE)                       // 1-bit input: 3-state clock enable
    );

2.5 单端转差分原语OBUFDS

  OBUFDS的调用较为简单,直接按照如下的格式调用即可。

    OBUFDS OBUFDS_inst (
        .O(O),            // 1-bit output: Diff_p output (connect directly to top-level port)
        .OB(OB),          // 1-bit output: Diff_n output (connect directly to top-level port)
        .I(I)             // 1-bit input: Buffer input
    );

  持续不定期更新完善中……


  原创笔记,码字不易,欢迎点赞,收藏~ 如有谬误敬请在评论区不吝告知,感激不尽!博主将持续更新有关嵌入式开发、FPGA方面的学习笔记。文章来源地址https://www.toymoban.com/news/detail-832733.html


到了这里,关于【FPGA开发】HDMI通信协议解析及FPGA实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • IIC通信协议详解 & PCF8591应用(Verilog实现FPGA)

    该文章结合PCF8591 8-bit AD/DA 模数/数模转换器来详细介绍IIC通信协议,尽量做到条理清晰,通俗易懂。该文图片均从PCF8591手册中截取,一定程度上引导读者学习阅读data sheet。 之后可能会更新 如何将IIC的Verilog实现变为一个IP核,并在pynq-Z2板子上使用 。 2.1 地址位 在I2C总线系统

    2024年02月04日
    浏览(64)
  • FPGA 20个例程篇:13.千兆网口实现ARP通信协议(下)

            完成了RGMII接口和GMII接口转换的代码设计,接下来我们来设计以太网帧的报文解析模块,为了兼顾下一个例程中ICMP和UDP报文的解析,我们把ARP报文解析分成以太网首部解析和ARP数据解析两部分,这样以太网首部解析模块还可以再用到下一个例程当中提高了代码的复用

    2024年02月13日
    浏览(48)
  • FPGA 20个例程篇:14.千兆网口实现ICMP、UDP通信协议(上)

           UDP是一种面向无连接的传输层协议,属于TCP/IP协议族的一种,UDP具有消耗资源少、通信效率高等优点,一般性地用来传输音频或者视频等对实时性要求高的场合。         ICMP是TCP/IP协议族的一个IP层子协议,包含在IP数据报里,主要用于IP主机、路由器之间传递控制消

    2024年02月03日
    浏览(44)
  • FPGA实现HDMI接口

    HDMI( High-Definition Multimedia Interface),即高清多媒体接口。它能够 同时传输视频和音频 ,简化了设备的接口和连线;同时提供了更高的数据传输带宽, 可以传输无压缩的数字音频及高分辨率视频信号。 HDMI 接口在物理层使用 TMDS 标准传输音视频数据。 点亮液晶显示屏需要按

    2024年02月04日
    浏览(42)
  • FPGA高端项目:解码索尼IMX390 MIPI相机转HDMI输出,提供FPGA开发板+2套工程源码+技术支持

    FPGA高端项目:解码索尼IMX390 MIPI相机转HDMI输出,提供FPGA开发板+2套工程源码+技术支持 FPGA图像采集领域目前协议最复杂、技术难度最高之一的应该就是MIPI协议了,MIPI解码难度之高,令无数英雄竞折腰,以至于Xilinx官方不得不推出专用的IP核供开发者使用,不然太高端的操作

    2024年04月17日
    浏览(73)
  • FPGA GTX全网最细讲解,aurora 8b/10b协议,HDMI视频传输,提供2套工程源码和技术支持

    没玩过GT资源都不好意思说自己玩儿过FPGA,这是CSDN某大佬说过的一句话,鄙人深信不疑。。。 GT资源是Xilinx系列FPGA的重要卖点,也是做高速接口的基础,不管是PCIE、SATA、MAC等,都需要用到GT资源来做数据高速串化和解串处理,Xilinx不同的FPGA系列拥有不同的GT资源类型,低端

    2024年02月10日
    浏览(45)
  • FPGA-基本通信协议

    串行:一次只发送一位数据; 并行:是指每次发送多位数据; 单工:通信只能从发送方到接收方,不能从接收方发送数据,也就是数据只能单向发送; 半双工:数据可以双向通信,但不能同时双向通信,一个时刻只能有一个方向上通信; 双工:数据可以同时,双向通信;

    2024年02月14日
    浏览(42)
  • FPGA协议篇:UART通信及Verilog最易懂实现方式/通用于任何工程/带握手信号 ----UART_TX

            UART(Universal Asynchronous Receiver/Transmitter)是一种通用的 异步收发传输协议 ,用于在计算机系统和外部设备之间进行串行数据传输。UART 协议定义了数据的传输格式和通信规则,使得不同设备之间能够进行可靠的数据交换。 首先先把设计代码放到这里: UART_TX完整代

    2024年03月27日
    浏览(51)
  • FPGA实现SD卡读写照片显示在HDMI显示屏(IP调用)

            概述: TF 卡读写数据,利用 VDMA 和 HDMI 显示视频图像,实现从 SD 卡读取图片并且在 HDMI 显示器上显示。 步骤一:PL端配置IP SD卡配置 确保 SDIO 接口,设置正确,SD_0 是 TF 卡 在ZYNQ的IP核中配置好SD卡,SD0是TF卡,SD1是EMMC    2.VDMA配置 查找官方IP: ·VTC IP:这个 IP 就是

    2024年04月22日
    浏览(32)
  • 详细接口和使用说明的FPGA IP实现VGA转HDMI功能

    FPGA实现VGA转HDMI功能的IP,配详细的接口和使用说明 ID:3440 718008093072 木若君熙 标题: FPGA实现VGA转HDMI功能的IP及其详细接口和使用说明 摘要: 本文针对FPGA(Field-Programmable Gate Array)实现VGA转HDMI功能的IP进行了详细的分析与说明。首先介绍了FPGA的基本原理和应用领域,然后详细介

    2024年04月25日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包