FPGA 20个例程篇:16.HDMI显示彩色风景图

这篇具有很好参考价值的文章主要介绍了FPGA 20个例程篇:16.HDMI显示彩色风景图。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

第六章 图像显示处理,经典再现

16.HDMI显示彩色风景图

       HDMI接口在消费类电子行业,比如笔记本电脑、液晶电视、投影仪等产品中均得到了广泛的应用,一些专业的视频设备如摄像机、视频切换器、机顶盒等也都会集成HDMI接口,HDMI是新一代的多媒体接口标准即高清多媒体接口,作为应用最为广泛的音视频传输接口,熟练掌握HDMI接口的FPGA开发,一方面可以加深对底层8B/10B编码和并转串的理解,另一方面丰富简历的同时也更加方便工作中验证FPGA图像视频处理。

      HDMI接口可以同时传输视频和音频,极大简化了设备的接口和连线,也提供了更高的数据传输带宽,能传输无压缩的数字音频和高分辨率视频信号。HDMI向下兼容DVI即数字视频接口,但DVI只能用来传输视频,不能同时传输音频,这也是两者主要的差别,如图1所示是豌豆开发板Artix7上HDMI电路。

FPGA 20个例程篇:16.HDMI显示彩色风景图

图1 豌豆开发板Artix7上HDMI电路

        下面我们来对照原理图,比较详细地说明HDMI接口中各个引脚的作用,如下图2所示是HDMI接口HDMI_D_N/P[2:0]、HDMI_CLK_N/P、HDMI_HPD引脚示意图,大家可以清楚地看到3个数据通道HDMI_D_N/P[2:0]和1个时钟通道HDMI_CLK_N/P作为数据传输总线直接与HDMI接口线束的差分引脚相连。HDMI_HPD即为热拔插检测,当视频设备与接收设备通过HDMI连接时,接收设备将HDMI_HPD置为高电平并通知发送设备,当发送设备检测到HDMI_HPD为低电平时则表明断开连接。

        如图3所示是HDMI接口中HDMI_OUT_EN引脚示意图,HDMI_OUT_EN信号用于设置HDMI接口的输入输出模式,当其为高电平时作为输出端,这时候由豌豆开发板输出 HDMI接口的5V电源,HDMI_HPD将作为输入信号使用;当HDMI_OUT_EN为低电平时,开发板上的HDMI接口作为输入端,接口上的5V电源将由外部连接设备提供,同时HDMI_HPD将输出高电平,用于指示HDMI连接状态。

FPGA 20个例程篇:16.HDMI显示彩色风景图

图2 HDMI接口HDMI_D_N/P[2:0]、HDMI_CLK_N/P、HDMI_HPD引脚示意图

FPGA 20个例程篇:16.HDMI显示彩色风景图

图3 HDMI接口HDMI_OUT_EN引脚示意图

      如图4所示,HDMI_SCL和 HDMI_SDA是HDMI接口的显示数据通道,用于HDMI发送端和接收端之间交换一些配置信息,并通过I2C协议通信。发送端通过显示数据通道,读取接收端保存在EEPROM中的EDID数据,获取接收端的信息,确认接收端终端显示的设置和功能,决定跟接收端之间以什么格式传输音视频数据。

FPGA 20个例程篇:16.HDMI显示彩色风景图

图4 HDMI接口HDMI_SDA、HDMI_SCL引脚示意图

        DVI和HDMI接口协议在物理层均用了TMDS标准传输音视频数据,TMDS即最小化传输差分信号,如图5所示是HDMI接口引脚定义,DVI和HDMI视频接口中使用差分信号传输高速串行数据,TMDS差分传输技术用两个引脚作为一组差分对传输一路信号,例如“数据2+”、“数据2-”;“数据1+”、“数据1-”;“数据0+”、“数据0-”来传输一路信号,用这两个引脚间的电压差的正负极性和大小来决定传输数据的数值0或者1。

FPGA 20个例程篇:16.HDMI显示彩色风景图

图5 HDMI接口引脚定义

       因为这个例程中只使用了HDMI接口来显示图像,并没有传输音频数据,所以暂时只需要实现DVI接口的驱动逻辑即可,在这里我们再简单了解一下TMDS视频传输协议。

       如图6所示是TMDS发送端和接收端的连接示意图,DVI或者HDMI视频传输所用的TMDS连接通过4个串行通道实现,即为3个TMDS数据通道和1个TMDS时钟通道,而TMDS时钟通道又以某个固定的速率运行,显然这个速率和视频的分辨率成比例。

FPGA 20个例程篇:16.HDMI显示彩色风景图

