2. ZCU102 HDMI Demo【PCIE视频传输】

注意

自动生成工程时,有可能将所有axi-lite连接到了zynq_us的m_axi_hpm0_lpd上,好像默认lpd不能用,需要开启时钟、电源?还是什么使能信号才可以用,所以会导致sdk中的例子不能直接访问pl上的外设,并导致cpu挂死。可以将lpd改为fpd,这样应该就没问题了。

ZCU102 HDMI Demo测试

zcu102的hdmi tx和rx都使用的是GTH来实现的,逻辑上比较复杂,也意味着驱动比较复杂。为了自己调试这个功能,最好还是先拿demo来实际实验一下,起码要证明板子能用。

新建一个以zcu102开发板为平台的vivado工程,新建block design,添加HDMI IP,如下图,选择TX或者RX都可以
a1.png
双击IP切换到Example Design页,默认选择Pass-Through,点击OK
a2.png

在Overvier中可以看到Example的功能框图,它使用Video PHY Controller实现了TX和RX通道,分别接入各自的Subsystem,将RX解码得到的Video和Audio数据流分别通过Video TPG Subsystem和Audio Subsystem进行处理后再传输到TX通道。等于是说一个透传?或者经过tpg和audio进行加工处理再输出,总之就是这样。

在Sources界面中右键点击HDMI IP,选择Open IP Example Design创建例子工程,可以选择覆盖现在的临时工程或者不覆盖。

创建完成后的Diagram如下图
a3.png
基本结构就是刚才Overview中的结构,
只是加入了ps和一个iic,PS用来控制各个模块的工作,IIC用来读取TX通道对应的HDMI设备的EDID信息。TPG和Audio中间的处理模块就不详细说明了。

看到有3个约束文件,其中两个是跟audio相关的set_false_path约束,不去关心,还有一个就是针对zcu102的io约束。
在约束中reset引脚没有进行约束,将下面语句前的注释符号#删除掉,将reset绑定到板子上的SW14。

set_property PACKAGE_PIN AF15 [get_ports reset]
set_property IOSTANDARD LVCMOS33 [get_ports reset]

看原理图中这个复位信号是高电平有效,所以检查一下reset模块是否正确配置。下图可以看到ext_reset_in信号前没有小圆圈,代表它是高有效的,也可以双击IP再确认一下。
a4.png

这样就可以编译了。
直接选择Generate Bitsteam,等待吧。
我在虚拟机里面编译的,用了大概半个小时完成。可以看到有3W多个LUT,还好吧。
a5.png
a6.png

打开Bloc Design,输出Hardware并包含bitstream。然后Launch SDK。

等待SDK初始化完成后,建立一个standalone的bsp,打开system.mss找到v_hdmi_tx_ss单击Import Examples,选择Passthrough_A53,点击OK。
a7.png
生成代码并完成编译后,打开开发板,连接JTAG的USB和串口调试的USB,连接一个HDMI线从PC到开发板上的HDMI RX口(下面那个),连接一个HDMI线从开发板的TX口(上面那个)到显示器上,打开SecureCRT监视串口。
然后对FPGA进行烧录,并运行刚才生成的程序。

PC电脑屏幕一闪,找到了名为XILINX HDMI的显示设备;显示器一闪,接收到了开发板的视频输出信号。晃动鼠标,即可将鼠标移动到扩展的屏幕上去了。下面是串口的log信息。
a8.png
log信息中打印了连接状态,以及视频的格式。

RX stream is up
TX stream is up
--------
Pass-Through :
        Color Format:     RGB
        Color Depth:      8
        Pixels Per Clock: 2
        Mode:             Progressive
        Frame Rate:       60Hz
        Resolution:       1920x1080@60Hz
        Pixel Clock:      148500000
--------

打开NVIDIA控制面板,可以看到开发板虚拟的XILINX HDMI显示器。可以看到这个显示器能够支持4K的分辨率,还是不错的~
但是插到开发板上的普通显示器只能够支持1080p,而且FPGA中也没有例化缩放功能的IP,所以还是测不了这个分辨率的。
a9.png
可以看到其他的颜色深度、颜色格式、动态范围都可以设置,但是我的实体显示器可能有限制。

我们将实体显示器的EDID信息,可以用它的demo程序复制到虚拟显示器中。我们将PC到开发板的HDMI显示器拔下来,然后再串口工具中输入“e”,然后输入“2”回车,“99”回车退出,最后重新连接HDMI线。
a10.png
重新查看NVIDIA控制面板,发现XILINX HDMI变成了我的实体显示器的名称Samsung S22C200,最大分辨率也只能选择1080p了,一下子变成了lowB显示器,哈哈。
a11.png
在串口中还能设置很多功能,可以将输入视频截断,直接用tpg输出图像到显示器,可以改变pattern的样子,可以改变输出分辨率,可以改帧率,颜色深度,色彩空间,音频是否静音等等。

测试完毕。

总结

看来GT收发器还是非常强大的啊,这个demo做了一个HDMI的透传功能。我大概看了一下Example Design的Tx Only和Rx Only。
Tx Only中应该是直接使用TPG来产生数据流,并通过了一个Video Frame CRC的模块,不知道是干什么的。
a12.png
Rx Only收到数据后,经过CRC模块进入ila观测模块,用来在线仿真。
a13.png
这两个测试的结构都比较简单,就不做测试了。

透传测试成功了,就可以自己实际来做了,需要将直接经过tpg的axis图像信号截断,并存入内存,然后再从内存中读出数据并发送出去。后面就来干这个测试。
以前做了那么多的视频通路,这个做起来应该没有问题,就是驱动好麻烦!!!还有烦人的帧同步问题!!!

  • 7
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 16
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值