分享下PS与PL之间数据传输比较另类的实现方式,实现目标是:

1、传输时数据不能滞留在一端,无论是1个字节还是1K字节都能立即发送;

2、PL端接口为FIFO接口;

PS到PL的数据传输流程:

PS到PL的数据传输相对简单,使用vivado自带的axi_datamover即可完成,详细如下:

A、向PL端查询剩余数据存储长度(以byte为单位);
B、通过写寄存器设置PL端DMA数据传输开始地址;
C、通过写寄存器设置PL端DMA数据传输长度(以byte为单位);
D、通过写寄存器启动PL端DMA传输;
E、通过读寄存器查询PL端DMA是否完成数据传输;
 
PS(ARM)端驱动代码如下:
#define WRITE_SPACE_REG 0x84000004
#define ps2pl_SA 0x84000008
#define ps2pl_LENGTH  0x8400000C
#define ps2pl_START 0x84000010
#define ps2pl_FINISHED 0x84000014
 
data_space = Xil_In32(WRITE_SPACE_REG);
 
void init_axi_dma_simple_write(u32 num)
{
Xil_Out32(ps2pl_SA,(unsigned int )recvram);
Xil_Out32(ps2pl_LENGTH,(0x80000000+num));
Xil_Out32(ps2pl_START,0x00000001);
while(!(Xil_In32(ps2pl_FINISHED)&0x00000001));
}
 
 
PL到PS的数据传输流程:
PL到PS的数据传输相对复杂点,vivado自带axi_datamover测试发现有时不太正常,所以按照vivado自带axi_datamover接口协议重新写了模块,详细如下:
 
A、通过读寄存器查询待传输数据长度(以byte为单位);
B、通过写寄存器设置PL端DMA数据传输开始地址;
C、通过写寄存器设置数据传输长度(以byte为单位);
D、通过写寄存器启动数据传输;
E、通过读寄存器查询PL端DMA是否完成数据传输;
注:数据传输长度有数值限制,假如待传输数据长度为8byte的整数倍,则每次的数据传输长度也必须为8byte的整数倍。假如待传输数据长度不是8byte的整数倍,以15byte为例,只能以下面两种方式读取:1、第一次读取8byte,第二次读取7byte;2、一次读取15byte。为了简化这种限制,可以使每次的待传输数据长度小于PS端的缓存,这样可以一次读取所有待传输的数据,也就是第二种读取方式。
 
PS(ARM)端代码如下:
#define READ_NUM_REG 0x84000044
#define pl2ps_DA 0x84000048
#define pl2ps_LENGTH 0x8400004C
#define pl2ps_START 0x84000050
#define pl2ps_FINISHED 0x84000054
 
data_return = Xil_In32(READ_NUM_REG);
 
void init_axi_dma_simple_read(u32 num)
{
Xil_Out32(pl2ps_DA,(unsigned int )recvram);
Xil_Out32(pl2ps_LENGTH,(0x80000000+num));
Xil_Out32(pl2ps_START,0x00000001);
while(!(Xil_In32(pl2ps_FINISHED)&0x00000001));
}
 
附件为在vivado中打包好的用于pl2ps传输的ip