图6 TMDS发送端和接收端的连接示意图

       对于DVI来说,其中3个通道分别用于传输视频中每个像素点的红、绿、蓝三个颜色分量,HDMI默认也是使用3个RGB通道,但它却可以选择传输像素点的亮度和色度信息等。第4个通道是时钟通道,用于传输像素时钟,独立的TMDS时钟通道为接收端提供接收的参考频率,用来保证数据在接收端可以被正确接收。

      每个TMDS链路都包括3个传输RGB信号的数据通道和1个传输时钟信号的通道,且每个数据通道都会通过编码算法,将8位的视、音频数据转换成最小化传输、直流平衡的10位数据,这也就使得数据的传输和恢复更加可靠。

        简单地总结如下:如果每个像素点的颜色深度为24位,即RGB每个颜色分量各占8位,那么首先每个通道上的颜色数据将通过一个8B/10B的编码器来转换成一个10位的像素字符,接着这10位的字符通过并串转换器转换成串行数据,最后再由TMDS数据通道发送出去,需要注意的是这个10:1的并转串过程所生成的串行数据速率则是实际像素时钟速率的10倍,如图7所示是FPGA基于IO模拟HDMI的实现原理示意图。

        在系统地了解过FPGA基于IO模拟HDMI的实现原理后,实际上对于用户而言,如果想要在FPGA上去IO模拟实现HDMI成像,那么只需要解决2个问题即可:1.还原TMDS视频传输协议即8B/10B编码;2.实现并转串的过程即把8B/10B编码后的10位数据通过HDMI接口上的差分对把数据传输出去。

FPGA 20个例程篇:16.HDMI显示彩色风景图

图7 FPGA基于IO模拟HDMI的实现原理示意图

      那么下面我们就来详细地介绍:如何还原TMDS视频传输协议、如何实现10位数据并转串成1位数据送HDMI差分对收发,如图8所示是TMDS编码算法的示意图,TMDS通过逻辑算法实际上是将8位字符数据通过最小转换编码为10位字符数据,首先前8位数据由原始信号经运算后获得,第9位表示运算的方式,其中1表示异或0表示异或非,接着经过直流平衡后,就获得了第10位,而第10位本质是一个反转标志位,1表示进行了反转而0表示没有反转,从而达到直流平衡,整个过程中采用差分信号传输数据。

       直流平衡就是指在编码过程中保证信道中直流偏移为零,方法便是在原来的9位数据的后面加上第10位数据,这样传输的数据则趋于直流平衡,使信号对传输线的电磁干扰减少,从而提高信号传输的可靠性。

       在这里我们不动手还原整个TMDS编码算法,调用官方VHDL已经编写好的TMDSEncoder模块,直接把这个模块例化到整个工程的顶层文件当中即可,感兴趣的同学可以查阅“HDMI1.4规范中文版”文档对此有深入说明。

FPGA 20个例程篇:16.HDMI显示彩色风景图 

图8 TMDS编码算法示意图

        如图8所示是Oserdes通过DDR双边缘触发传输HDMI数据流示意图,大家不妨回忆回忆之前我们在千兆网口时候学习到的SelectIO IP核,实际上并转串、串转并也可以说是FPGA高速接口中常用到的设计,朋友们可以通过直接例化Iserdes和Oserdes原语来实现,Iserdes模块的作用在于实现高速源同步输入数据的串并转换,而Oserdes模块的作用在于实现高速源同步输出数据的并串转换。

      Serdes支持sdr和ddr两个模式,前者是单边缘触发传输,后者是双边缘触发传输,当然每个FPGA工程师的习惯不同,有的喜欢直接例化原语来实现Serdes串并转换或者并串转换的目的,有的则喜欢通过例化SelectIO IP核来实现,毕竟IP核图形化界面配置以及对应的说明手册看起来可能比原语更直观一些。

       大家可以对照图9,思考下如何实现并转串的过程即把8B/10B编码后的10位数据通过HDMI接口上的差分对把数据传输出去,这里假设video_driver驱动模块的模块时钟是pixel_clk,显然为了实现10位到1位的并转串处理,如果是sdr单边缘触发传输,那么 需要一个相对于pixel_clk时钟快十倍的pixel_clk_sdr时钟作为数据传输的参考时钟,如果是ddr双边缘触发传输,那么则需要一个相对于pixel_clk时钟快五倍的pixel_clk_ddr时钟作为数据传输的参考时钟即可。

FPGA 20个例程篇:16.HDMI显示彩色风景图

