ZYNQ AXI DMA使用问题_axi dma 卡住-程序员宅基地

最近被AXI DMA给坑了一下 烦躁了几天 今天终于找到了原因。之前一直以为是AXI FIFO有BUG 而且是XILINX的BUG 老是出现DMA读完FIFO中数据之后程序卡死的情况,而且还会丢失FIFO中的数据现象。网上的大部分例程都是回环测试 基本避过了这个坑 但是项目需要往FIFO中写入PL端获取的数据 就会遇到这个问题了。XINLINX的Document还是要多看看滴。
首先就是LAST信号的使用问题;
其次:S2MM传输的数据源和FIFO连接axi_dma模块的s2mm_prmry_reset_out_n复位信号(见Block Design中的紫色高亮信号线),理由如下:
在这里插入图片描述

① 注意注意:axi_dma模块S2MM传输的全部数据量对于其S_AXIS_S2MM端口而言必须是1个完整的Packet,完成的标志即s_axis_s2mm_tlast出现高电平,如果此时数据量不足PS传输指令的数据量,传输仍然结束并且通过dma的buffer length寄存器返回已传输的数据量

② axi_dma模块内部S2MM通道可以缓冲16字节的数据量,即复位结束后通过s_axis_s2mm_tready高电平可以收入16字节数据,如果数据源或者FIFO的复位与S2MM通道复位不同步,则axi_dma模块复位后数据可能丢失,而数据源却认为已经发送,导致数据量出错,从而S2MM传输错误,现象就是AXI DMA的前四个时钟数据丢失。

③ AXI4-Stream Data FIFO模块的输入输出接口的Packet格式完全一样,即S_AXIS进入数据的Packet中Burst数目与M_AXIS送出数据的Packet中的Burst数目一样。于是数据源送出的Packet中的tlast的位置必须精确控制到与PS传输指令要求的数据量一致。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42278284/article/details/102409839

智能推荐

vs2010和Matlab R2012a 混合编程_matlabr2012a怎么运行代码-程序员宅基地

文章浏览阅读1.7k次。转自:http://blog.sina.com.cn/s/blog_4fc6546101011cu5.html本人系统Windows 7旗舰版,32位,采用由m文件构造动态链接库然后在visual studio中调用的方法。1. MATLAB 环境配置: 注:Matlab r2010b及以后版本才支持vs2010, 之前版本中mbuild命令输入后可能会_matlabr2012a怎么运行代码

分治法之合并排序(2021/1/23)_分治法合并程序-程序员宅基地

文章浏览阅读247次。问题引入代码实现#include<iostream>#include<cstdlib>using namespace std;struct Data{ int flag;};void MergeFunction(struct Data*list,int low,int middle,int high){ //申请辅助空间 int size=high-low; struct Data*space=(struct Data*)malloc(sizeof(struc_分治法合并程序

正规文法构造状态转换图,状态转换图构造正规文法---编译原理_文法状态图-程序员宅基地

文章浏览阅读7.9k次,点赞19次,收藏104次。从左线性正规文法出发,构造状态图注意:增设初态S,单圆圈表示例子从右线性正规文法出发,构造状态图注意:增设终态Z,双圆圈表示例子状态转换图构造左线性正规文法注意:写左线性正规文法时从终态开始例子状态转换图构造右线性正规文法注意:写右线性正规文法时从初态开始例子..._文法状态图

Codeforces 1445 B题_b. shooting time limit per test1 second memory lim-程序员宅基地

文章浏览阅读315次。codeforces 1455 B2021-01-14 打卡题,随便在codeforces上找了一道B. Jumpstime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard output题目描述:You are standing on the OX-axis at point 0 and you want to move to an integer point _b. shooting time limit per test1 second memory limit per test25

Java中public、protected、private和default的区别_变量、类和接口可以具有不同级别的可见性。描述private和default的级别有什么区别-程序员宅基地