使用axi_datamover完成ZYNQ片内PS与PL间的数据传输的更多相关文章

  1. Zynq PS和PL间的连接

    跨越PS和PL的信号 AXI总线.EMIO.其他(看门狗.重启信号.中断信号.DMA接口信号) AXI标准 AXI(高级可扩展接口)是ARM AMBA的一部分.AMBA总线主要用于片上系统.AXI总线 ...

  2. [原创]基于Zynq PS与PL之间寄存器映射 Standalone & Linux 例程

    基于Zynq PS与PL之间寄存器映射 Standalone & Linux 例程 待添加完善中

  3. 第十二章 ZYNQ-MIZ702 PS读写PL端BRAM

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

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

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

  5. zedboard通过BRAM实现PS和PL的简单通信

    使用Block Memory进行PS和PL的数据交互或者数据共享,通过zynq PS端的Master GP0端口向BRAM写数据,然后再通过PS端的Mater GP1把数据读出来,将结果打印输出到串口 ...

  6. PS与PL协同设计

    https://blog.csdn.net/Fei_Yang_YF/article/details/79676172 什么是PS和PL ZYNQ-7000是Xilinx推出的一款全可编程片上系统(Al ...

  7. 利用百度API(JavaScript 版)实现在地图上绘制任一多边形,并判断给定经纬度是否在多边形范围内。以及两点间的测距功能

    权声明:本文为博主原创文章,未经博主允许不得转载. 利用百度API(JavaScript 版)实现在地图上绘制任一多边形,并判断给定经纬度是否在多边形范围内.以及两点间的测距功能. 绘制多边形(蓝色) ...

  8. Vivado设计二:zynq的PS访问PL中的自带IP核(基于zybo)

    1.建立工程 首先和Vivado设计一中一样,先建立工程(这部分就忽略了) 2.create block design 同样,Add IP 同样,也添加配置文件,这些都和设计一是一样的,没什么区别. ...

  9. ZYNQ 7020学习笔记之PL侧普通信号中断PS的实验

    1.参考 UG585 网络笔记 2.理论知识 见中断部分 3.实验目的 练习使用PL侧的普通信号来中断PS处理器. 4.实验过程 建立工程,设置并初始化串口中断,在运行程序之后,如果串口接收到N(1- ...

随机推荐

  1. golang开发环境(2016.9.16)

    一.windows下安装 1.下载go1.7.3.windows-amd64.msi,建议默认安装到‘C:\Go\’ 2.环境变量 变量 值 说明 Path C:\Go\bin 安装程序默认会设置,如 ...

  2. 使用IntelliJ IDEA 配置Maven(入门)(转)

    原文转自:http://blog.csdn.net/qq_32588349/article/details/51461182 1. 下载Maven 官方地址:http://maven.apache.o ...

  3. .NET微信开发通过Access Token和OpenID获取用户信息

    本文介绍如何获得微信公众平台关注用户的基本信息,包括昵称.头像.性别.国家.省份.城市.语言. 本文的方法将囊括订阅号和服务号以及自定义菜单各种场景,无论是否有高级接口权限,都有办法来获得用户基本信息 ...

  4. [wxWidgets] 1. 安装及"hello world"程序

    关于wxWidgets的优越已经在它的官方网站有所阐述,本文不再赘述. 本系列主要记录学习这个软件包过程中遇到的问题以及心得. 1.  安装 从源码安装虽然大多时候不是一件轻松的过程,但是基于以下两个 ...

  5. 关于C#循环图片GDI+内存不足异常的记录

    循环大量图片的时候会报出GDI+内存不足的问题,这个问题困扰了我很久,下面是我的几个解决方案: 使用using(){}代码块来定义需要释放内存的变量.using代码块会在代码结束的时候释放变量,但是并 ...

  6. bzoj1904: Musical Water-fence

    找出最高的木块,假设在这块木块上无限加水,就会形成一些水池,然后才向两侧溢出 用并查集维护当前在某个位置使水向左/右流动,水会流向哪个水池或从某一侧溢出浪费,当某个水池满时更新并查集 #include ...

  7. vbs 的二个解释程序区别与切换及与BAT互调用。

    WScript.exe : 窗口中运行CScript.exe :命令行中运行 用法:<CScript|WScript> scriptname.extension [option...] [ ...

  8. sql:劳务统计各分公司管理费用明细合计(等同汇总报表)

    select gl_balance.year, bd_accsubj.dispname, sum(gl_balance.debitamount) 收入, sum(gl_balance.creditam ...

  9. [转载]VIM 教程:Learn Vim Progressively

    文章来源:http://yannesposito.com/Scratch/en/blog/Learn-Vim-Progressively/   Learn Vim Progressively   TL ...

  10. .NET 中关于 TypeCode 和枚举类型的问题

    因为C#中没有提供 Switch on Type 的功能,因此要判断类型通常会用一长串的if else,当然这种写法的问题是不够高效,且不够美观.因此 C# 中对常见类型提供了一组枚举值,也就是 Ty ...