图9 Oserdes通过DDR双边缘触发传输HDMI数据流示意图

        在这个例程中,我们去实现一个HDMI接口显示彩色风景图片的目标,考虑XC7A35T的BRAM资源有限,所以这里用ROM表事先存储一张分辨率是320*240分辨率的风景图片,通过HDMI接口显示在分辨率是640*480屏幕的正中间,如图10所示是Img2Lcd插件,利用这个插件我们可以把.jpg格式的图片每个像素值都提取出来并转换为RGB565格式的文件保存,为了方便实验,笔者为大家准备了10张已经提取好的.jpg文件,先通过word保存再把它们从格式上转换为ROM IP核支持的.coe文件。

FPGA 20个例程篇:16.HDMI显示彩色风景图 图10 Img2Lcd插件提取.jpg图片的各点像素值

       如表1所示是video_driver模块信号列表,在这个模块中和上个例程中VGA相似,我们需要实现底层的RGB565驱动、行场信号和hdmi接口使能信号时序,如图11所示是HDMI驱动模块的代码设计,注意到几个地方:1.屏幕的分辨率是640*480,而图片的大小是320*240,所以需要通过代码实现人为把图片放到屏幕显示区域的正中间;2.需要把video_en信号在显示图片的区域内拉高,在其区域外拉低,如图6-20所示是HDMI驱动模块的代码设计。

信号列表

信号名

I/O

位宽

pixel_clk

I

1

rst_n

I

1

video_hs

O

1

video_vs

O

1

video_rgb

O

16

video_en

O

1

表1 video_driver模块信号列表

FPGA 20个例程篇:16.HDMI显示彩色风景图FPGA 20个例程篇:16.HDMI显示彩色风景图FPGA 20个例程篇:16.HDMI显示彩色风景图FPGA 20个例程篇:16.HDMI显示彩色风景图FPGA 20个例程篇:16.HDMI显示彩色风景图FPGA 20个例程篇:16.HDMI显示彩色风景图

图11 HDMI驱动模块的代码设计

       如下图12和13所示,大家打开Vivado后选择SelectIO IP核,这里需要对IP核数据总线和时钟类型进行如下配置,并且使IP核可以实现10位到1位的DDR并串转换的目的。

       如图12所示,在IP核的数据总线设置中选择DDR双边缘数据传输,数据传输方向为输出,数据位宽为10位,差分对传输使用标准的TMDS 33V电平。如图13所示,在IP核的时钟类型设置中也选择差分对传输使用标准的TMDS 33V电平即可。

FPGA 20个例程篇:16.HDMI显示彩色风景图

图12 SelectIO IP核的数据总线设置

FPGA 20个例程篇:16.HDMI显示彩色风景图

图13 SelectIO IP核的时钟类型设置

        如图14所示是HDMI显示彩色风景图顶层文件的例化,但在这里有4个地方要特别注意:

      1. 因为HDMI接口用了RGB的3个通道,对应需要3个TMDSEncoder模块去实现8B/10B编码转换,大家可以再查阅图6-15所示的TMDS发送端和接收端的连接示意图,其中红蓝色通道单独分开其TMDSEncoder模块的C0_I、C1_I的控制信号设置为0即可,而绿色通道需要把行场同步信号例化到TMDSEncoder模块的C0_I、C1_I,同时把video_en使能信号都例化到TMDSEncoder模块的DE_I;

     2. 因为是RGB565的输出格式,需要人为把HDMI驱动模块输出的16位RGB565转换成24位RGB888格式,对应位添加0即可;

      3. 例化4个SelectIO IP核实现3个TMDS数据通道和1个TMDS时钟通道的数据输出,这里把tmds_red、tmds_green、tmds_blue由TMDSEncoder模块编码后的10位数据作为SelectIO IP核输入端,同时把SelectIO IP核输出端直接引到外接接口的3个数据通道HDMI_D_N/P[2:0]和1个时钟通道HDMI_CLK_N/P即可;

      4. 在这里我们需要用PLL IP核倍频一个25Mhz的时钟给HDMI驱动模块作为模块时钟使用,感兴趣的同学也可以手工计算下1*109ns/800/525/60=39.6825ns,即大约折合成25Mhz的驱动时钟,此外还需要频一个比25Mhz快5倍的时钟提供给SelectIO IP核,用作DDR双边缘10位转1位,并转串数据传输使用。

      下载程序后通过HDMI接口连接到屏幕即可看到如图15所示的彩色风景图。

FPGA 20个例程篇:16.HDMI显示彩色风景图FPGA 20个例程篇:16.HDMI显示彩色风景图FPGA 20个例程篇:16.HDMI显示彩色风景图FPGA 20个例程篇:16.HDMI显示彩色风景图FPGA 20个例程篇:16.HDMI显示彩色风景图FPGA 20个例程篇:16.HDMI显示彩色风景图

