第十二章 ZYNQ-MIZ702 PS讀寫PL端BRAM


 

本篇文章目的是使用Block Memory進行PS和PL的數據交互或者數據共享,通過zynq PS端的Master GP0端口向BRAM寫數據,然后再通過PS端的Mater GP1把數據讀出來,將結果打印輸出到串口終端顯示。

涉及到AXI BRAM Controller 和 Block Memery Generator等IP的使用。

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

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

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

12.1 搭建硬件工程

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

wps4055.tmp

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

wps4056.tmp

Step3:由於Miz702兼容zedboard 因此選擇zedboard開發包

wps4057.tmp

Step4:單擊Finish

wps4058.tmp

12.2使用IP Integrator創建硬件系統

Step1:單擊Create Block Design

Step2:輸入system

wps4069.tmp

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

wps406B.tmp

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

wps406C.tmp

Step5:添加進來了ZYNQ CPU IP,然后單擊Run Block Automation

wps407C.tmp

Step6:直接單擊OK

wps407D.tmp

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

wps407E.tmp

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

wps407F.tmp

Step9:雙擊 ZYNQ,打開Re-customize IP對話框,在PL-PS Configuration下,選中 GP0和GP1然后 點擊ok

wps4090.tmp

Step10:點擊,Add IP,連續添加兩個 AXI BRAM Controller

wps4091.tmp

Step11:分別雙擊AXI BRAM Controller模塊,把number of BRAM interfaces 全部修改成1

wps4092.tmp

Step12:點擊ADD IP,添加Block Memory Generator

wps4093.tmp

Step13:雙擊Block Memory Generator ,修改Memory Type。

wps40A4.tmp

Step14:點擊run Connection Automation,把axi_bram_ctrl_1的S_AXI端口的連接目標修改為如圖所示:

wps40A5.tmp

Step15:點擊重新布局,生成好的硬件框架如下

wps40A6.tmp

Step16:點擊Address Editor 可以看到系統已經為我們自動分配好了正確的地址

wps40A7.tmp

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

wps40A8.tmp

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

wps40B8.tmp

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

wps40B9.tmp

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

Step21:執行->產生bit文件wps40BA.tmp

12.3導出SOC硬件到SDK

Step1:File->Export->Export Hardware

wps40BB.tmp

Step2:勾選Include bitstream 直接單擊OK

wps40CC.tmp

Step3:File->Launch SDK加載到SDK

wps40CD.tmp

Step4:單擊OK

wps40CE.tmp

12.4 軟件工程

Step1:打開的SDK界面如下,這里的信息是和硬件相關的,例如在Address Map 這一欄下可以看到axi_bram_ctrl_0和剛剛在vavado Address Editor下的地址是一致的

wps40CF.tmp

Step2: 新建一個名為BRAM_Test的空的工程,並且新建一個main.c文件,添加如下代碼。

/*

* mai.c

*

*  Created on: 2016年6月26日

*      Author: Administrator

*/

#include <stdio.h>

#include "xil_io.h"   //這個頭文件下面包含很重要的IO讀寫函數

#include "xparameters.h"  //這個頭文件里把硬件的地址映射等參數都寫成了宏定義方便使用

//void print(char *str);

int main()

{

       int num;

       int rev;

    xil_printf("------The test is start...------\n\r");

    //XPAR_AXI_BRAM_CTRL_0_S_AXI_BASEADDR是axi_bram_ctrl_0的地址,Xil_Out32通過控制axi_bram_ctrl_0,向blk_mem_gen_0寫數據

    for( num=0; num<15; num++ )

    {

       Xil_Out32(XPAR_BRAM_0_BASEADDR + num*4, 0x10000000+num);     //

    }

    //XPAR_AXI_BRAM_CTRL_1_S_AXI_BASEADDR是axi_bram_ctrl_1的地址,Xil_In32 通過控制axi_bram_ctrl_0,把blk_mem_gen_0里的數據讀出來

    //PS和PL可以在blk_mem_gen_0里共享數據

   for( num=0; num<15; num++ )

       {

            rev = Xil_In32(XPAR_BRAM_0_BASEADDR + num*4);

            xil_printf( "The data at %x is %x \n\r",XPAR_BRAM_0_BASEADDR + num*4,rev);

       }

    xil_printf("------The test is end!------\n\r");

    return 0;

}

12.5 測試結果

串口終端打印輸出信息如下:

------The test is start...------
The data at 80000000 is 10000000
The data at 80000004 is 10000001
The data at 80000008 is 10000002
The data at 8000000C is 10000003
The data at 80000010 is 10000004
The data at 80000014 is 10000005
The data at 80000018 is 10000006
The data at 8000001C is 10000007
The data at 80000020 is 10000008
The data at 80000024 is 10000009
The data at 80000028 is 1000000A
The data at 8000002C is 1000000B
The data at 80000030 is 1000000C
The data at 80000034 is 1000000D
The data at 80000038 is 1000000E

------The test is end!------

12.6 本章小結

本文通過PS端把數據寫入到PL端的BRAM,然后從而又把數據從PL端讀到PS端,從而簡單的實現了PL和PS的數據交互和共享。

淘寶店鋪:https://osrc.taobao.com

官網論壇:www.osrc.cn

視頻鏈接:http://www.osrc.cn/forum.php?mod=viewthread&tid=1102

源碼鏈接:http://pan.baidu.com/s/1hssfxbQ 密碼:040p


免責聲明!

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



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