作者:Hello,Panda 今天熊猫君要分享的是如何使用 Xilinx ZYNQ Ultrascale+ MPSoC 的 PS 端原生 DP 接口实现 LIVE 模式输出 3860*2160,30Hz 视频。 熊猫君先介绍下开发环境: a) 板子:自制 MPSoC 电路,基于 ZU4EV ; b) 硬件开发环境: Vivado2021.1 ; c) 软件开发环境: Vitis 2021.1 ,运行裸机测试程序。 (一)介绍一下 PS 端的 DP 接口: ( 1 )支持 2-LANE 5.4Gbps ,符合 VESA DisplayPort v1.2a 规范; ( 2 )支持 4K 30Hz 视频输出,支持仅 Y , YCbCr444 , YCbCr422 , YCbCr420 , RGB 等各种格式,支持 6 、 8 、 10 、 12bit 色彩深度,支持 48KHz 音频输出; ( 3 )支持视频接口和图形接口叠加,支持上采样和将采样; ( 4 )支持 DPDMA 直接从 DDR Frame buffer 读取视频源或来自 PL 的实时 LIVE 视频。 (二)为什么要使用 Live 模式? 一般的应用,都是直接通过 DPDMA 直接从 DDR 的 Frame Buffer 读取视频流和图形流进行显示。使用 PL 端直接输入的 LIVE 模式,主要是为了减少显示延时。 PL 端处理的结果如果先写入 DDR 再通过 DP 显示的话,要经过帧缓存管理,至少需要增加 2 帧以上的延迟,无法满足一些延时需求苛刻的场合,因此,这个时候 LIVE 模式就有它的优势了。 (三) Xilinx MPSoC PS 端原生 DP 接口有哪些缺陷呢? 这个原生 DP 接口实际上是不太完整的,主要是因为它只能支持 2-LANE 5.4Gbps ,也就是说最高性能只能到 4K 30Hz ,无法满足许多场合最低要求 4K 60Hz 的硬性需求;由此,还派生出另外一个问题,如果是显示设备有 DP 接口还好,如果只有 HDMI 接口的话,就需要转接,这个 DP 转 HDMI 转接线的选取还极其的难,有讲究,否则就用不了,或握手训练不成功,或显示黑屏等: a) 必须是主动式的,意思是要有转接芯片,支持 AUX 握手(不能是 IIC-OVER-AUX )进行通道和速率切换、训练的; b) 必须是支持最少 4K 60Hz 的主动式转接线,输出接口至少是可以支持 HDMI2.0 的。 (四) ZYNQ Ultrascale+ MPSoC IP 核的配置 IP 核的配置如下,将 Live Video 置‘ 1 ’,如果需要音频,就将 Live Video 置‘ 1 ’,如下图: 然后, IP 就会新增 DP LIVE 引脚,标准的 BT1120 时序接口,如下图: 如果需要 4K 30Hz 显示,那么 dp_video_in_clk 就需要 270MHz ,详细的时序参数自行阅读标准文档 CEA-861-G ,如下图: (五) Vitis 端的测试程序 测试程序其实简单很多,只需要将 avbuff 驱动里面设置为 live 模式,然后 Dp 驱动里面做好 aux 握手和 lane 数、速率训练即可。无需通过中断做帧缓存管理, PL 端输入的时序正确就行了。 (六) PL 产生的测试彩条运行效果 顺便,熊猫君还想提一嘴,就是对各种电视的兼容性强、转换稳定的 DP 转 HDMI 线真的不好找,一些常见的厂家比如毕亚兹、也仁、胜为、山泽、晶华、威迅、绿联的都试过,最好使的还是绿联的一款支持 4K/60Hz 的主动式转接线,到目前为止,市场上主流的电视还没有出现兼容性不好或传输不稳定的情况。