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 卡,即可查看效果。

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

  1. 【二十八宿】又叫二十八舍或二十八星,是今人为观测日、

    [二十八宿]又叫二十八舍或二十八星,是今人为观测日.月.五星运行而划分的二十八个星区,用来解释日.月.五星运行所到的地位.每宿蕴含若干颗恒星.二十八宿的称号,自西向东排列为:东方苍龙七宿(角.亢kan ...

  2. Shell脚本学习-阶段二十八-shell练习二

    文章目录-练习2 前言 1.编写shell脚本程序,完成如下功能: 输出hello world ! 2.编写shell脚本程序,完成如下功能: 输入你的姓名,输出 hello, nice to mee ...

  3. ZYNQ7000学习(十八)多路 PWM 原理分析以及实现试验

    多路 PWM 原理分析以及实现试验 基本原理(参考 http͗//www͘fpga4fun͘com/PWM_D_C͘html) PWM_(Pulse_Width_Modulation) A PWM t ...

  4. 嵌入式系统设计师学习笔记二十八:嵌入式程序设计③——高级程序设计语言

    嵌入式系统设计师学习笔记二十八:嵌入式程序设计③--高级程序设计语言 解释程序和编译程序 编译器的工作阶段示意图 语法错误:非法字符,关键字或标识符拼写错误 语法错误:语法结构出错,if--endif ...

  5. OpenCV学习笔记(二十六)——小试SVM算法ml OpenCV学习笔记(二十七)——基于级联分类器的目标检测objdect OpenCV学习笔记(二十八)——光流法对运动目标跟踪Video Ope

    OpenCV学习笔记(二十六)--小试SVM算法ml 总感觉自己停留在码农的初级阶段,要想更上一层,就得静下心来,好好研究一下算法的东西.OpenCV作为一个计算机视觉的开源库,肯定不会只停留在数字图 ...

  6. 【Vue学习】—Vue UI组件库(二十八)

    [Vue学习]-Vue UI组件库(二十八) 一.移动端常用的UI组件库 二.PC端常用的UI组件库 三.具体使用自行查看文档,这里就不做概述了

  7. JavaScript学习(二十八)—事件冒泡和事件捕获

    JavaScript学习(二十八)-事件冒泡和事件捕获 一.什么是事件流? 简单说,事件流就是指事件的执行顺序,他包含两种模式:事件冒泡.事件捕获. (一).事件冒泡 最常用的一种模式,就是指事件的执 ...

  8. 深度学习之图像分类(二十八)-- Sparse-MLP(MoE)网络详解

    深度学习之图像分类(二十八)Sparse-MLP(MoE)网络详解 目录 深度学习之图像分类(二十八)Sparse-MLP(MoE)网络详解 1. 前言 2. Mixture of Experts 2 ...

  9. Slicer学习笔记(二十八)Elastix扩展模块

    Slicer学习笔记(二十八)Elastix扩展模块 1.代码结构 1.1.代码结构 1.2.页面布局 1.3.Elastix路径选择 [可选] 2.执行配准 2.1 先去找到elastix.exe的 ...

最新文章

  1. vb打开服务器excel文件路径,咨询下VB如何打开EXCEL文件并将内容显示在listbox中
  2. c++中使用Tesseract-OCR
  3. mysql sql乱码怎么解决_MYSQL数据库导入SQL文件出现乱码如何解决
  4. 第七章_类_7.4 类的作用域(加了自己的总结部分)
  5. hdu2094产生冠军
  6. 或许每条喵咪上辈子都是陨落的码农
  7. [css] 使用纯CSS代码实现动画的暂停与播放
  8. bfc是什么_一次弄懂css的BFC
  9. bootstrap 输入错误提示_win7系统提示explorer.exe应用程序错误怎么办
  10. python找到二维数据矩阵中的最大最小值直接使用min、max函数
  11. Java-API:java.util.ArrayList
  12. python简明教程中文pdf-简明Python教程-中文版.pdf
  13. 自学单片机能找到工作吗?能有出路吗?
  14. APISpace 绕口令API
  15. 面对ONF挑衅 思科用ACI回绝SDN挑战
  16. 【python】算术运算报错can‘t multiply sequence by non-int of type ‘float‘
  17. 多功能纺织品易燃性测试仪市场现状及未来发展趋势
  18. 内存类型UDIMM、RDIMM、LRDIMM
  19. Ubuntu系统迁移至固态硬盘(生产环境勿用)
  20. 校验日期+时间部分的常用方法

热门文章

  1. 六、文件管理(5.文件存储空间的管理)
  2. Android定时关机
  3. 区块链支付,跨境支付新的解决方案
  4. 如何与爱发脾气的人相处
  5. 端口扫描的CS木马样本的分析
  6. hd2 android,HD2 WP7+Android 双系统刷机图文教程
  7. FBI和DHS在响应网络攻击时为何存在分歧
  8. 解决ios上传图片被旋转的问题
  9. EditText 获取不到焦点
  10. ActionListener的三种实现方法