xilinx AXI-CDMA 学习笔记
此文是笔者记录的 AXI Central Direct Memory Access (CDMA)相关学习笔记及参考例程仿真说明。
仿真环境
win10 64bit
vivado 2017.4
modelsim
功能介绍
IP架构
模块分解介绍
Register Module
包含AXI-CDMA的控制及状态寄存器, 接口 AXI-lite ,寄存器列表如下:
Scatter/Gather Block
SG引擎模块,通过 AXI4-SG master接口,获取和更新系统内存中的CDMA 控制传输描述符链表。SG 引擎提供内部描述符队列,使得描述符的预取和处理能和CDMA数据传输同时进行。描述符链表定义如下:
DMA Controller
协调DM模块的命令加载,状态检索,并将状态更新会 register module
DataMover :用作高吞吐量数据传输。提供4Kbyte地址保护的CDMA操作,突发自动拆分,多次传输请求自动排队。提供任意地址读写数据的 byte-level 重对齐功能(最多512bit ???????)
IP接口
仿真说明
直接生成example例程,然后关联modelsim仿真,以下以SG模式举例说明,
仿真模型如下(自己画的,将就看下)
1) AXI_ATG_LOGIC 配置CDMA寄存器,设置SG Descriptor的 Current Descriptor Pointer和tail Descriptor Pointer
2) AXI_M_SG根据 AXI_S_LITE设置的指针,从SG_BRAM中获取Descriptor list
3)DataMover 根据Descriptor list 从 U0_read 获取数据,写入到 U0_write 中。
4)写入U0_write的数据,同时给一份S2MM_DATA_CHECK模块,比较数据和AXI4_FULL产生的数据是否一致,数据pass/fail信号。
AXI_ATG_LOGIC对CDMA配置如下:
分别配置 0x0, 0x8, 0x10寄存器
对照datasheet, 写寄存器0x0 -> 0x0002_7008
bit[3] = 1 表示 SG mode
bit[12] = 1 表示 IOC_IrqEn
bit[13] = 1表示 Dly_IrqEn
bit[14] = 1 表示ERR_IrqEn
bit[23:16] = 0x2 表示 IRQThreshold = 0x2
对照datasheet, 写寄存器0x8 -> 0x000, 配置当前描述符指针指向地址0
对照datasheet, 写寄存器0x10 -> 0x0000_0040,配置尾描述符指针指向地址0x0000_0040
AXI_ATG_LOGIC 写完 0X10寄存器后,触发SG ENGINE工作,从SG_BRAM读取 discriptor list, discriptor的定义如下:
获取了两个链表,链表1如下:
链表1说明:
0x0 -> NXTDESC_PNTR : 0x0000_0040 , 下一个链表起始地址为0x0000_0040
0x4 -> NXTDESC_PNTR_MSB : 0x0000_0000, 地址高位为0
0x8 -> SA : 0x0000_0000, 数据源地址为0x0000_0000
0xc -> SA_MSB : 0x0000_0000, 数据源高位地址为0x0000_0000
0x10 -> DA : 0x0000_0000, 数据搬运的目的地址为0x0000_0000
0x14 -> DA_MSB : 0x0000_0000, 数据搬运的目的高位地址为0x0000_0000
0x18 -> CONTROL : 0x0000_0100 , BTT = 0x100 , 表示搬运 256byte。
0x1c -> STATUS : 0X0000_0000 , 当前discriptor 的状态。bit[31]为0,表示未完成。
链表2说明:
链表2的地址为0x0000_0040,是axi_lite 配置的 tail discriptor pointer,表示最后一个discriptor。
0x0 -> NXTDESC_PNTR : 0x0000_0040 , 下一个链表起始地址为0x0000_0040
0x4 -> NXTDESC_PNTR_MSB : 0x0000_0000, 地址高位为0
0x8 -> SA : 0x0000_0000, 数据源地址为0x0000_0100, 数据源地址为0x0000_0100
0xc -> SA_MSB : 0x0000_0000, 数据源高位地址为0x0000_0000
0x10 -> DA : 0x0000_0000, 数据搬运的目的地址为0x0000_0000
0x14 -> DA_MSB : 0x0000_0000, 数据搬运的目的高位地址为0x0000_0000
0x18 -> CONTROL : 0x0000_0100 , BTT = 0x100 , 表示搬运 256byte。
0x1c -> STATUS : 0X0000_0000 , 当前discriptor 的状态。bit[31]为0,表示未完成。
最后AXI_M_SG 更新 SG_BRAM的discriptor数据
写0x1c 和 0x5c 为0x8000_0000, 将 Transfer Descriptor Status Word (Status – Offset 1Ch)的bit31写1,complt = 1 ,置完成标志。
参考文献
pg034-axi-cdma
xilinx AXI-CDMA 学习笔记相关推荐
- Xilinx AXI GPIO学习笔记以及问题点
Xilinx AXI GPIO学习笔记以及问题点 1.问题总结 如上图,在Vivado中设置的GPIO IP只有一个,但是使用的两个Channel,此时在SDK中初始化和设置就容易出现问题. 1.1 ...
- xilinx srio ip学习笔记之srio example
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 xilinx srio ip学习笔记之srio example 前言 IP的配置 例程 前言 前面对SRIO的理论有了初步的理解,现在 ...
- 【Xilinx AX7103 MicroBalze学习笔记6】MicroBlaze 自定义 IP 核封装实验
目录 实验任务 实验框图 创建自定义 IP 封装 IP IP 封装界面配置 硬件设计(Vivado部分) Block Design搭建 添加 IP 库 约束文件 软件设计(SDK部分) 往期系列博客 ...
- xilinx srio ip学习笔记之初识srio
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 xilinx srio ip学习笔记之初识srio 前言 IP 设置 总结 前言 因为工作原因,需要对rapidio 的协议进行了解, ...
- AXI协议学习笔记~~
AXI总线简介 AXI属于AMBA(The ARM Advanced Microcontroller Bus Architecture)家族的一员,AXI协议在AMBA3.0版本中开始出现,并在 ...
- 【Xilinx AX7103 MicroBalze学习笔记1】MicroBlaze介绍
目录 MicroBlaze简介 MicroBlaze框架图 MicroBlaze开发流程 Vivado部分 SDK部分 总结 MicroBlaze简介 软核 MicroBlaze 是一款软核微处理器, ...
- Xilinx ZYNQ 7000学习笔记一(复位和启动)
一.复位系统 参考文献:Zynq-7000 SoC Technical Reference Manual (UG585)-ch26 Reset System zynq7000复位信号源包括硬件复位.看 ...
- Xilinx ZYNQ 7000学习笔记三(qspi flash读写操作)
参考文献:Zynq-7000 SoC Technical Reference Manual (UG585)-ch12 Quad-SPI Flash Controller 一.nor Flash介绍 z ...
- xilinx 暑期学校学习笔记(四) 加速代码与量化、稀疏
文章目录 矩阵乘法的优化 矩阵的reshape 缓存的加入 PIPELINE REWIND 卷积神经网络加速 分块划分 访问和内存的流水化 卷积层量化和稀疏 模型量化 带宽 稀疏化 存储 脉动阵列 实 ...
- 【Xilinx AX7103 MicroBalze学习笔记7】MicroBlaze AXI4 接口之 DDR 读写实验
目录 AXI4 协议介绍 实验任务 硬件设计(Vivado 部分) 自定义 IP MicroBlaze 配置 配置 PLL IP 配置 MIG IP 添加源文件 IP 软件设计(SDK 部分)<
最新文章
- python脚本下载sentinel数据_Python API sentinelsat下载错误
- 数据库中间件MyCAT源码分析:调试环境搭建
- Linux dd命令 复制(拷贝)文件,并对原文件进行转换
- 【缓存】redis的基本使用
- AMD 证实停止向中国提供 x86 新技术授权!
- 计算机对身体有哪些危害,经常玩电脑的危害 经常玩电脑对身体有哪些伤害
- 【leetcode】416. Partition Equal Subset Sum
- shell编写监控httpd服务80端口脚本.间隔3秒监控端口如果服务关闭自动重启
- 2016年度最受欢迎的100个Java库
- diskgenius扩容c盘重启电脑卡住_用diskgenius更改分区参数的终止柱面,扩大C盘空间后...
- linux sdr 2832u软件无线电,使用R820T+RTL2832U玩软件无线电
- KVASER 与 Matlab联合使用
- iOS面试 swift篇
- 09、Non-Black-Box ZK(Barak‘s protocol)--Alon Rosen
- android安装到内存卡,android手机怎么把软件安装到内存卡里
- 手把手教你做蓝牙小车(二)
- 微信公众号 Cookie
- 各种 PNG图片压缩对比分析
- mysql 1093 1142
- java截取视频片段_使用javacv 截取视频指定帧节
热门文章
- uniapp 从可视化项目 向 cli 迁移
- Unity - MorphAnimation 超强变形动画编辑器(一) 蒙皮与变形
- asn1 java_ASN.1 Java编译器使用入门
- 区块链技术与应用视频课程【基础篇】-夏杰-专题视频课程
- Re:惠普DJ3836打印机之无法连接wifi
- 安徽大学历年考研真题汇编
- lottie 导出html,Lottie-前端实现AE动效
- flash钢琴自动弹奏之Windows Script实现版
- [附源码]计算机毕业设计Python+uniapp戏曲APP7c26n(程序+lw+APP+远程部署)
- 多线程分批量处理list数据_使用多线程处理输入的数据