文章浏览阅读3.8k次。public、protected、private和default都是java中的访问控制符其访问权限如下:public: 具有最大的访问权限,可以访问任何一个在classpath下的类、接口、异常等等。它往往用于对外提供调用的形式。protected:主要用来老保护子类,它所修饰的属性,方法,可由子类继承default:它是针对本包访问而设计的,任何处于本包下的类,接口,异常等,都可以相互访问。p..._变量、类和接口可以具有不同级别的可见性。描述private和default的级别有什么区别

Django实战搭建mock系统(五)_验证码功能_django mockserver-程序员宅基地

文章浏览阅读305次。一.注册,并实现验证码功能先准备好注册的模板静态页面:https://download.csdn.net/download/qq_38175040/19548394将模板页面放到template文件夹下面,然后在view里定义视图,去url里指定路径,都是老生常谈的东西了去url里面写路径最后注意一下register.html里的跳转语句访问页面成功接下来实现验证码功能我们使用Django captcha,这是别人已经造好的轮子,可以到GitHub看看项目的使用文档等详情。在命令行里_django mockserver

随便推点

Pytorch:Pytorch升级版本1.1(支持TensorBoard)的简介、安装、使用方法之详细攻略_pytorch升级到1.1-程序员宅基地

文章浏览阅读9.7k次,点赞5次,收藏18次。Pytorch:Pytorch升级版本1.1(支持TensorBoard)的简介、安装、使用方法之详细攻略目录Pytorch1.1的简介1、支持TensorBoard:torch.utils.tensorboardPytorch1.1的安装pipPytorch1.1的使用方法Pytorch1.1的简介 选择您的首选项并运行..._pytorch升级到1.1

MAC Addresses_addresses ct文件-程序员宅基地

文章浏览阅读697次。10046. MAC Addresses 收藏OUI:Organizationally Unique Identifiers 组织唯一标志符IAB:Individual Address Block 单独地址块ETH:ETHERTYPE 以太网类型 eth-eg: 0x809B AppleTalk协议 0x8137 IPX 0x86DD IPv6 0x0800 _addresses ct文件

Redis集群环境搭建以及Java连接Redis集群_java连接 redis集群代理模式-程序员宅基地

文章浏览阅读2.6k次。!!!服务器版本为Centos7.3 阿里云本文档仅为单个服务器下,创建六个不同端口号的reids服务模拟集群环境。一. 安装Redis5.01. 下载redis5.0进入到usr/local目录,执行下载命令下载redis压缩包cd usr/localwget http://download.redis.io/releases/redis-5.0.0.tar.gz2.解压后安..._java连接 redis集群代理模式

网易企业邮箱在outlook2016中使用_企业网易邮箱用2016outlook-程序员宅基地

文章浏览阅读1.1k次。Outlook邮箱配置1.2.3.成功之后点击下一步_企业网易邮箱用2016outlook

【MySQL】创建表时主键与外键_表里主键只允许出现一列嘛-程序员宅基地

文章浏览阅读3.3k次。1.什么时候用主键?主键的用处?保证数据的唯一性2.一张表只能有一个主键吗?√3.一个主键只能是一列吗?×---支持多列合起来做主键,即复合主键,只要保证唯一性即可图中1表示用第一列nid做主键,2表示用nid和pid两列合起来做主键,即复合外键(不常用)4.在进行外键关联的时候,如果关联的表的主键是由多列组合而成的,那么在进行外键约束的时候由括号中的两部分一起另外,需要注意外键名不能重复,故在进行外键命名时,比如t2和t1进行外键关联,则命名为fk_t2_t1,若t3和.._表里主键只允许出现一列嘛

Init 进程详解_init进程-程序员宅基地

文章浏览阅读1.1w次。Android 内核加载完成后,就会启动init进程,init进程是Android系统用户空间的第一个进程。init程序放在系统根目录下,init进程代码位于源码的目录“system/core/init”下面。下面我们来分析init进程的启动过程1. 分析入口函数进程init入口函数是main,具体实现文件的路径是: system\core\init\init.c 分析main函数:int ma_init进程