本编文章的目的主要用简明的方法在纯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 */ 
#define XPAR_DDR_MEM_BASEADDR 0x00000000U 
#define XPAR_DDR_MEM_HIGHADDR 0x3FFFFFFFU

等会我们要使用这个地址,对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的读写相关推荐

  1. ps读写ddr3里面的数据 zynq_Zynq:用PS控制DDR3内存读写

    大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分.大侠可以关注FPGA技术江湖,在"闯荡江湖"."行侠仗义"栏里获取其他感兴趣的资源,或者一起煮酒言欢. ...

  2. zynq 7000 的 iic 外设编程

    本文主要介绍zynq 7000下的i2c ps 外设编程.实验是在vivado 2018.3 上完成的. 本实验的前提条件是你已经做过了zynq 7000的helloworld sdk 实验.一般开发 ...

  3. 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地址映射 ...

  4. ZYNQ开发系列——为PS和PL的交互做准备

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 ZYNQ开发系列--为PS和PL的交互做准备 我们使用ZYNQ的片子,肯定存在PS和PL交互的情况.一般来说大部分应用都是以PS为主机 ...

  5. ZYNQ开发系列——把PS和PL程序烧写到FLASH中

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 ZYNQ开发系列--把PS和PL程序烧写到FLASH中 生成 fsbl.elf 生成 BOOT.bin 下载 BOOT.bin 文件到 ...

  6. ZYNQ 7000 PS和PL 信号、接口、管脚分布

    1.ZYNQ 7000 PS端和PL端都有自己独立的电源引脚(Power Pin) 2.PS端接口和信号: PS_CLK(System reference clock) POR_RST_N(Power ...

  7. 基于ZYNQ 7000的1553B总线控制器测试系统的设计与实现

    为了方便对1553B设备进行测试,本文介绍了一种基于ZYNQ 7000 平台的1553B总线控制器测试系统的设计与实现方法.该系统首先在 PC机上通过人机交互界面配置数据,支持灵活对数据故障注入,然后 ...

  8. 基于 PYNQ 的 AXI 总线主从控制编写(ddr3的读写)

    菜鸟一枚,最近也学习了关于 AXI 总线的相关知识.基于 PYNQ 编写了一个简单的 AXI 主从控制(牵涉到 DDR3 的读写). 设计目的 设计出以下一个通过 AXI 总线连接的简单片上系统.包含 ...

  9. Xilinx zynq USB开发

    如何区分/dev/input/event cat /proc/bus/input/devices Xilinx zynq USB开发 https://blog.csdn.net/Zhu_Zhu_200 ...

最新文章

  1. 物联网时代传感器厂商竞争格局揭秘
  2. 开线程插数据_python笔记7-多线程之线程同步(锁lock)
  3. 第U题:Java BigDecimal解决··Noder现在上初三了,正在开始复习中考。他每天要计算型如..............
  4. matlab2c使用c++实现matlab函数系列教程-binostat函数
  5. Tesler去世丨你逃不过复制粘贴,同样也逃不过Tesler定律
  6. 我们为什么需要SDN?
  7. 在小树林飞也能又快又稳,这是港科大沈劭劼组的「猛禽」无人机重规划框架...
  8. JDK粗体绘制效果为何如此之差
  9. Centos yum安装snmp
  10. 匿名方法和Lambda表达式-天轰穿
  11. 第22篇-安卓手机端抓包软件VNET介绍
  12. 直播源 直播地址 测试地址 http rtsp rtmp hls 短视频测试地址
  13. 【7集iCore3基础视频】7-5 iTool2驱动安装
  14. 什么是AEC-Q200?AEC-Q200的认证对象和测试项目
  15. Total Control电脑控制Android手机
  16. 英语广播原声听力100篇MP3及听力原文
  17. MPCS-341 3A 光电耦合器 用于IGBT/MOSFET隔离栅极驱动 完美代替TLP5754
  18. 跨平台界面库 linux,超轻量/跨平台UI框架(目前已经支持: Windows, Android, Linux, VR)...
  19. Mac 下Charles的安装和抓包
  20. 8021什么意思_违章代码8021是什么意思

热门文章

  1. 图片上传流程前端上传文件后端保存文件并返回图片地址
  2. Gbase XDM API接口--打开xdm连接
  3. 常用IP地址端口对照表
  4. [转]来自西弗吉利亚大学li xin整理的CV代码合集
  5. 吉林省松原市谷歌高清卫星地图下载
  6. 论文投稿必看,审稿人意见互相矛盾,作者该怎么办?
  7. mysql复合索引(联合索引)的使用场景
  8. 2021湖南省地区高考成绩排名查询,湖南高考排名查询方法,2021年湖南高考成绩位次全省排名查询...
  9. php生成二维码并与背景图片合成
  10. 【12c】扩展数据类型(Extended Data Types)-- MAX_STRING_SIZE