本编文章的目的主要用简明的方法在纯PS里对DDR3进行读写。

本文所使用的开发板是Miz702
PC 开发环境版本:Vivado 2015.4 Xilinx SDK 2015.4

11.0本章难度系数★☆☆☆☆☆☆

11.1 搭建硬件工程

Step1:新建一个名为为Miz702_sys的工程

Step2:选择RTL Project 勾选Do not specify source at this time

Step3:由于Miz702兼容zedboard 因此选择zedboard开发包

Step4:单击Finish

11.2使用IP Integrator创建硬件系统

Step1:单击Create Block Design

Step2:输入system

Step3:单击下图中添加IP按钮

Step4:搜素单词z选择ZYNQ7 Processing System,然后双击

Step5:添加进来了ZYNQ CPU IP,然后单击Run Block Automation

Step6:直接单击OK

Step7:在你点击了OK后,你会发现DDR以及FICED_IO自劢的延伸出来。

Step8:连线的作用就是把PS的时钟可以接入PL部分,当然这里我们暂时用不到PL部分的资源。在Block文件中,我们迚行连线,将鼠标放在引脚处,鼠标变成铅笔后迚行拖拽,连线如下图所示:

Step9:双击ZYNQ,使能UART1点击Run Connection Automation,按照如图所示配置后单击OK

Step10: 右击 system.bd, 单击Generate Output Products

Step11:支部操作会产生执行、仿真、综合的文件

Step12:右击system.bd 选择 Create HDL Wrapper 这步的作用是产生顶层的HDL文件

Step13:选择Leave Let Vivado manager wrapper and auto-update 然后单击OK

11.3导出SOC硬件到SDK

Step1:File->Export->Export Hardware

Step2:勾选Include bitstream 直接单击OK

Step3:File->Launch SDK加载到SDK

Step4:单击OK

11.4软件工程

新建一个PL_PS_INTC空的工程,并且添加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进行续写操作了

14.3代码实现

