ZYNQ--AXI_DMA使用

文章目录

  • 手册阅读
  • 典型连接图
  • SG模式关闭时的寄存器地址
  • SG模式开启时的寄存器地址
  • BD设计
  • PS端设计
    • 对于DMA寄存器的控制
    • 对DMA进行初始化

手册阅读

在这里插入图片描述

典型连接图

在这里插入图片描述

SG模式关闭时的寄存器地址

在这里插入图片描述

SG模式开启时的寄存器地址

在这里插入图片描述
在这里插入图片描述
关于各个bit的功能,具体看数据手册。

BD设计

通过PL侧设计一个流输出接口的主机(可以借助打包一个stream流接口的主机
),将流数据写入到DMA在转换为AXI_FULL类型送入到PS端的HP接口;PS端通过GP接口输出控制DMA的寄存器。

在这里插入图片描述
Axi_Stream_Master的代码如下


`timescale 1 ns / 1 psmodule Axi_Stream_Master#
(parameter   integer                                 C_M_AXIS_TDATA_WIDTH = 64,parameter   integer                                 C_M_START_COUNT	     = 32
)
(input       wire                                    M_AXIS_ACLK     ,input       wire                                    M_AXIS_ARESETN  ,output      wire                                    M_AXIS_TVALID   ,    output      wire [C_M_AXIS_TDATA_WIDTH-1 : 0]       M_AXIS_TDATA    ,		output      wire [(C_M_AXIS_TDATA_WIDTH/8)-1 : 0]   M_AXIS_TSTRB    ,output      wire                                    M_AXIS_TLAST    ,input       wire                                    M_AXIS_TREADY
);reg                                         ro_M_AXIS_TVALID    ;
reg  [C_M_AXIS_TDATA_WIDTH-1 : 0]           ro_M_AXIS_TDATA     ;                             
reg  [(C_M_AXIS_TDATA_WIDTH/8)-1 : 0]       ro_M_AXIS_TSTRB     ;	
reg                                         ro_M_AXIS_TLAST     ;reg                                         wr_action           ;
reg   [5:0]                                 wr_cnt              ;assign  M_AXIS_TVALID  = ro_M_AXIS_TVALID;    
assign  M_AXIS_TDATA   = ro_M_AXIS_TDATA ;
assign  M_AXIS_TSTRB   = ro_M_AXIS_TSTRB ;
assign  M_AXIS_TLAST   = ro_M_AXIS_TLAST ;
assign  wr_action      = M_AXIS_TVALID & M_AXIS_TREADY ;always @(posedge M_AXIS_ACLK or negedge M_AXIS_ARESETN) beginif(!M_AXIS_ARESETN)wr_cnt <= 'd0;else if(wr_cnt == 511)wr_cnt <= 'd0;else if(wr_action)wr_cnt <= wr_cnt + 1;elsewr_cnt <= wr_cnt;
endalways @(posedge M_AXIS_ACLK or negedge M_AXIS_ARESETN) beginif(!M_AXIS_ARESETN)ro_M_AXIS_TVALID <= 'd0;else if(wr_cnt == 511)ro_M_AXIS_TVALID <= 'd0;else if(wr_cnt == 0)ro_M_AXIS_TVALID <= 'd1;elsero_M_AXIS_TVALID <= ro_M_AXIS_TVALID;    
endalways @(posedge M_AXIS_ACLK or negedge M_AXIS_ARESETN) beginif(!M_AXIS_ARESETN)beginro_M_AXIS_TDATA <= 'd0;  ro_M_AXIS_TSTRB <= 'd0;endelse if(ro_M_AXIS_TLAST && wr_action)beginro_M_AXIS_TDATA <= 'd0;ro_M_AXIS_TSTRB <= 'd0;        endelse if(wr_action)beginro_M_AXIS_TDATA <= ro_M_AXIS_TDATA + 1;ro_M_AXIS_TSTRB <= 8'b1111_1111;       endelse beginro_M_AXIS_TDATA <= ro_M_AXIS_TDATA; ro_M_AXIS_TSTRB <= ro_M_AXIS_TSTRB;        end   
endalways @(posedge M_AXIS_ACLK or negedge M_AXIS_ARESETN) beginif(!M_AXIS_ARESETN)ro_M_AXIS_TLAST <= 'd0;else if(wr_cnt == 511 && wr_action == 1)ro_M_AXIS_TLAST <= 'd0;else if(wr_cnt == 510 && wr_action == 1)ro_M_AXIS_TLAST <= 'd1;elsero_M_AXIS_TLAST <= ro_M_AXIS_TLAST;       
end
endmodule

PS端设计

对于DMA寄存器的控制

在BD中,有ZYNQ核引出GP口去控制DMA,映射到PS端就是DMA设备。对于DMA寄存器的操作就是DMA的初始化等一系列操作。下图是GP所分配的地址空间,与PS端DMA设备的基址一致。
在这里插入图片描述
在这里插入图片描述

对DMA进行初始化

int Axi_Dma_Initial(XAxiDma* xdma)
{int status = 0;XAxiDma_Config *xaxidmafig;xaxidmafig = XAxiDma_LookupConfig(XPAR_AXI_DMA_0_DEVICE_ID);status = XAxiDma_CfgInitialize(xdma,xaxidmafig);if(status != XST_SUCCESS){return XST_FAILURE;}XAxiDma_Reset(xdma);while(!XAxiDma_ResetIsDone(xdma));return status;
}
    	status = XAxiDma_SimpleTransfer(xdma,XPAR_PS7_RAM_0_S_AXI_BASEADDR,512,XAXIDMA_DEVICE_TO_DMA);usleep(5000);

数据分析:在PL侧写入了512个64bit的数据,等于512Byte个字节。
由于BASE_ADDRESS=0x00000000,所以HIGH_ADDRESS=0x00000200,也就是512个字节单位。
在这里插入图片描述
从图中可以看出,起始数据从0x0000000开始,也就是少写了8个64bit数据。再看末尾地址,也是对应的上8个64位地址,所以写数据操作整体没有问题。但开始会丢失8个数据。
目前这个BUG还没有找到原因,希望有大神能有解答。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/728443.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sql高级

sql高级 SQL SELECT TOP 子句 SELECT TOP 子句用于规定要返回的记录的数目。 SELECT TOP 子句对于拥有数千条记录的大型表来说&#xff0c;是非常有用的。 **注意:**并非所有的数据库系统都支持 SELECT TOP 语句。 MySQL 支持 LIMIT 语句来选取指定的条数数据&#xff0c; O…

Qt + mqtt对接阿里云平台(一)

一、阿里云平台 官网&#xff1a;点击跳转 二、创建产品与设备 1、“公共实例” 2、“设备管理”->“产品”->“创建产品” 3、“产品名称”->“自定义品类”->"确认" 4、“前往添加” 5、“添加设备” 6、摄入DeviceName和备注名称 7、"前往查…

每周一算法:A*(A Star)算法

八数码难题 题目描述 在 3 3 3\times 3 33 的棋盘上&#xff0c;摆有八个棋子&#xff0c;每个棋子上标有 1 1 1 至 8 8 8 的某一数字。棋盘中留有一个空格&#xff0c;空格用 0 0 0 来表示。空格周围的棋子可以移到空格中。要求解的问题是&#xff1a;给出一种初始布局…

文心一言 VS 讯飞星火 VS chatgpt (210)-- 算法导论16.1 1题

一、根据递归式(16.2)为活动选择问题设计一个动态规划算法。算法应该按前文定义计算最大兼容活动集的大小 c[i,j]并生成最大集本身。假定输入的活动已按公式(16.1)排好序。比较你的算法和GREEDY-ACTIVITY-SELECTOR的运行时间。如何要写代码&#xff0c;请用go语言。 文心一言&…

excel统计分析——裂区设计

参考资料&#xff1a;生物统计学 裂区设计&#xff08;split-plot design&#xff09;是安排多因素试验的一种方法&#xff0c;裂区设计对因素的安排有主次之分&#xff0c;适用于安排对不同因素试验精度要求不一的试验。 裂区设计时&#xff0c;先按第一因素的处理数划分主区&…

独立站营销新纪元:AI与大数据塑造个性化体验的未来

随着全球互联网的深入发展和数字化转型的不断推进&#xff0c;作为品牌建设和市场营销的重要载体&#xff0c;独立站将迎来新的发展机遇。新技术的涌现&#xff0c;特别是人工智能和大数据等技术的广泛应用&#xff0c;为独立站带来了前所未有的机遇与挑战。本文Nox聚星将和大家…

ios xcode 15 PrivacyInfo.xcprivacy 隐私清单

1.需要升级mac os系统到13 兼容 xcode 15.1 2.升级mac os系统到14 兼容 xcode 15.3 3.选择 New File 4.直接搜索 privacy 能看到有个App Privacy 5.右击Add Row 7.直接选 Label Types 8.选中继续添加就能添加你的隐私清单了 苹果官网文档Describing data use in privacy man…

springboot247人事管理系统

人事管理系统的设计与实现 摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理&#xff0c;然而&#xff0c;随着近些年信息技术的迅猛发展&#xff0c;让许多比较老套的信息管理模式进行了更新迭代&#xff0c;问卷信息因为其管理内容繁杂&#xff0c;管理数量繁多导…

Redis基本使用和基础知识整理

Redis是做什么的&#xff1f; Redis是一个开源&#xff0c;内存存储的数据结构服务器&#xff0c;可用作数据库&#xff0c;高速缓存和消息队列。Redis将数据储存在内存当中 内存的特点 易失性&#xff08;在断电之后数据就没有了&#xff09;进行读取数据等IO操作的速度要比…

C语言进阶—表达式求值

隐式类型转换&#xff1a; C 的整型算术运算总是至少以缺省(默认)整型类型的精度来进行的。 为了获得这个精度&#xff0c;表达式中的字符和短整型操作数在使用之前被转换为普通整型&#xff0c;这种转换称为整型提升。 #include <stdio.h>int main() {char c 1;printf(…

Springboot 的几种配置文件形式

方式一&#xff1a;多个yml文件 步骤1&#xff1a;创建多个配置文件 application.yml #主配置文件 application-dev.yml #开发环境的配置 application-prod.yml #生产环境的配置 application-test.yml #测试环境的配置步骤2&#xff1a;applicaiton.yml中指定配置 在a…

代码随想录day13(1)栈与队列:用栈实现队列(leetcode232)

题目要求&#xff1a;使用栈实现push、pop、empty、peek&#xff08;返回队列首部元素&#xff09;。 思路&#xff1a;本题思路比较容易&#xff0c;即用两个栈模拟即可&#xff0c;pop时只需要先判断stackout栈是否为空&#xff0c;如果不空直接弹出&#xff0c;如果空就将s…

组合逻辑电路(一)(加法器)

目录 组合逻辑电路的特点及功能描述 采用SSI的组合逻辑电路的分析与设计 采用SSI的组合逻辑电路的分析 采用SII的组合逻辑电路的设计 例 例 例 常用的MSI组合逻辑电路 半加器 全加器 加法器 串行进位加法器 例 例 超前进位加法器 组合逻辑电路的特点及功能描述 小规模集成…

原生微信小程序电影购票+后台管理系统[含文档]

简介 正文获取联系方式&#xff01;❤❤❤关于JAVA/小程序/安卓/PHP/Python/C#/ASP.NET/大数据/爬虫/数据可视化都可推荐选题和提供专业的指导和支持。 【毕设源码推荐项目】基于原生微信小程序电影购票系统 适用于计算机类毕业设计&#xff0c;本系统功能完整&#xff0c;适合…

基础小白快速入门并行计算------>我们为什么要学习并行计算

什么是并行计算&#xff1f; 随着计算机的不断发展&#xff0c;我们处理的数据不断变多&#xff0c;需要更大得到处理能力、我们希望计算机有着更大更强壮的计算能力&#xff0c;由于cpu的运行能力有限&#xff0c;我们便想到了将多个cpu进行串联计算问题&#xff0c;这也就是我…

AtCoder Beginner Contest 343(A,B,C,D,E,F)

比赛链接 CE是暴力&#xff0c;D是数据结构题&#xff0c;F是线段树。这场的E比较有意思&#xff0c;其他的感觉有点水。 A - Wrong Answer 题意&#xff1a; 给你两个数 A , B A,B A,B ( 0 ≤ A , B ≤ 9 ) (0\le A,B\le 9) (0≤A,B≤9)&#xff0c;返回一个个位数&#…

如何提高项目成功率?分享20 种项目管理工具、技术和软件

本文将分享20种项目管理常用的工具、技术和软件&#xff0c;比如项目管理软件 PingCode、Worktile、Redmine、Jira、SAP、PrimaveraSystems等&#xff1b;项目计划阶段工具和技术WBS、甘特图、PERT图、风险评估矩阵等等。 项目管理是确保项目成功交付的关键&#xff0c;它涉及到…

【产品文档分类及撰写路径】

一、产品文档的分类 产品文档根据所处阶段和面相对象的差异大致可以分为三类&#xff1a; 商业需求文档 (BRD)&#xff1a;商业需求文档是面向公司高层和项目组&#xff0c;目的是为了获得资金、资源支持。市场需求文档 (MRD)&#xff1a;市场需求文档是面向运营和市场销售人员…

【重要!!退税!退税!】一年一度个人所得税综合年度汇算开始了!

目录标题 如何退税&#xff1f;2023年度个人所得税综合所得汇算清缴操作指南汇算准备标准申报 退税骗局&#xff1f;1.“您有一笔退税待领取”骗局2.“专业人员帮你多退税”骗局3.“诱导填报虚假个税信息”骗局4.“税务稽查人员联系你”骗局 如何退税&#xff1f; 2023年度个人…

2024年腾讯云优惠政策_腾讯云服务器特价购买活动入口

腾讯云优惠活动2024新春采购节活动上线&#xff0c;云服务器价格已经出来了&#xff0c;云服务器61元一年起&#xff0c;配置和价格基本上和上个月没什么变化&#xff0c;但是新增了8888元代金券和会员续费优惠&#xff0c;腾讯云百科txybk.com整理腾讯云最新优惠活动云服务器配…