一、需求
项目需要展示FPGA处理后的图像,因此得使用板载的接口接显示器进行显示。此前曾经在ZCU102上用SD卡烧录过Ubuntu桌面系统,并且成功显示。但是,在zynq上编译linux镜像的过程太麻烦,而且经常莫名其妙报错,实在不方便调试。因此尝试使用SDK的example工程进行Standalone的显示驱动调试,初衷就是为了减少工作量。
事后发现,即使用standalone的显示驱动,依然需要踩很多坑。本篇博文将调试的过程详细列举出来,一方面方便以后的复用,另一方面也为其他使用ZCU102的同志提供参考。
二、总览
根据ZCU102板子的资料,板子具备HDMI和Displayport两种硬件接口,分别分布在下图的右边倒数第五个和倒数第三个。
本博文中使用的vivado版本为2019.1。ZCU102的板子版本为rev1.1,由于rev1.1的ZCU102更换了DDR的型号,因此在进行block design的zynq核配置时,必须修改DDR的设置,否则PS端就会罢工。这里放一下正确的DDR配置图,红框中的是修改后的正确参数。(坑点1)
三、调试过程
1.HDMI接口调试
1.1连出信号的方式(不可行)
由于PS内部没有集成HDMI控制器,因此第一个想法是在PL端的block design中接出HDMI的TMDS信号(参考正点原子的DFZU2EG_4EV MPSoC 之嵌入式 VITIS 开发指南),然后将信号通管脚约束绑定到板载HDMI的硬件接口上。通过查阅ug1182,找到了ZCU102的HDMI接口对应的TMDS管脚,如下图所示。然而,将对应的管脚号与PL端信号绑定并进行vivado综合时,一直报错说没有指定管脚电压。
于是,进一步查阅表格发现,这些信号的电压不是传统的LVCMOS33或者LVDS之类,而是备注为U1 MGT,且没有提供具体的电压(I/O standards do not apply),如下图所示。去网上查了一下资料,发现ZCU系列的板子的HDMI口是使用了高速收发器(GTH/GTY)之类的接口标准,该类接口比较复杂,需要专用的IP核处理,无法用一般的信号连出方式进行驱动。因此,放弃了这种连出信号的方式。(坑点2)
1.2通过HDMI 1.4/2.0 Transimitter Subsystem配置的方式(可行但复杂)