AXI MCDMA 仿真与工作流程分析
说明
关于背景知识,可以先看 https://www.cnblogs.com/xingce/p/16386108.html
引用一段官方的说明,AXI MCDMA存在的主要目的是为了节约资源,我们想要使用这个模块的主要目的也是为了降低资源消耗,从而可以将系统部署在更小面积的FPGA芯片上,当然,具体的效果还需要进一步的测试,先对该IP做一些仿真和在线测试吧。
FPGAs have been providing DMA engines in the Programmable Logic for many years. To add to the existing DMA offering, Xilinx added a Multichannel DMA IP into the Xilinx IP Catalog to provide additional channels. Additional DMA channels provide a hardware segregation of data that ultimately provides more efficient management of data streams. This leads to an overall savings of Programmable Logic, while maintaining data movement throughput.
下图是IP的接口和配置界面,更详细的描述请移步官方手册 https://docs.xilinx.com/v/u/en-US/pg288-axi-mcdma

初步目标
在开始之前,先确定一个目标,我们希望通过该仿真的学习,搞清楚IP的基本配置、工作流程,然后去创建自己的仿真工程
官方仿真范例
选择打开IP的example design,查看其仿真工程

先来看看顶层的*tb.v 仿真文件,里面生成了1个200M的基准时钟,然后发送了start开始信号,并检测结束done信号与status信号,根据status的状态输出测试结论,核心的测试代码不在这个文件里面
再来直接看DUT的顶层文件,先搞清楚对应的额层级关系
下图表明axi_traffic_gen_0 用作mcdma的axi lite master模块,完成对mcdma 寄存器的配置

AXI MCDMA会读出BRAM_CTL_0 中的数据,那么BRAM 0中的数据怎么才知道是不是对的,又需要一个模块写入测试数据,这个测试数据由axi4_write_master.vhd模块完成,在系统复位解除后,就开始写入测试数据

与读出通道对应,AXI MCDMA会向BRAM_CTL_1写入测试数据,检查数据正确性的时候,测试逻辑是直接检查的写入信号,并不是将BRAM 1中写入的数据读出做校验,这一点需要查看仿真波形,有可能设计人员偷懒,所以这样写的

descriptor信息预先存储在BRAM_CTL_3中,由AXI MCDMA的AXI SG接口将对应的信息读出,对应的descripto信息存储在"sg_mem.mem" 文件中

从以上信息基本可以看清整个仿真逻辑了,接下来再结合仿真信号看看真实的工作流程。
仿真信号查看
首先,根据IP手册,AXI MCDMA开始工作之前,需要配置对应寄存器
先看S2MM 写操作对应的流程,MM2S也是对应的流程,这里不介绍了,可以看仿真的时序和IP手册的说明
这是IP手册建议的流程

首先,需要先将MCDMA的S2MM 对应channels Run起来
向0x500 寄存器写入控制数据

对应仿真时序图如下,其中基地址为0x500 ,写入数据为0x000202f1

使能对应通道
向0x508寄存器写入对应参数,当disable的时候,并非真的stop了,而是当descriptor 链表对应也执行到含EOF标志的链表时才真正停止。
(这里有个问题就需要注意,如果是读出操作,我们丢弃不需要的数据,如果是写入操作,如何结束呢?)

应该向0x008写入0x1 使能MM2S的channel 0,仿真实际写入的是0x3,这个是由于仿真代码是设定的2个通道,2个通道是合理的,因为只有这样才能体现出Multichannel DMA的意义
配置descriptor 对应的地址
IP根据配置的descriptor地址去memory中fetch对应的descriptor链表,然后执行对应的axi读写操作
下面描述了对应channel 0 1的descriptor地址,由于我们是32bit 地址区间,所以只需要对应配置LSB 32bit地址即可,MSB 是在超过32bit地址空间的空间才有效

配置通道控制寄存器
每个通道都有自己的配置寄存器,这些寄存器第0个bit是开启descriptor的featch,其它bit基本都是和中断的产生相关的,仿真范例对S2MM和MM2S 通道进行了不同的设置,这个可以从仿真波形观察得到

BD descriptor的读取
通过观察寄存器写入的值,可以看出S2MM 的channel 0 对应写入的current BD 地址为0x100 , nexr BD 地址为0x140
下图是对应的时序,图中不能看出具体的地址,如果想看的话可以自己仿真,然后放大观察

BD descriptor 描述,下图描述了MM2S对应的descriptor描述,S2MM也是类似的内容,AXI MCDMA对应的通道会根据这个descriptor完成对应的dma操作

在这个仿真范例中,我们看一下

