第十章 ZYNQ-MIZ701 DDR3 PS讀寫操作方案


 

本編文章的目的主要用簡明的方法在純PS里對DDR3進行讀寫。

本文所使用的開發板是Miz701
PC 開發環境版本:Vivado 2015.4 Xilinx SDK 2015.4

10.0本章難度系數★☆☆☆☆☆☆

10.1 搭建硬件工程

Step1:新建一個名為為Miz701_sys的工程

wps1947.tmp

Step2:選擇RTL Project 勾選Do not specify source at this time

wps1948.tmp

Step3:選擇xc7z010clg400-1為開發器件。

wps1958.tmp

Step4:單擊Finish

wps1959.tmp

10.2使用IP Integrator創建硬件系統

Step1:單擊Create Block Design

Step2:輸入system

wps195A.tmp

Step3:單擊下圖中wps195B.tmp添加IP按鈕

wps196C.tmp

Step4:搜素單詞z選擇ZYNQ7 Processing System,然后雙擊

wps196D.tmp

Step5:添加進來了ZYNQ CPU  IP,雙擊對其進行配置。

wps196E.tmp

Step6:修改輸入時鍾為50MHZ,PL端頻率FCLK_CLK0為100MHZ。

wps196F.tmp

Step7:修改內存類型為MT41K256M16 RE-125。

wps1980.tmp

Step8:在MIO configuration選項中,勾選添加UART1接口,單擊OK完成修改。

wps1981.tmp

Step9:單擊Run Block Automation

wps1982.tmp

Step10:直接單擊OK

wps1983.tmp

Step11:在你點擊了OK后,你會發現DDR以及FICED_IO自動的延伸出來。

wps1993.tmp

Step12:連線的作用就是把PS的時鍾可以接入PL部分,當然這里我們暫時用不到PL部分的資源。在Block文件中,我們迚行連線,將鼠標放在引腳處,鼠標變成鉛筆后迚行拖拽,連線如下圖所示:

wps1994.tmp

Step13: 右擊 system.bd, 單擊Generate Output Products

wps1995.tmp

Step14:支部操作會產生執行、仿真、綜合的文件

wps1996.tmp

Step15:右擊system.bd 選擇 Create HDL Wrapper 這步的作用是產生頂層的HDL文件

wps19A7.tmp

Step16:選擇Leave Let Vivado manager wrapper and auto-update 然后單擊OK

wps19A8.tmp

10.3導出SOC硬件到SDK

Step1:File->Export->Export Hardware

wps19A9.tmp

Step2:勾選Include bitstream 直接單擊OK

wps19AA.tmp

Step3:File->Launch SDK加載到SDK

wps19BA.tmp

Step4:單擊OK

wps19BB.tmp

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://osrc.taobao.com

官網論壇:www.osrc.cn

源碼鏈接:http://pan.baidu.com/s/1kVM12n1 密碼:rknx


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM