|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
步骤:
1,基于以前的工程进行修改,打开项目,打开BLOCK DESIGN,查看地址空间,修改IP核。
2,首先修改一下地址的长度,这里是以字节为单位的(所有的地址空间和地址长度都是以字节为单位)
3, 建立一个新的双口RAM,是TRUE DUAL PORT,设置位宽以及存储容量。
4, 修改一下VGA的接口,去掉地址寄存器。
5,修改AXI总线接口文件,挂在AXI总线上。
6,尝试编译一下,修改版本号退出。
7,在主项目VIVADO中从新加入模块,编译,排错,生成BIT文件。
8,在SDK里做对应的接口修改。实现之前代码。
9,使用2维度数组对应,进行编程,这样就可以在算法层次上进行抽象。
总结:
1,提供了一种方法,对特定,可以是非连续地址的寄存器(内存单元)读写操作。
2,在C语言里面使用数组与只对应,方便编程。数组是物理实现是一维连续的,C语言中多维数组实际在底层展开后也是一维数组。
3,可以在LINUX环境下使用mmap函数直接操作数组。可以使用FRAMEBUFFER方式驱动显示器。
4, 这里使用了FPGA专门的BRAM块实现显示缓存我们一般称作独立缓存,大家可以看出来,实际PS仅仅在数据需要更新的时候才写显存,其他时间PS不需要关注显存,也不用DMA给它传数据,说白了不占用处理器资源,这就是独立显存的好处。这个是为什么我们买电脑要带有独立显卡的重要原因。当然独立显存的弱点就是需要另外专门存储区域,在这个应用中占用了75%的7Z020的BRAM资源,这是相当客观的数量。另外如果显示器分辨率大了或者色彩深度大了,FPGA内部的BRAM 就不够用了,那时候必须要划出DDR3空间一部分做为共享显存。这些我们会在之后另作介绍。
注意:
1,例子所带的项目和代码是正确的,第 分钟时候屏幕出现的宏定义少了<<2。这是因为每个像素点分配4字节的空间,因此低N个像素点的偏移量是 N<<2。
#define SET_VGA_PIX(x,y,d) *(volatile unsigned int * )(0x43c00000 + (y*640+x)<<2 ) = d
2, 也可以用一下方式实现一维数组的读写:
unsigned int *ptr_vga = 0x43c00000 ;
#define SET_VGA_PIX2(x,y,d) ptr_vga[640*y+x]=d
ptr_vga已经被定义为一个unsigned int 是一个指向32位数据类型的指针,其下标为N的元素就在N<<2,这点C编译器自动处理好了。
3,以上两种方式在代码里面都有写,都有使用,都可以,大家注意区别学习。指针不容易掌握,但是搞明白了就很灵活。
|
-
-
01-,C语言二维数组映射到显示器的原理分析以及实现实例.part1.rar
32 MB, 下载次数: 2
, 下载积分:
资产 -9 信元, 下载支出 9 信元
-
-
01-,C语言二维数组映射到显示器的原理分析以及实现实例.part2.rar
32 MB, 下载次数: 2
, 下载积分:
资产 -9 信元, 下载支出 9 信元
-
-
01-,C语言二维数组映射到显示器的原理分析以及实现实例.part3.rar
32 MB, 下载次数: 2
, 下载积分:
资产 -9 信元, 下载支出 9 信元
-
-
01-,C语言二维数组映射到显示器的原理分析以及实现实例.part4.rar
32 MB, 下载次数: 2
, 下载积分:
资产 -9 信元, 下载支出 9 信元
-
-
01-,C语言二维数组映射到显示器的原理分析以及实现实例.part5.rar
26.29 MB, 下载次数: 2
, 下载积分:
资产 -8 信元, 下载支出 8 信元
|