ZYNQ7000 学习(二十八)C语言二维数组映射到显示器的原理分析以及实现实例 学

C语言二维数组映射到显示器的原理分析以及实现实例
学习内容
本课将 在上一课的基础上 修改一下 AXI_LITE_SLAVE外设,不再使用寄存
器而直接对 VGA显存里的数据进行进行写操作,达到以数组索引方式对显示画
面进行更新 的效果。
实现步骤
1 二维数组映射原理分析
在这里插入图片描述
如上图640480 显示器对应一个 640480 的二维数组,每个像素点是每一个数
组元素,实现对数组的操作实际就是直接对像素点的读写操作。
二维数组在物理空间的存放实际是以一维数组的方式实现的,例如下图:
在这里插入图片描述
对于640列, 480行 的二维数组,在 C 程序中访问下标为 [y][x]元素时,实际
访问地址为 基地址 +(640*x+y)。
实际通过地址对VGA 显存空间操作的代码可见工程提供的源码:片段代码 .txt 中:
在这里插入图片描述
2 本课通过对 27课工程进行修改

Step1 打开工程,编辑已有 IP。

在这里插入图片描述
由于需要实现直接地址索引的方式,且需要使用
PS 进行读和写,需要加入一个双口的 Block Ram。新建 Block Design ,加入 Block Ram IP ,由于需要读和写,则设置为 True Dual Port RAM
在这里插入图片描述
将Port A 和 Port B Options字节宽度设为 12bit,深度设为 307200,引出引脚,
生成 HDL 顶层文件,如下:
在这里插入图片描述
在这里插入图片描述
在vga_drv.v 中例化刚刚生成的模块:
在这里插入图片描述
修改vga_drv 的模块接口和多余输出位置 0
在这里插入图片描述
修改AXI 接口文件中对 vga 驱动模块的例化:
在这里插入图片描述
修改顶层文件中的地址宽度
在这里插入图片描述
尝试编译一下证明无误后,修改版本号退出IP 编辑。
在这里插入图片描述

Step2 在 vivado 工程中加入新的 IP ,综合实现,生成 bitstream,导出硬件到 SDK。

在这里插入图片描述

Step3 在 SDK里做对应的 代码 修 改,分别使用二维和一维数组的思路来进行显 示:

复制提供工程中的代码,并进行分析:
1 分析主程序 helloworld.c,对二维数组的元素进行操作
在这里插入图片描述
对一维数组形式进行操作:
在VGA.c 中:
在这里插入图片描述
在这里插入图片描述
使用两种显示方式进行测试:
在这里插入图片描述

读取显示数据,并进行检验测试:
在这里插入图片描述

Step4 找到 design_1_wrapper.bit vga_test.elf ZYNQ_FSBL.elf 生成 BOOT.bin。

在这里插入图片描述
至此BOOT.bin 生成,复制到 SD 卡,即可查看效果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值