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

 

本篇文章目的是使用Block Memory进行PS和PL的数据交互或者数据共享,经过zynq PS端的Master GP0端口向BRAM写数据,而后再经过PS端的Mater GP1把数据读出来,将结果打印输出到串口终端显示。app

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

本系列文章尽量的让每个实验都相对独立,过程尽量保证完整性,保证明验的可重现性。 可是用到的模块或者IP的具体做用和用法不保证都重复详细的介绍。函数

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

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

11.1 搭建硬件工程

Step1:新建一个名为为Miz701_sys的工程测试

wps9EB9.tmp

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

wps9ECA.tmp

Step3:选择xc7z010clg400-1为开发器件。3d

wps9ECB.tmp

Step4:单击Finishblog

wps9ECC.tmp

11.2使用IP Integrator建立硬件系统

Step1:单击Create Block Design接口

Step2:输入system内存

wps9ECD.tmp

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

wps9EDE.tmp

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

wps9EDF.tmp

Step5:添加进来了ZYNQ CPU IP,而后双击对其进行配置。

wps9EE0.tmp

Step6:修改输入时钟为50MHZ,PL端频率FCLK_CLK0为100MHZ。

wps9EE1.tmp

Step7:修改内存型号为MT41K256M16 RE-125。

wps9EE2.tmp

Step8:在MIO configuration选项中,勾选添加UART1接口。

wps9EE3.tmp

Step9: 在PL-PS Configuration下,选中 GP0和GP1而后 点击ok。

wps9EF4.tmp

Step10:单击Run Block Automation进行智能布线。

wps9EF5.tmp

Step11:直接单击OK

wps9EF6.tmp

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

wps9EF7.tmp

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

wps9EF8.tmp

Step14:点击,Add IP,连续添加两个 AXI BRAM Controller

wps9EF9.tmp

Step15:分别双击AXI BRAM Controller模块,把number of BRAM interfaces 所有修改为1

wps9EFA.tmp

Step16:点击ADD IP,添加Block Memory Generator

wps9F0B.tmp

Step17:双击Block Memory Generator ,修改Memory Type。

wps9F0C.tmp

Step18:点击run Connection Automation,把axi_bram_ctrl_1的S_AXI端口的链接目标修改成如图所示:

wps9F0D.tmp

Step19:点击从新布局,生成好的硬件框架以下

wps9F0E.tmp

Step20:点击Address Editor 能够看到系统已经为咱们自动分配好了正确的地址

wps9F0F.tmp

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

wps9F1F.tmp

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

wps9F20.tmp

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

wps9F21.tmp

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

Step25:执行->产生bit文件wps9F22.tmp

11.3导出SOC硬件到SDK

Step1:File->Export->Export Hardware

wps9F23.tmp

Step2:勾选Include bitstream 直接单击OK

wps9F24.tmp

Step3:File->Launch SDK加载到SDK

wps9F35.tmp

Step4:单击OK

wps9F36.tmp

11.4 软件工程

Step1:打开的SDK界面以下,这里的信息是和硬件相关的,例如在Address Map 这一栏下能够看到axi_bram_ctrl_0和刚刚在vavado Address Editor下的地址是一致的

wps9F37.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;

}

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

11.6 本章小结

本文经过PS端把数据写入到PL端的BRAM,而后从而又把数据从PL端读到PS端,从而简单的实现了PL和PS的数据交互和共享。

相关文章
相关标签/搜索