zynqpl端时钟_第十二章 ZYNQ-MIZ702 PS读写PL端BRAM
本篇文章目的是使用Block Memory進(jìn)行PS和PL的數(shù)據(jù)交互或者數(shù)據(jù)共享,通過zynq PS端的Master GP0端口向BRAM寫數(shù)據(jù),然后再通過PS端的Mater GP1把數(shù)據(jù)讀出來,將結(jié)果打印輸出到串口終端顯示。
涉及到AXI BRAM Controller 和 Block Memery Generator等IP的使用。
本系列文章盡可能的讓每一個實驗都相對獨立,過程盡可能保證完整性,保證實驗的可重現(xiàn)性。 但是用到的模塊或者IP的具體作用和用法不保證都重復(fù)詳細(xì)的介紹。
本文所使用的開發(fā)板是Miz702 PC 開發(fā)環(huán)境版本:Vivado 2015.4 Xilinx SDK 2015.4
2.0本章難度系數(shù)★★☆☆☆☆☆
Step1:新建一個名為為Miz702_sys的工程
Step2:選擇RTL Project 勾選Do not specify source at this time
Step3:由于Miz702兼容zedboard 因此選擇zedboard開發(fā)包
Step4:單擊Finish
Step1:單擊Create Block Design
Step2:輸入system
Step3:單擊下圖中添加IP按鈕
Step4:搜素單詞z選擇ZYNQ7 Processing System,然后雙擊
Step5:添加進(jìn)來了ZYNQ CPU IP,然后單擊Run Block Automation
Step6:直接單擊OK
Step7:在你點擊了OK后,你會發(fā)現(xiàn)DDR以及FICED_IO自勱的延伸出來。
Step8:連線的作用就是把PS的時鐘可以接入PL部分,當(dāng)然這里我們暫時用不到PL部分的資源。在Block文件中,我們迚行連線,將鼠標(biāo)放在引腳處,鼠標(biāo)變成鉛筆后迚行拖拽,連線如下圖所示:
Step9:雙擊 ZYNQ,打開Re-customize IP對話框,在PL-PS Configuration下,選中 GP0和GP1然后 點擊ok
Step10:點擊,Add IP,連續(xù)添加兩個 AXI BRAM Controller
Step11:分別雙擊AXI BRAM Controller模塊,把number of BRAM interfaces 全部修改成1
Step12:點擊ADD IP,添加Block Memory Generator
Step13:雙擊Block Memory Generator ,修改Memory Type。
Step14:點擊run Connection Automation,把axi_bram_ctrl_1的S_AXI端口的連接目標(biāo)修改為如圖所示:
Step15:點擊重新布局,生成好的硬件框架如下
Step16:點擊Address Editor 可以看到系統(tǒng)已經(jīng)為我們自動分配好了正確的地址
Step17: 右擊 system.bd, 單擊Generate Output Products
Step18:支部操作會產(chǎn)生執(zhí)行、仿真、綜合的文件
Step19:右擊system.bd 選擇 Create HDL Wrapper 這步的作用是產(chǎn)生頂層的HDL文件
Step20:選擇Leave Let Vivado manager wrapper and auto-update 然后單擊OK
Step21:執(zhí)行->產(chǎn)生bit文件
Step1:File->Export->Export Hardware
Step2:勾選Include bitstream 直接單擊OK
Step3:File->Launch SDK加載到SDK
Step4:單擊OK
2.4軟件工程
Step1:打開的SDK界面如下,這里的信息是和硬件相關(guān)的,例如在Address Map 這一欄下可以看到axi_bram_ctrl_0和剛剛在vavado Address Editor下的地址是一致的
Step2: 新建一個名為BRAM_Test的空的工程,并且新建一個main.c文件,添加如下代碼。/*
* mai.c
*
*? Created on: 2016年6月26日
*????? Author: Administrator
*/
#include
#include "xil_io.h"?? //這個頭文件下面包含很重要的IO讀寫函數(shù)
#include "xparameters.h"? //這個頭文件里把硬件的地址映射等參數(shù)都寫成了宏定義方便使用
//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寫數(shù)據(jù)
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里的數(shù)據(jù)讀出來
//PS和PL可以在blk_mem_gen_0里共享數(shù)據(jù)
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;
}
2.5測試結(jié)果
串口終端打印輸出信息如下:
------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!------
2.6本章小結(jié)
本文通過PS端把數(shù)據(jù)寫入到PL端的BRAM,然后從而又把數(shù)據(jù)從PL端讀到PS端,從而簡單的實現(xiàn)了PL和PS的數(shù)據(jù)交互和共享。
總結(jié)
以上是生活随笔為你收集整理的zynqpl端时钟_第十二章 ZYNQ-MIZ702 PS读写PL端BRAM的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 3层vni vxlan_VXLAN技术:
- 下一篇: emcy协议_CANopen协议 -