【ZYNQ-7000开发之六】使用PS控制DDR3的读写
本编文章的目的主要用简明的方法在纯PS里对DDR3进行读写。
本文所使用的开发板是Miz701
PC 开发环境版本:Vivado 2015.4 Xilinx SDK 2015.4
10.0本章难度系数★☆☆☆☆☆☆
10.1 搭建硬件工程
Step1:新建一个名为为Miz701_sys的工程
Step2:选择RTL Project 勾选Do not specify source at this time
Step3:选择xc7z010clg400-1为开发器件。
Step4:单击Finish
10.2使用IP Integrator创建硬件系统
Step1:单击Create Block Design
Step2:输入system
Step3:单击下图中添加IP按钮
Step4:搜素单词z选择ZYNQ7 Processing System,然后双击
Step5:添加进来了ZYNQ CPU IP,双击对其进行配置。
Step6:修改输入时钟为50MHZ,PL端频率FCLK_CLK0为100MHZ。
Step7:修改内存类型为MT41K256M16 RE-125。
Step8:在MIO configuration选项中,勾选添加UART1接口,单击OK完成修改。
Step9:单击Run Block Automation
Step10:直接单击OK
Step11:在你点击了OK后,你会发现DDR以及FICED_IO自动的延伸出来。
Step12:连线的作用就是把PS的时钟可以接入PL部分,当然这里我们暂时用不到PL部分的资源。在Block文件中,我们迚行连线,将鼠标放在引脚处,鼠标变成铅笔后迚行拖拽,连线如下图所示:
Step13: 右击 system.bd, 单击Generate Output Products
Step14:支部操作会产生执行、仿真、综合的文件
Step15:右击system.bd 选择 Create HDL Wrapper 这步的作用是产生顶层的HDL文件
Step16:选择Leave Let Vivado manager wrapper and auto-update 然后单击OK
10.3导出SOC硬件到SDK
Step1:File->Export->Export Hardware
Step2:勾选Include bitstream 直接单击OK
Step3:File->Launch SDK加载到SDK
Step4:单击OK
10.4软件工程
新建一个miz701_ps_ddr空的工程,并且添加main.c
DDR3的地址建好后,在mem_demo_bsp->ps7->cortexa9_0的路径下,打开xparameters_ps.h这个头文件,这个头文件是cortexA9可以直接控制的外设地址的宏定义。在里面可以找到DDR的地址,可以看到如下代码:
/* Canonical definitions for DDR MEMORY */ |
等会我们要使用这个地址,对DDR3进行读写操作,读写操作函数在mem_demo_bsp->ps7->cortexa9_0的路径下,打开xil_io.h这个头文件,这个头文件是cortexA9可以直接控制的内存映射或者映射到了地址空间的IO。在里面可以看到如下代码:
//从某个地址读数据
u8 Xil_In8(INTPTR Addr);
u16 Xil_In16(INTPTR Addr);
u32 Xil_In32(INTPTR Addr);
//向某个地址写数据。
void Xil_Out8(INTPTR Addr, u8 Value);
void Xil_Out16(INTPTR Addr, u16 Value);
void Xil_Out32(INTPTR Addr, u32 Value);
OK,有了这些就可以简单的对DDR进行续写操作了
10.4代码实现
/* * main.c * * Created on: 2016年4月4日 * Author: Administrator */ #include "stdio.h" #include "xparameters.h" #include "xparameters_ps.h" #include "xil_printf.h" #include "xil_io.h" #define DDR_BASEARDDR XPAR_DDR_MEM_BASEADDR + 0x10000000 int main() { int i; int rev; xil_printf("Hello World\n\r"); for(i=0; i<32; i++) { Xil_Out32(DDR_BASEARDDR+i*4,i); } for(i=0; i<32; i++) { rev = Xil_In32(DDR_BASEARDDR+i*4); xil_printf("the address at %x data is : %x \n\r" ,DDR_BASEARDDR+i*4, rev); } return 0; } |
10.5 测试结果
串口终端的结果如下:
Hello World
the address at 10000000 data is : 0
the address at 10000004 data is : 1
the address at 10000008 data is : 2
the address at 1000000C data is : 3
the address at 10000010 data is : 4
the address at 10000014 data is : 5
the address at 10000018 data is : 6
the address at 1000001C data is : 7
the address at 10000020 data is : 8
the address at 10000024 data is : 9
the address at 10000028 data is : A
the address at 1000002C data is : B
the address at 10000030 data is : C
the address at 10000034 data is : D
the address at 10000038 data is : E
the address at 1000003C data is : F
the address at 10000040 data is : 10
the address at 10000044 data is : 11
the address at 10000048 data is : 12
the address at 1000004C data is : 13
the address at 10000050 data is : 14
the address at 10000054 data is : 15
the address at 10000058 data is : 16
the address at 1000005C data is : 17
the address at 10000060 data is : 18
the address at 10000064 data is : 19
the address at 10000068 data is : 1A
the address at 1000006C data is : 1B
the address at 10000070 data is : 1C
the address at 10000074 data is : 1D
the address at 10000078 data is : 1E
the address at 1000007C data is : 1F
....................
10.6 本章小结
通过本章的学习,在仅仅使用PS可以对DDR3读写,这样在处理一些速度不快但是量很大的数据时很方便,当然这种方式每次读写都需要CPU干预,效率是比较低的,主要看需求吧。
参考博文:https://www.cnblogs.com/milinker/p/5905923.html
【ZYNQ-7000开发之六】使用PS控制DDR3的读写相关推荐
- ps读写ddr3里面的数据 zynq_Zynq:用PS控制DDR3内存读写
大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分.大侠可以关注FPGA技术江湖,在"闯荡江湖"."行侠仗义"栏里获取其他感兴趣的资源,或者一起煮酒言欢. ...
- zynq 7000 的 iic 外设编程
本文主要介绍zynq 7000下的i2c ps 外设编程.实验是在vivado 2018.3 上完成的. 本实验的前提条件是你已经做过了zynq 7000的helloworld sdk 实验.一般开发 ...
- Zynq 7000 PL和PS通信——使用BRAM
Zynq 7000 PL和PS通信--使用BRAM 介绍 1 准备工作 2 PL搭建BRAM 3 下载PL程序 4 编写Linux应用程序 5 问题 5.1 BRAM的寻址的问题 5.2 PS地址映射 ...
- ZYNQ开发系列——为PS和PL的交互做准备
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 ZYNQ开发系列--为PS和PL的交互做准备 我们使用ZYNQ的片子,肯定存在PS和PL交互的情况.一般来说大部分应用都是以PS为主机 ...
- ZYNQ开发系列——把PS和PL程序烧写到FLASH中
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 ZYNQ开发系列--把PS和PL程序烧写到FLASH中 生成 fsbl.elf 生成 BOOT.bin 下载 BOOT.bin 文件到 ...
- ZYNQ 7000 PS和PL 信号、接口、管脚分布
1.ZYNQ 7000 PS端和PL端都有自己独立的电源引脚(Power Pin) 2.PS端接口和信号: PS_CLK(System reference clock) POR_RST_N(Power ...
- 基于ZYNQ 7000的1553B总线控制器测试系统的设计与实现
为了方便对1553B设备进行测试,本文介绍了一种基于ZYNQ 7000 平台的1553B总线控制器测试系统的设计与实现方法.该系统首先在 PC机上通过人机交互界面配置数据,支持灵活对数据故障注入,然后 ...
- 基于 PYNQ 的 AXI 总线主从控制编写(ddr3的读写)
菜鸟一枚,最近也学习了关于 AXI 总线的相关知识.基于 PYNQ 编写了一个简单的 AXI 主从控制(牵涉到 DDR3 的读写). 设计目的 设计出以下一个通过 AXI 总线连接的简单片上系统.包含 ...
- Xilinx zynq USB开发
如何区分/dev/input/event cat /proc/bus/input/devices Xilinx zynq USB开发 https://blog.csdn.net/Zhu_Zhu_200 ...
最新文章
- 物联网时代传感器厂商竞争格局揭秘
- 开线程插数据_python笔记7-多线程之线程同步(锁lock)
- 第U题:Java BigDecimal解决··Noder现在上初三了,正在开始复习中考。他每天要计算型如..............
- matlab2c使用c++实现matlab函数系列教程-binostat函数
- Tesler去世丨你逃不过复制粘贴,同样也逃不过Tesler定律
- 我们为什么需要SDN?
- 在小树林飞也能又快又稳,这是港科大沈劭劼组的「猛禽」无人机重规划框架...
- JDK粗体绘制效果为何如此之差
- Centos yum安装snmp
- 匿名方法和Lambda表达式-天轰穿
- 第22篇-安卓手机端抓包软件VNET介绍
- 直播源 直播地址 测试地址 http rtsp rtmp hls 短视频测试地址
- 【7集iCore3基础视频】7-5 iTool2驱动安装
- 什么是AEC-Q200?AEC-Q200的认证对象和测试项目
- Total Control电脑控制Android手机
- 英语广播原声听力100篇MP3及听力原文
- MPCS-341 3A 光电耦合器 用于IGBT/MOSFET隔离栅极驱动 完美代替TLP5754
- 跨平台界面库 linux,超轻量/跨平台UI框架(目前已经支持: Windows, Android, Linux, VR)...
- Mac 下Charles的安装和抓包
- 8021什么意思_违章代码8021是什么意思
热门文章
- 图片上传流程前端上传文件后端保存文件并返回图片地址
- Gbase XDM API接口--打开xdm连接
- 常用IP地址端口对照表
- [转]来自西弗吉利亚大学li xin整理的CV代码合集
- 吉林省松原市谷歌高清卫星地图下载
- 论文投稿必看,审稿人意见互相矛盾,作者该怎么办?
- mysql复合索引(联合索引)的使用场景
- 2021湖南省地区高考成绩排名查询,湖南高考排名查询方法,2021年湖南高考成绩位次全省排名查询...
- php生成二维码并与背景图片合成
- 【12c】扩展数据类型(Extended Data Types)-- MAX_STRING_SIZE