赞
踩
首先感谢 Xilinx XDMA 例程代码分析与仿真结果_xdma仿真-CSDN博客 的作者,也让我对XMDA有了比较多的认识,本文会从一个完全是新手的角度去理解和分析XDMA的使用,所以一旦中途有什么不懂的地方就会跳到相关的知识点进行补充说明,但因为知识浅薄,难免有理解分析出错的地方,欢迎留言反馈,共同进步。本文主要针对 XDMA (DMA/Bridge Subsystem for PCI Express) 进行了详细的配置分析,确保懂得每一个知识点,知道如何配置。
有毅力的朋友可以先去学习下基础知识,强烈安利这个网站: PCIe扫盲系列博文连载目录篇(第一阶段)-Felix-电子技术应用-AET-中国科技核心期刊-最丰富的电子设计资源平台 (chinaaet.com)。不过笔者有时候喜欢‘急功近利“,但遇到问题就需要跳出来学习,因为有时候这样记得住一点,和问题结合下理解也深入一点。各有千秋吧。所以我们就先跳过这部分,下面就让我们开始吧。
我们使用的是 AMD 的 DMA/Bridge Subsystem for PCI Express (amd.com)。本文以Vivado 2020_2 版本为例进行说明。
首先打开 Vivado,建立一个空白工程。因为使用的是XDMA IP,并且想借用IP的example进行分析,所以可以通过以下两种途径打开,但不知为何第一种无法打开 example design,所以只能以第二种方式继续往下写。
工程名称默认即可:
在Diagram窗口中查找DMA IP 并双击会出现的图形化模块
双击xdma_0模块就会出现配置界面,下面针对配置进行逐一分析。
Basic 页面就是笔者选择的配置:
这页不需要更改配置,默认就行,但可以解释下。
在开始解释说明之前,我们需要跳出来学习一个PCIe 配置空间的概念。其实,PCI有三个相互独立的物理地址空间: memory地址空间、I/O地址空间和配置空间。我们可以通过读取配置空间获得设备的信息,也可以通过配置空间来配置设备。下图显示了EP模式下配置空间的Header(64 DWs):
其中第03个DW高3个字节就是Class Code. 具体解释可以参考: PCIe配置空间(PCIE Configuration Space) – 类型码(Class Code) - 码峰编程笔记 (cfnotes.com)
笔者将一个包含此IP的bit文件烧写进开发板后,安装了 TeleScan PE 软件获取到PCIe开发板的如下信息:
从第一句话中可见系统已经成功识别了这是来自Xilinx公司的PCIe 设备。Class的配置和我们配置界面 070001 也是一致的。
这里有3个接口可以选择,如果都勾选上了,那么根据定义分为为:BAR0,BAR1,BAR2
DMA空间,这里IP隐藏了一些配置,DMA需要256KB地址,这是默认设置。
和BAR0的配置理解一致。
在开始解释各个配置之前,我们可以先看下整个DMA的框图,如下
框图中上半部分中有H2C和C2H模块,并且是多个叠加的。H2C 主要表示数据的搬运方向是从右边的Host 发送到左边的Card(可以理解为PCIe卡)。
到此为此,所有的配置工作已经完成,点击完成。
后续我们可以通过右键这个IP,打开example design 进一步分析其工作机制。注意,这步操作会自动新建一个工程。
最后的结果如下,后续再更新第二章内容,关于如何认识仿真环境。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。