此文是笔者记录的 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 学习笔记相关推荐

  1. Xilinx AXI GPIO学习笔记以及问题点

    Xilinx AXI GPIO学习笔记以及问题点 1.问题总结 如上图,在Vivado中设置的GPIO IP只有一个,但是使用的两个Channel,此时在SDK中初始化和设置就容易出现问题. 1.1 ...

  2. xilinx srio ip学习笔记之srio example

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 xilinx srio ip学习笔记之srio example 前言 IP的配置 例程 前言 前面对SRIO的理论有了初步的理解,现在 ...

  3. 【Xilinx AX7103 MicroBalze学习笔记6】MicroBlaze 自定义 IP 核封装实验

    目录 实验任务 实验框图 创建自定义 IP 封装 IP IP 封装界面配置 硬件设计(Vivado部分) Block Design搭建 添加 IP 库 约束文件 软件设计(SDK部分) 往期系列博客 ...

  4. xilinx srio ip学习笔记之初识srio

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 xilinx srio ip学习笔记之初识srio 前言 IP 设置 总结 前言 因为工作原因,需要对rapidio 的协议进行了解, ...

  5. AXI协议学习笔记~~

    AXI总线简介 ​  AXI属于AMBA(The ARM Advanced Microcontroller Bus Architecture)家族的一员,AXI协议在AMBA3.0版本中开始出现,并在 ...

  6. 【Xilinx AX7103 MicroBalze学习笔记1】MicroBlaze介绍

    目录 MicroBlaze简介 MicroBlaze框架图 MicroBlaze开发流程 Vivado部分 SDK部分 总结 MicroBlaze简介 软核 MicroBlaze 是一款软核微处理器, ...

  7. Xilinx ZYNQ 7000学习笔记一(复位和启动)

    一.复位系统 参考文献:Zynq-7000 SoC Technical Reference Manual (UG585)-ch26 Reset System zynq7000复位信号源包括硬件复位.看 ...

  8. Xilinx ZYNQ 7000学习笔记三(qspi flash读写操作)

    参考文献:Zynq-7000 SoC Technical Reference Manual (UG585)-ch12 Quad-SPI Flash Controller 一.nor Flash介绍 z ...

  9. xilinx 暑期学校学习笔记(四) 加速代码与量化、稀疏

    文章目录 矩阵乘法的优化 矩阵的reshape 缓存的加入 PIPELINE REWIND 卷积神经网络加速 分块划分 访问和内存的流水化 卷积层量化和稀疏 模型量化 带宽 稀疏化 存储 脉动阵列 实 ...

  10. 【Xilinx AX7103 MicroBalze学习笔记7】MicroBlaze AXI4 接口之 DDR 读写实验

    目录 AXI4 协议介绍 实验任务 硬件设计(Vivado 部分) 自定义 IP MicroBlaze 配置 配置 PLL IP 配置 MIG IP 添加源文件 IP 软件设计(SDK 部分)<

最新文章

  1. python脚本下载sentinel数据_Python API sentinelsat下载错误
  2. 数据库中间件MyCAT源码分析:调试环境搭建
  3. Linux dd命令 复制(拷贝)文件,并对原文件进行转换
  4. 【缓存】redis的基本使用
  5. AMD 证实停止向中国提供 x86 新技术授权!
  6. 计算机对身体有哪些危害,经常玩电脑的危害 经常玩电脑对身体有哪些伤害
  7. 【leetcode】416. Partition Equal Subset Sum
  8. shell编写监控httpd服务80端口脚本.间隔3秒监控端口如果服务关闭自动重启
  9. 2016年度最受欢迎的100个Java库
  10. diskgenius扩容c盘重启电脑卡住_用diskgenius更改分区参数的终止柱面,扩大C盘空间后...
  11. linux sdr 2832u软件无线电,使用R820T+RTL2832U玩软件无线电
  12. KVASER 与 Matlab联合使用
  13. iOS面试 swift篇
  14. 09、Non-Black-Box ZK(Barak‘s protocol)--Alon Rosen
  15. android安装到内存卡,android手机怎么把软件安装到内存卡里
  16. 手把手教你做蓝牙小车(二)
  17. 微信公众号 Cookie
  18. 各种 PNG图片压缩对比分析
  19. mysql 1093 1142
  20. java截取视频片段_使用javacv 截取视频指定帧节

热门文章

  1. uniapp 从可视化项目 向 cli 迁移
  2. Unity - MorphAnimation 超强变形动画编辑器(一) 蒙皮与变形
  3. asn1 java_ASN.1 Java编译器使用入门
  4. 区块链技术与应用视频课程【基础篇】-夏杰-专题视频课程
  5. Re:惠普DJ3836打印机之无法连接wifi
  6. 安徽大学历年考研真题汇编
  7. lottie 导出html,Lottie-前端实现AE动效
  8. flash钢琴自动弹奏之Windows Script实现版
  9. [附源码]计算机毕业设计Python+uniapp戏曲APP7c26n(程序+lw+APP+远程部署)
  10. 多线程分批量处理list数据_使用多线程处理输入的数据