在Zynq UltraScale+ example的基础上,舍弃掉在PS端做驱动的方案。在PS端搭建工程,并利用串口进行配置。对于多路HDMI的不同输入输出控制起来较为方便,且利用PL来做驱动,结构更加清晰。
在做HDMI驱动的时候要了解两个重要的概念,一个是EDID,一个是Infoframe。
一、EDID
EDID相当于是DP端(SINK端)内部所支持的视频格式信息,如分辨率帧率等。如果发送的HDMI 视频格式,DP端不支持则无法显示。通常是用DDC专用通道去读取SINK端的rom。通常情况下我们也可以通过下载软件来获取显示屏的参数。
二、Infoframe
Infoframe是插入在HDMI通道中的辅助信息,包括了发送的帧频率格式,版本号等等。一般是在读取EDID的参数后,根据我们的需求在发送Infoframe确定我们所要的格式。
需要注意的是,不同与SDI的Payload ID,HDMI的Infofram分为很多种,具体参考HDMI 2.0 和CEA-861-D,在工程中,我们用到了AVI Infoframe(视频格式相关) 、Audio InfoFrame(音频相关)、Vendor Specific InfoFrame(厂商相关)、Dynamic Range and Mastering InfoFrame(动态配置相关),具体在FPGA框架中如下。
三、软件端的架构
四、PL驱动架构
五、实现过程