基于FPGA的HDMI显示(一)

1.1 HDMI简介

简介略,网上很多,这里也不过多描述。

1.2 基于FPGA的HDMI接口设计

  HDMI输出接口在FPGA方面应用时,主要有两种方式:一种就是如图1 22所示的方式,采用Silion Image 公司的 SIL9134 HDMI( DVI)编码芯片,最高支持 1080P@60Hz 输出,支持 3D 输出。
  另一种方式是HDMI 接口设计全由 IO 模拟方式实现,如图1 23所示,HDMI 的信号线 D0~D2 其实是一个差分信号,在我们程序当中体现为 TMDS 类型,因此其输入信号为串行的数字信号,内部实际上是将输入的 RGB 信号进行编码,转换为 HDMI 数据(实际我们称其为 DVI)进行输出,因此在设计中通常可以将 RGB 信号单独引出,作为 RGB 输出,用来作为双显输出使用。
在这里插入图片描述
在这里插入图片描述

      图1 22 基于HDMI( DVI)编码芯片的HDMI输出
在这里插入图片描述
            图1 23 直接HDMI编码输出

1.3 HDMI时序分析

  HDMI传输由三组TMDS通道和一组TMDS clock通道组成,TMDS clock的运行频率是video信号的pixel频率,在每个cycle,每个TMDS data通道发送10bit数据。
在这里插入图片描述
            图1 24 HDMI传输的示意图
  上图是HDMI传输的示意图,从图中可知,HDMI传输如下四种类型数据:
(1)Preamble控制信息,图中的CTLx,可用来表示后面传输的是data island还是video data。通过channel1和2的D[1:0]传输,占用4bit。
(2)Data Island,即数据包,如Audio数据包。通过3个channel的D[3:0]传输,占用12bit。
(3)Video Data,视频数据。示意图中传输的是RGB格式图像,R,G,B分别通过channel2,1,0传输,每个颜色8bit,共24bit。
(4)HSYNC, VSYNC。使用channel0的D[1:0]传输,占用2bit。
  8bit的数据在source经过TMDS encoder后得到10bit数据,经过serializer后串行输出;在sink端先进行复原成10bit的数据,再通过TMDS decoder得到8bit的源数据。
  此外,HDMI视频是stream式的传输,不涉及packet式的传输。
在这里插入图片描述
      图1 25 传输720x480p video的hdmi timing图
  上图是传输720x480p video的hdmi timing图。
  在video data period,有效的video数据进行传输;
  在data island period,audio和auxiliary数据以包的形式进行传输;
  在control period,CTLx和HSYNC, SYNC进行传输。
  data island period和control period都是在消隐区进行。图中行消隐占用138像素,场消隐占45行。
在这里插入图片描述
  图1 26 对时序图中描述的三种period分别传输的数据和编码类型进行说明
  上图中是对时序图中描述的三种period分别传输的数据和编码类型进行说明。video数据从8bit/channel encode后变为10bit/channel, data island的packet数据从4bit/channel encode后为10bit/channel, control数据从2bit/channel encode为10bit/channel。
  Control Period
在这里插入图片描述
            图1 27 Control Period
  只有两种类型的preamble信息组合,CTL0:3=1000代表接下来的是video data period,CTL0:3=1010代表接下来的是data island period。HSYNC, VSYNC此时也有可能发生变化。
  Video Data Period
  video data period以2个字符(pixel)长度的leading gurad band开始,guard band如下:
ch0: q_out[9:0] = 0b1011001100
ch1: q_out[9:0] = 0b0100110011
ch2: q_out[9:0] = 0b1011001100
  Data Island Period
  data island period传输audio数据和辅助数据,辅助数据包括Infoframe和其他用于音视频信息描述的数据。data island period以2个字符长度的leading guard band开始,并以2个字符宽度的trailing guard band 结束。guard band如下:
ch0: q_out[9:0] = n.a
ch1: q_out[9:0] = 0b0100110011
ch2: q_out[9:0] = 0b0100110011
  data island传输的packet类型和格式详见spec说明。
  三个传输阶段的过渡过程如下图所示:
在这里插入图片描述
        图1 28 三个传输阶段的过渡过程
  (1) 左一是control period, 分别占用三个channel的D[1:0],channel 0传输HSYNC, VSYNC, channel1,2 传输Preamble
  (2) 左二是data island period,分别占用了三个channel的D[3:0],channel 0的D[1:0]传输HSYNC, VSYNC, channel0的D[3:2]传输packet header, channel 1,2的D[3:0]传输packet。并且两端以guard band隔离
  (3)右二接下来又是control period
  (4)右一是 video data island, 占用了全部三个通道,并且开始以guard band 隔离
  Video
  支持三种pixel encoding:RGB4:4:4, YCbCr4:4:4, YCbCr4:2:2
  video format除了CEA-861-D中格式外,还会支持一些较特殊的格式
  color depth可支持一个像素24, 30, 36和48bits
  下面分别是24bit/pixel的RGB444, YCbCr422, YCbCr444的pixel encoding示意图。RGB444每个颜色占8bit, YCbCr422中Y占12bit,C占12bit,YCbCr444中Y,Cb,Cr都占用8bit。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
    图1 29 RGB444, YCbCr422, YCbCr444的pixel encoding示意图
  Deep Color模式
  Pixel Packing
24 bit mode: 1 pixel/group, 1 fragment/group
30 bit mode: 4 pixel/group, 5 fragment/group
36 bit mode: 2 pixel/group, 3 fragment/group
48 bit mode: 1 pixel/group, 2 fragment/group
1fragment/TMDS clock, 如30bit下的4pixel,需要5次传输完成,每次1个fragment。

  Audio
  Audio数据以Audio Sample Packet或High Bitrate Audio Stream Packet的形式传输,但是HDMI没有传输audio clock,因此sink设备需要进行audio clock regeneration。原理如下:
在这里插入图片描述
        图1 30 audio clock regeneration原理
  128∗fs=N×fTMDS/CTS
  N和CTS会在Audio Clock Regeneration Packet中进行传输,TMDS clock可通过硬件获取,因此sink端可算出source传输的audio clock。
  Control
  InfoFrame
  Infoframe以Infoframe packet的形式传输,它的大小不超过30字节加上一个checksum字节。具体infoframe的格式及内容需要查看spec。
  AVI(Auxiliary Video Information) Infoframe
  Audio Infoframe
  HDMI Vendor Specific Infoframe, 传输4kx2k或3D格式时需要发送此packet
  EDID & DDC
  sink设备在ROM中存放EDID信息,source在收到HPD后会通过DDC通道读取EDID得到显示设备的属性。EDID包含两部分,前128字节符合EDID1.3数据结构,128字节的扩展EDID,符合CEA extension verison3。CEA extension verison3如下图所示。
在这里插入图片描述
          图1 31 CEA extension verison3
  HDMI VSDB
  HDMI sink设备在第一个扩展EDID中包含HDMI VSDB,source在读取EDID后会根据是否有此block来判断设备是HDMI还是DVI。
  Hotplug
  source会监测HPD pin的状态,当source和sink连接后,如果HPD为高电平,说明sink设备正常可以工作,source可通过DDC读取EDID,如果为低电平,说明sink已断开。
  sink可通过拉低HPD超过100ms来向source表明EDID发生了变化,此时source会重新读取EDID。

1.4 基于FPGA的720P HDMI显示

  未完待续

  • 14
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

OpenFPGA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值