76.ZYNQ-用PS控制DDR3內存讀寫


本編文章的目的主要用簡明的方法對DDR3進行讀寫,當然這種方式每次讀寫都需要CPU干預,效率是比較低的,但是這是學習的過程吧。

本系列文章盡可能的讓每一個實驗都相對獨立,過程盡可能保證完整性,保證實驗的可重現性。 但是用到的模塊或者IP的具體作用和用法不保證都重復詳細的介紹。

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

生成硬件系統

新建vivado工程

這里寫圖片描述

選擇Zedboard

這里寫圖片描述

新建Block Design

這里寫圖片描述

添加ZYNQ PS

這里寫圖片描述

點擊Run Block Automation,讓vivado自動配置好zedboard相關的默認的信息,點擊OK

這里寫圖片描述

雙擊ZYNQ,在此可以去掉一些不用的外設

這里寫圖片描述
這里寫圖片描述
這里寫圖片描述

設置好的Block Design如圖所示

這里寫圖片描述

在block design上右擊,選擇Create HDL Wapper

完成后,在block design上右擊,選擇Generate Output Prouducts,在彈出的對話框選擇Generate

點擊Generate Bitstream

完成后,選擇File->Export->Export Hadfware,選中Include bitsteam

File -> Launch SDK,把硬件架構導出到軟件工程

編寫軟件程序

新建Hello工程

這里寫圖片描述

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進行續寫操作了

代碼實現

#include "stdio.h"
#include "platform.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() { init_platform(); 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); } cleanup_platform(); return 0; }

燒寫測試

串口終端的結果如下: 
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


免責聲明!

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



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