本篇文章目的是使用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

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

Step1:新建一个名为为Miz702_sys的工程

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

Step3:由于Miz702兼容zedboard 因此选择zedboard开发包

Step4:单击Finish

Step1:单击Create Block Design

Step2:输入system

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

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

Step5:添加进来了ZYNQ CPU IP,然后单击Run Block Automation

Step6:直接单击OK

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

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

Step9:双击 ZYNQ,打开Re-customize IP对话框,在PL-PS Configuration下,选中 GP0和GP1然后 点击ok

Step10:点击,Add IP,连续添加两个 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端口的连接目标修改为如图所示:

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

Step16:点击Address Editor 可以看到系统已经为我们自动分配好了正确的地址

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

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

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

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

Step21:执行->产生bit文件

Step1:File->Export->Export Hardware

Step2:勾选Include bitstream 直接单击OK

Step3:File->Launch SDK加载到SDK

Step4:单击OK

2.4软件工程

Step1:打开的SDK界面如下,这里的信息是和硬件相关的,例如在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读写函数

#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;

}

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

2.6本章小结

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

zynqpl端时钟_第十二章 ZYNQ-MIZ702 PS读写PL端BRAM相关推荐

  1. (124)FPGA面试题-ZYNQ的PS和PL端怎么交互的?

    1.1 FPGA面试题-ZYNQ的PS和PL端怎么交互的? 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试题-ZYNQ的PS和PL端怎么交互的: 5)结束语 ...

  2. 系统架构师学习笔记_第十二章_连载

    第十二章  系统安全架构设计 12.1  信息系统安全架构的简单描述 信息安全的特征 是为了保证信息的 机密性.完整性.可用性.可控性.不可抵赖性. 以风险策略为基础. 12.1.1  信息安全的现状 ...

  3. 为什么c相电路在前面_第十二章 三相电路知识点

    第十二章 三相电路 1.掌握三相电源概念:三相电源电压.频率.相角关系:三相电源的连接:三相电源的相量图. 典型问题包括:什么样的电源可以构成三相电源:三相正序.负序的区别:使用三相电源构建三相四线制 ...

  4. C++ Primer记录_第十二章

    文章目录 第十二章 动态内存 12.1 动态内存与智能指针 12.1.1 shared_ptr类 12.1.2 直接管理内存 12.1.3 shared_ptr和new结合使用 12.1.4 智能指针 ...

  5. zynqpl端时钟_第十一章 ZYNQ-MIZ701 PS读写PL端BRAM

    本篇文章目的是使用Block Memory进行PS和PL的数据交互或者数据共享,通过zynq PS端的Master GP0端口向BRAM写数据,然后再通过PS端的Mater GP1把数据读出来,将结果 ...

  6. P2中ZYNQ的PS控制PL端LED

    第一个ZYNQ的实验,用于熟悉开发环境和板卡,通过GPIO控制LED,由于P2在ps端没有LED,所以需要通过axi总线控制PL端LED. 1.参考设计 参考的是黑金的<PL 端和 PS 端的协 ...

  7. linux系统日志_第十二章:走进Linux世界——系统日志管理,日志轮转。

    1.关心问题:哪类程序---> 产生的什么日志----> 放到什么地方 2.处理日志的进程 (1) 第一类: rsyslogd: 系统专职日志程序. 处理绝大部分日志记录, 系统操作有关的 ...

  8. 谭浩强c语言不讲位运算呢,谭浩强c语言教程_第十二章-位运算谭浩强c语言教程_第十二章-位运算.doc...

    12位运算1 12.1位运算符C语言提供了六种位运算符:1 12.1.1按位与运算1 12.1.2按位或运算2 12.1.3按位异或运算2 12.1.4求反运算3 12.1.5左移运算3 12.1.6 ...

  9. java类库支持_第十二章:开发支持类库

    UUID类 UUID(since 1.5   java.util.UUID)是一种生成无重复字符串的程序类,这种程序类的主要功能是根据时间戳实现一个自动的无重复的字符串定义.所谓的无重复只出现概率很低 ...

最新文章

  1. 如何增加Eclipse输出控制台的容量?
  2. 嵌入式系统串口解析二进制数_嵌入式系统Bootloader分析及DSP56F800串口加载功能实现...
  3. python网页调用摄像头_Python调用摄像头
  4. 拳王虚拟项目公社:0成本售卖高考资料的虚拟资源教程,自动化的其他最简单最轻松玩法
  5. CentOS更改yum源与更新系统
  6. 2 str转byte失败_android 4.2的多线程库加载崩溃问题
  7. 问题五十四:怎么用ray tracing画参数方程表示的曲面(2)—— bezier surface
  8. 算法学习--链表/Hash--LRU cache
  9. java一键生成海报_小程序生成海报(java后端)
  10. 浙江学计算机怎么选课,新高考下浙江孩子应怎么选课(专业人士建议)
  11. 风变编程:是课程也是游戏,学习也能很简单
  12. Win10系统怎么打开卓越模式?Win10这些隐藏模式你都知道吗?
  13. NPM install报错certificate has expired
  14. php网站做分享到朋友圈,PHP实现微信分享朋友圈
  15. 五猴分桃python_猴子分桃问题——一个简单的递归
  16. kbhit(), bioskey(), system(pause)
  17. 基于FFmpeg的视频播放器之十一:倍速播放
  18. 软件测试面试题:常见的性能测试方法有哪些?以及每类测试方法的目的是什么?
  19. 类文件解析003-解析常量池
  20. html5 电子白板 直播,HTML5 canvas 做画板画图 可以做电子白板

热门文章

  1. matlab怎么将一个矩阵转化为灰度图
  2. 如何改变UITableViewCell的选中样式(颜色)?storyboard上cell的selection不可用?
  3. swift4.2 - 一个自定义view弹框
  4. WinForm连接数据库
  5. 手把手教会你小程序登录鉴权
  6. 在centos6中安装2.4版本的HTTPd
  7. 4G+宽带高歌猛进:移动双线虐杀联通
  8. 《Adobe Illustrator CS5中文版经典教程》—第0课0.5节使用绘图模式
  9. UVA11825: Hackers' Crackdown (状压dp)
  10. 【Apache Mina2.0开发之二】自定义实现Server/Client端的编解码工厂(自定义编码与解码器)!...