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. AI公开课:19.03.07王海峰博士《人工智能技术与产业应用》课堂笔记以及个人感悟
  2. [转载] 让SciTE能够和IDE一样进行成员提示
  3. dump导入oracle需要提前建表吗_数据库dump导入
  4. linux 粘贴内容命令行,Linux下命令行中的复制和粘贴
  5. FOSS历史回顾:三代开源人的故事
  6. Angular网络请求的封装
  7. 使用https协议解决掉顽固不化的已解密的登录请求
  8. Arraylist理解(2)扩容
  9. Spring整合Mybatis之关联查询示例
  10. 跨域调用webapi web端跨域调用webapi
  11. R_地图上的热力气泡图
  12. mybatis主键是在insert前生成还是之后生成
  13. java rpg对战_java实现模拟RPG格斗
  14. Kaggle共享单车需求项目详解
  15. TypeScript 从零实现 axios 0x0
  16. 1817735-45-7,Carboxy-PEG2-sulfonic acid在EDC和HATU等活化剂存在下,末端羧酸可参与与伯胺的反应
  17. Java学习07–前端基础之CSS
  18. 如何快速下载720yun场景图片
  19. 电信主机托管费用_电信服务器托管费用
  20. JAVA毕业生就业信息管理系统计算机毕业设计Mybatis+系统+数据库+调试部署

热门文章

  1. 软件测试入职之后的几件事
  2. 实习半年以来的感受和收获
  3. 树莓派+DHT11温湿度传感器+yeelink物联网云
  4. 如何用arduino+ethernet shield(W5100)与yeelink结合5分钟实现传感器数据web上传
  5. PTA-成绩录入时的及格与不及格人数统计
  6. 2018html游戏引擎,技术驱动未来!全球知名游戏引擎巨头Unity确认参展2019 ChinaJoy...
  7. Vue3视频播放(Video)
  8. vue3 使用video播放视频
  9. 【解决方案】“/usr/bin/nvcc“ is not able to compile a simple test program解决方案
  10. WPF CS0234命名空间 *.*中不存在类型或命名空间名“Windows“(是否缺少程序集引用?)