SG从0x100地址读指定 8*32bit的descriptor数据,然后根据descriptor去读取数据
整体看下来,这个仿真demo是非常简易的,不能覆盖真实的工况,下一步需要上机测试才能更好的模拟真实工作场景
AXI MCDMA 仿真与工作流程分析的更多相关文章
- 【转】Hostapd工作流程分析
[转]Hostapd工作流程分析 转自:http://blog.chinaunix.net/uid-30081165-id-5290531.html Hostapd是一个运行在用户态的守护进程,可以通 ...
- 第2章 rsync算法原理和工作流程分析
本文通过示例详细分析rsync算法原理和rsync的工作流程,是对rsync官方技术报告和官方推荐文章的解释. 以下是本文的姊妹篇: 1.rsync(一):基本命令和用法 2.rsync(二):ino ...
- [国嵌笔记][030][U-Boot工作流程分析]
uboot工作流程分析 程序入口 1.打开顶层目录的Makefile,找到目标smdk2440_config的命令中的第三项(smdk2440) 2.进入目录board/samsung/smdk244 ...
- rsync算法原理和工作流程分析
本文通过示例详细分析rsync算法原理和rsync的工作流程,是对rsync官方技术报告和官方推荐文章的解释.本文不会介绍如何使用rsync命令(见rsync基本用法),而是详细解释它如何实现高效的增 ...
- nodejs的Express框架源码分析、工作流程分析
nodejs的Express框架源码分析.工作流程分析 1.Express的编写流程 2.Express关键api的使用及其作用分析 app.use(middleware); connect pack ...
- Mysql工作流程分析
Mysql工作流程图 工作流程分析 1. 所有的用户连接请求都先发往连接管理器 2. 连接管理器 (1)一直处于侦听状态 (2)用于侦听用户请求 3. 线程管理器 (1)因为每个用户 ...
- u-boot分析(二)----工作流程分析
u-boot分析(二) 由于这两天家里有点事,所以耽误了点时间,没有按时更新,今天我首先要跟大家说说我对于u-boot分析的整体的思路,然后呢我以后的博客会按照这个内容更新,希望大家关注. 言归正传, ...
- Struts2的工作流程分析
Struts2的工作流程分析 Posted on 2011-02-22 09:32 概述 本章讲述Struts2的工作原理. 读者如果曾经学习过Struts1.x或者有过Struts1.x的开发经验, ...
- rsync(三)算法原理和工作流程分析
在开始分析算法原理之前,简单说明下rsync的增量传输功能. 假设待传输文件为A,如果目标路径下没有文件A,则rsync会直接传输文件A,如果目标路径下已存在文件A,则发送端视情况决定是否要传输文件A ...
随机推荐
- 多台云服务器的 Kubernetes 集群搭建
环境 两台或多台腾讯云服务器(本人搭建用了两台),都是 CentOs 7.6, master 节点:服务器为 4C8G,公网 IP:124.222.61.xxx node1节点:服务器为 4C4G,公 ...
- Docker 与 K8S学习笔记(二十五)—— Pod的各种调度策略(上)
上一篇,我们学习了各种工作负载的使用,工作负载它会自动帮我们完成Pod的调度和部署,但有时我们需要自己定义Pod的调度策略,这个时候该怎么办呢?今天我们就来看一下如何定义Pod调度策略. 一.Node ...
- ssh空闲一段时间后自动断网
ssh空闲一段时间后自动断网 用客户端工具,例如securecrt连接linux服务器,有的会出现过一段时间没有任何操作,客户端与服务器就断开了连接. 造成这个的原因,主要是因为客户端与服务器之间存在 ...
- docker容器内修改文件
1.找到容器对应的ID 使用docker ps命令找到对应的镜像id 2.根据容器id进入到对应文件夹 执行命令:docker exec -it 镜像id /bin/bash 3.进入对应目录(以My ...
- Redis主从复制+Keepalived+VIP漂移实现HA高可用技术之详细教程
1.大家可以先看我的单台Redis安装教程,链接在此点击Redis在CentOS for LInux上安装详细教程 2.第一台redis配置,是正常配置.作为MASTER主服务器,第二台redis的配 ...
- 【ArcGIS教程】专题图制作-人口密度分布图——人口密度分析
本篇以湖北省为例,制作人口密度分布图:这里所使用的为湖北省的省.市.县三个级别的行政区划矢量数据,以及居民点数据,进而进行密度分析. 示例数据来源于地理遥感生态网,网站地址www.gisrs.c ...
- Tapdata 实时数据融合平台解决方案(四):技术选型
作者介绍:TJ,唐建法,Tapdata 钛铂数据CTO,MongoDB中文社区主席,原MongoDB大中华区首席架构师,极客时间MongoDB视频课程讲师. 常见搭建数据中台的技术产品 数据中台包括: ...
- 项目中使用@Transactional需要注意的点
项目如果是Spring Boot.或者Spring Cloud,切记需要在启动类上加入@EnableTransactionManagement该注解.否则事务不生效. @Transactional是一 ...
- Hash 哈希表和算法思路详解
概述 哈希表是一种可以满足快速查找数据结构,时间复杂度接近O(1). 哈希函数是无限集到有限集的映射. 处理数据量大,查找效率要求高时推荐使用hash容器. 问题: 什么情况下考虑使用哈希容器? 常用 ...
- 如何用天气预警API接口进行快速开发
天气预警能够指导人们出行.同一种类的气象灾害预警信号级别不同,对应的防御措施也不尽相同,人们通过气象灾害预警信号,合理安排出行.公众要提高防范意识,养成接收和关注预警信息的习惯,了解预警信息背后的意义 ...