zoukankan      html  css  js  c++  java
  • 第十二章 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...------ ");

        //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 ",XPAR_BRAM_0_BASEADDR + num*4,rev);

           }

        xil_printf("------The test is end!------ ");

        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

  • 相关阅读:
    C#根据用户输入字符串,输出大写字母有几个,小写字母有几个
    C#把大写英文变成小写英文,把小写英文变成大写英文
    C#中去除字符串里的多个空格且保留一个空格
    工作中遇到的99%SQL优化,这里都能给你解决方案(二)
    MySQL如何选择合适的索引
    工作中遇到的99%SQL优化,这里都能给你解决方案
    周期性线程池与主要源码解析
    Mysql关键字Explain 性能优化神器
    Mysql Explain详解
    Executor线程池只看这一篇就够了
  • 原文地址:https://www.cnblogs.com/milinker/p/5905998.html
Copyright © 2011-2022 走看看