图14 HDMI显示彩色风景图顶层文件的例化

FPGA 20个例程篇:16.HDMI显示彩色风景图

图15 HDMI显示彩色风景图文章来源地址https://www.toymoban.com/news/detail-427919.html

到了这里,关于FPGA 20个例程篇:16.HDMI显示彩色风景图的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • FPGA 20个例程篇:12.千兆网口实现MDIO接口读写

           千兆网口是我们日常生活中经常见到的外设接口,在后面三个例程中,我们将会一起去动手实现千兆网口实现MDIO接口读写、ARP通信协议、ICMP和UDP通信协议等,这三个例程有一定的难度,通过实际分析、动手编码、模块划分、上板调试大家可以学到很多内容,涵盖了

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

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

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

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

    2024年02月03日
    浏览(45)
  • FPGA 20个例程篇:20.USB2.0/RS232/LAN控制并行DAC输出任意频率正弦波、梯形波、三角波、方波(五)

           如表1所示是dds_ip_transform模块信号列表,在正弦波模块中我们需要把上游指令解析模块中发来的频率控制字和指示信号即dds_din_freq和dds_din_freq_vld、相位控制字和指示信号即dds_din_phase和dds_din_phase_vld、复位信号即ddsip_sclr写入到DDS IP核中,如图1所示是正弦波模块的代码设

    2024年02月01日
    浏览(51)
  • FPGA 20个例程篇:20.USB2.0/RS232/LAN控制并行DAC输出任意频率正弦波、梯形波、三角波、方波(二)

         通过上面的介绍相信大家对数字变频已经有了一个较为整体性的认识,下面笔者来对照XILINX的DDS IP核对数字变频技术展开更进一步的说明,做到了理论和实践很好地结合,这样大家再带入Modelsim进行仿真测试就不仅掌握了数字变频的理论知识,也明白了其IP核的使用方法

    2024年02月22日
    浏览(45)
  • FPGA 20个例程篇:20.USB2.0/RS232/LAN控制并行DAC输出任意频率正弦波、梯形波、三角波、方波(四)

            接着同样地我们也需要完成对千兆网口ETH模块和USB2.0模块的编写,实际上和UART串口模块的设计思想大同小异,也同样地需要完成两项关键功能即识别并解析报文、接收并发送数据,千兆网口ETH和USB2.0的底层驱动在前面的例程中也详细说明了,所以在这里笔者不想再重

    2024年02月04日
    浏览(56)
  • FPGA 20个例程篇:20.USB2.0/RS232/LAN控制并行DAC输出任意频率正弦波、梯形波、三角波、方波(三)

            如图1所示是USB2.0/RS232/ETH控制并行DAC输出任意频率正弦波、梯形波、三角波、方波的整体设计示意图,可以看到上位机通过RS232串口、ETH千兆网口以及USB2.0接口和FPGA建立通信,通过不同的接口发送报文,FPGA在指令解析模块中把相关设置和参数再下发到任意波(方波、

    2023年04月15日
    浏览(47)
  • FPGA20个例程专栏介绍

                 通过“FPGA基础知识”专栏的实践学习,相信朋友们已经踏上了有趣的FPGA学习之路,掌握了一些必备的FPGA基础知识、开发工具、代码技巧等等,是一个进阶提升的好契机,这里闲话不多说,开门见山笔者结合实际的项目工程经验,精心准备了20个经典的例程。

    2024年02月05日
    浏览(59)
  • FPGA高端项目:基于GTH的 4K HDMI 视频收发例程,提供工程源码和技术支持

    FPGA高端项目:基于GTH的 4K HDMI 视频收发例程,提供工程源码和技术支持 没玩过GT高速接口和4K 高清视频都不好意思说自己玩儿过FPGA,这是CSDN某大佬说过的一句话,鄙人深信不疑。。。GT资源是Xilinx系列FPGA的重要卖点,也是做高速接口的基础,不管是PCIE、SATA、MAC等,都需要

    2024年02月04日
    浏览(126)
  • 【FPGA】通俗理解从VGA显示到HDMI显示

    注:大部分参考内容来自“征途Pro《FPGA Verilog开发实战指南——基于Altera EP4CE10》2021.7.10(上)”  贴个下载地址: 野火FPGA-Altera-EP4CE10征途开发板_核心板 — 野火产品资料下载中心 文档 hdmi显示器驱动设计与验证 — [野火]FPGA Verilog开发实战指南——基于Altera EP4CE10 征途Pro开

    2024年02月09日
    浏览(47)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包