zynq 7000 的HDMI 显示实验

用了很多年的zynq 7000,一直就没做hdmi 显示实验。前几天终于做了这个实验,也就做一个总结。

我的实验是在微相的z7-lite下根据他们的教程完成的。平台是windows 10 , Vivado 2018.3。如果硬件设计不一样,主要是替换rgb2dvi 模块和gpio 中断部分。

工程资料下载,

链接:https://pan.baidu.com/s/11-RLOYtl1AyxcQ_XGbw2YQ 
提取码:zvnc 

这个下载里里三个文件,一个hdmi_out 全工程67M,下了这个就包含其他2个了,如果只是ip ,可以下hmdiip(375k),如果只是源代码 hdmisrc( 15M),主要是图形数据占空间。
如果你有微相的资料,那就是 z7_Lite\03_SDK_Demo\17_hdmi_out

IP准备

这个实验用了2个IP,可以从 https://github.com/Digilent/vivado-library 下载。但我实验中用的是微相提供的是rgb2dvi_v1_2,这个ip 在工程的ip_repo目录里。

该链接内有 Digilent 提供的很多个自定义 IP,但这个实验只用2个。其中 axi_dynclk  是时钟发生模块,会根据不同的屏幕分辨率,自动生成相应的像素时钟和串行时钟,而rgb2dvi  模块会将图像的红绿蓝信号转换成MDS 信号, 送往 HDMI 端口发出。网上版本比较新,我本想用新版本做测试的,结果sdk的时候报错,只好用微相提供的版本。IP文件目录如下图所示:


在这里特别注意: if 文件目录也要复制,就是if 目录,其中包含了tmds 目录。ip目录下的 axi_dynclk, rgb2dvi 。图中内容复制到你的你的ip_repo,就是集中放IP的目录,我这目录下就放了其他IP。

开始的时候,我习惯只把ip 下的目录复制过来,结果通过不了。

硬件设计

在 Vivado 下新建一个工程,名字为 hdmi_out。整个硬件设计是比较复杂的,我把它分为几个部分:

添加ip目录,添加并配置zynq,添加 VDMA IP,AXI-Stream Subset Converter 模块,AXI4-Stream to Video Out 模块,Video Timing Controller 模块,rgb2dvi 模块,中断合并。

图像数据的流向是:zynq的DDR中, VDMA 读取,AXI-Stream Subset Converter转换,AXI4-Stream to Video Out 模块,rgb2dvi 模块输出。

Run Automation Connect的时候,一般只勾选当时介绍的IP, 如果多勾了,与后面指定操作冲突时,可以选择脚,右键,Disconnect Pin,使它脱离连接。

添加ip 目录 

在主窗口左侧边栏 Project Manager 下点击 Project Settings 选项, 向工程中添加这两个自定义 IP,其实是把 IP 存放目录加上去如下图所示:


可以Project Manager -> IP Catalog 看到我们添加的IP。 

原理图添加并配置zynq

新建一个原理图, 加入zynq ,原理图是这样的:

 双击zynq进行设置:

点击 PS-PL Configuration 选项, 在 HP Slave AXI interface 下勾选 S AXI HP0  interface, 本节实验要用这个端口获取 DDR 中存储的图像数据。


使能 UART0,这与开发板有关,z7_lite对应的是14,15。

点击 Clock Configuration 选项,在 PL Fabric Clocks 窗口,勾选 FCLK_CLK0和 FCLK_CLK1,并将其分别设为 100, 140MHz。 其中 FCLK_CLK0 将作为 Zynq配置各个模块的时钟, 而 FCLK_CLK1 将作为图像数据流的时钟,


再点击 DDR Configuration, 选择跟开发板一致的 DDR 型号.z7_lite 是 MT41K256M16 RE-125,16 Bit

再点击 Interrupt 选项,激活 IRQ_F2P[15:0]选项,点击 OK,配置完成。


手动连接 FCLK_CLK0 到 MAXI_GPO_ACLK, 连接 FCLK_CLK1 到 S_AXI_HP0_ACLK,

检查并对比,原理图是否一致。

添加 VDMA IP 

如下图所示:

VDMA 添加完成如下图所示:
 


 

双击上图 axi_vdma_0, 进行参数配置。 首先 Basic 选项, Address Width设为 32 bits, 寻址空间可以达到 4GB。 Frame Buffers 设为 1,取消 Enable WriteChannel 选项,因为本实验 VDMA 只从 DDR 中读取图像数据。 在 Enable Read Channel 下, 将 Line Buffer Depth 改为 4096, 其它默认, 如下图所示:

再点击 Advanced 选项卡, 将 GenLock Mode 改为 Master,点击 OK 完成配置。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值