/*

* 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;

}

11.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
....................

11.4 本章小结

通过本章的学习,在仅仅使用PS可以对DDR3读写,这样在处理一些速度不快但是量很大的数据时很方便,当然这种方式每次读写都需要CPU干预,效率是比较低的,主要看需求吧。

淘宝店铺:https://osrc.taobao.com

官网论坛:www.osrc.cn

视频链接:http://www.osrc.cn/forum.php?mod=viewthread&tid=1101

源码链接:链接:http://pan.baidu.com/s/1bUBet4 密码:o0ke

第十一章 ZYNQ-MIZ702 DDR3 PS读写操作方案的更多相关文章

  1. 第十章 ZYNQ-MIZ701 DDR3 PS读写操作方案

      本编文章的目的主要用简明的方法在纯PS里对DDR3进行读写. 本文所使用的开发板是Miz701 PC 开发环境版本:Vivado 2015.4 Xilinx SDK 2015.4 10.0本章难度 ...

  2. [求助] 关于DDR3的读写操作,看看我的流程对吗?

    [求助] 关于DDR3的读写操作,看看我的流程对吗? 最近简单调了一下KC705开发板上面的DDR3,型号是MT8JTF12864HZ-1G6:有时候加载程序后,发现读出数据不是写进去的,在这将我的操 ...

  3. 第十一章· MHA高可用及读写分离

    一.MHA简介 1.1.作者简介 松信嘉範: MySQL/Linux专家 2001年索尼公司入职 2001年开始使用oracle 2004年开始使用MySQL 2006年9月-2010年8月MySQL ...

  4. 76.ZYNQ-用PS控制DDR3内存读写

    本编文章的目的主要用简明的方法对DDR3进行读写,当然这种方式每次读写都需要CPU干预,效率是比较低的,但是这是学习的过程吧. 本系列文章尽可能的让每一个实验都相对独立,过程尽可能保证完整性,保证实验 ...

  5. D3.js的v5版本入门教程(第十一章)——交互式操作

    D3.js的v5版本入门教程(第十一章) 与图形进行交互操作是很重要的!所谓的交互操作也就是为图形元素添加监听事件,比如说当你鼠标放在某个图形元素上面的时候,就会显示相应的文字,而当鼠标移开后,文字就 ...

  6. 第十一章 ZYNQ-MIZ701 PS读写PL端BRAM

      本篇文章目的是使用Block Memory进行PS和PL的数据交互或者数据共享,通过zynq PS端的Master GP0端口向BRAM写数据,然后再通过PS端的Mater GP1把数据读出来,将 ...

  7. 第十二章 ZYNQ-MIZ702 PS读写PL端BRAM

      本篇文章目的是使用Block Memory进行PS和PL的数据交互或者数据共享,通过zynq PS端的Master GP0端口向BRAM写数据,然后再通过PS端的Mater GP1把数据读出来,将 ...

  8. 第十四章 ZYNQ TIMER定时器中断

      上篇文章实现了了PS接受来自PL的中断,本片文章将在ZYNQ的纯PS里实现私有定时器中断.每隔一秒中断一次,在中断函数里计数加1,通过串口打印输出. 本文所使用的开发板是Miz702 PC 开发环 ...

  9. [CSAPP笔记][第十一章网络编程]

    第十一章 网络编程 我们需要理解基本的客户端-服务端编程模型,以及如何编写使用因特网提供的服务的客户端-服务端程序. 最后,我们将把所有这些概念结合起来,开发一个小的但功能齐全的Web服务器,能够为真 ...

随机推荐

  1. keepalived+mysql双主热备

    这里使用keepalived实现mysql的双主热备高可用 实验环境: 主机名 IP 系统版本 软件版本 master 192.168.199.6/vip:192.168.199.111 Rhel7. ...

  2. PHP 之验证码类封装

    一.效果图 二.类代码 <?php /** * Created by PhpStorm. * User: Yang * Date: 2019/8/13 * Time: 10:51 */ clas ...

  3. Flutter移动电商实战 --(38)路由_Fluro中Handler编写方法

    在main.dart中初始化Fluro 编写handler 在lib下新建routers文件夹,表示里面要很多路由相关的文件 我们声明一个Handler,在里面handlerFunc固定的两个参数 重 ...

  4. Flutter移动电商实战 --(18)首页_火爆专区商品接口制作

    1.获取接口的方法 在service/service_method.dart里制作方法.我们先不接收参数,先把接口调通. Future getHomePageBeloConten() async{ t ...

  5. 北大ACM - POJ试题分类

    1.入门水题 可用于练手与增强自信 POJ-1003POJ-1004 POJ-1005 POJ-1207 POJ-3299 POJ-2159 POJ-1083POJ-3094 2.初级 2.1. 基本 ...

  6. Activiti数据库支持

    Activiti的后台是有数据库的支持,所有的表都以ACT_开头. 第二部分是表示表的用途的两个字母标识. 用途也和服务的API对应. ACT_RE_*: 'RE'表示repository. 这个前缀 ...

  7. shell生成指定范围随即整数

    #!/bin/bash function rand(){ min=$ max=$(($-$min+)) num=$( | cksum | awk -F ' ' '{print $1}') echo $ ...

  8. MySQL中的sleep函数介绍

    MySQL数据库中有一个不太常用但便于进行某些调试的函数:sleep(),今天我们就来介绍一下这个函数的用法. 首先,看看官网对于函数的定义: SLEEP(duration)Sleeps (pause ...

  9. laravel5.1设置cookie

    Laravel 所建立的 cookie 会加密并且加上认证记号,这代表着被用户擅自更改的 cookie 会失效.从请求中取得Cookie值,你使用cookie方法 $value = $request- ...

  10. JS 事件介绍

    1.设置js对象属性为事件处理程序 事件处理程序属性的名字由“on”后面跟着事件名组成.这些属性名 都必须小写 事件处理程序的缺点:设计都是围绕着假设每个事件目标对于每种事件类型将最多只有一个处理程序 ...