上一篇文章,
《Vitis ZYNQ开发秘籍》- PS 端任意控制 VGA 显示画面的硬件架构
,已经介绍了在 Vivado 中需要调用的 IP 已经各 IP 间的连线。
而在实现显示的功能,咱们还需要对 VDMA 这个 IP 进行配置,如果没有正确配置,VDMA 是工作不起来的。当然从图中,也可以看出 VDMA 的配置接口 AXI_LITE 是连接在 ZYNQ IP 的。所以咱们要在 Vitis 中编写 VDMA 的控制代码。
对于 VDMA 的控制代码,先看看文档(PG020)里面说的需要配置哪些寄存器。
文档里面包含了 VDMA 的 写 和 读 两个通道,但咱们在本次过程中,只使用到了 读通道,所以只需要看介绍中关于 MM2S 的信息就行了。
咱们将上面文档中关于 MM2S 通道的控制信息单独列出来:
1、将控制信息写入通道 VDMACR 寄存器(MM2S的偏移量为0x00),如果需要的话设置启用中断,并设置 VDMACR.RS=1 开始AXI VDMA通道运行。
2、在通道 START_ADDRESS 寄存器 1到N 中写入一个有效的视频帧缓冲区开始地址,其中N等于帧缓冲区 ( 对于MM2S,偏移0x5C到0x98 ) 。如果需要,设置 REG_INDEX 寄存器。
3、写一个有效的帧延迟 (仅对Genlock Slave有效)并大步走到通道FRMDLY_STRIDE 寄存器 (MM2S偏移0x58)。
4、将有效的水平大小写入通道 HSIZE 寄存器(对于 MM2S 偏移量为 0x54 )。
5、将有效的垂直大小写入通道 VSIZE 寄存器(对于MM2S偏移量为0x50) 。这将启动传输视频数据的通道。
当然上面的这 5 个步骤,是启动 VDMA 传输的最起码的步骤,当然也可以有一些其他的完善步骤。对于这些寄存器更加详细的介绍,大家也可以参考 PG020 这个文档。
咱们按照上面的步骤,代码如下:
简单说明代码的意思,将 VDMA 配置的帧缓存起始地址为 0x2000000,尺寸大小为 1280x720,与 720P 的像素尺寸保持一致。
代码编译,下载后,效果如下。
是的,显示出来就这么奇葩,为什么会这样呢?
因为目前 DDR3 里面的数据,可以大部分都是一些随机数,大家可能会想咱们现在明明没有向 DDR3 写入数据,但不得不承认的一个事实,你没写数据并不代表它里面没数据,DDR3 在没有写入数据之前,就是这些随机数。
好了,咱们现在往 DDR3 写入一些测试数据,让它显示类似彩条一样的东西。
运行后的显示结果如下:
现在咱们可以成功的通过 ARM 那边直接控制 VGA 显示的内容了,大家也可以自己更改 C 语言代码进行其他的显示哦。
#下期预告#
咱们现在已经可以在 PS 端控制 VGA显示的内容了,咱们下一期继续在本章的工程上做一个稍微有意思一点的东西,把一副图片预先存在 SD 卡中,之后 ARM 读取 SD 卡中的图片至 DDR3,进而 VGA 显示 DDR3 中的图片。
简言之,VGA 显示 SD 卡中存储的图片!
#《Vitis ZYNQ 开发秘籍》往期精彩#
【视频】《Vitis ZYNQ开发秘籍》第二章-开始使用矿板
【视频】《Vitis ZYNQ开发秘籍》第一章-硬件资源介绍
第九章:《Vitis ZYNQ开发秘籍》- PS 端任意控制 VGA 显示画面的硬件架构
第八章:《Vitis ZYNQ开发秘籍》- 在矿板上实现 VGA 画面显示
第七章:《Vitis ZYNQ开发秘籍》-矿板打印“Hello World!”
第六章:《Vitis ZYNQ开发秘籍》-开始使用 Vitis
第五章:《Vitis ZYNQ开发秘籍》- 用户IP打包及ZYNQ IP设置
第四章:《Vitis ZYNQ 开发秘籍》矿板 EABZ4205 的 PL 端晶振改造
第三章:《Vitis ZYNQ开发秘籍》PL端实现流水灯(上)-使用PL端晶振
第二章:《Vitis ZYNQ开发秘籍》-开始使用矿板
第一章:EBAZ4205 矿板+转接板 硬件平台介绍
前言:对于ZYNQ,我想重新写一套教程
ddr传输 pl ps_Vitis ZYNQ开发秘籍 PS 端任意控制 VGA 显示画面最终实现
最新推荐文章于 2024-07-31 23:34:51 发布
本文详细介绍了如何在ZYNQ FPGA开发中,利用DDR传输和PS端控制,实现VGA显示画面的终极方法。通过深入探讨PL和PS之间的交互,揭示了在Xilinx Vitis环境下实现这一目标的关键步骤和技术细节。
摘要由CSDN通过智能技术生成