PCIE_DMA实例一:xapp1052详细使用说明
一:前言
很多和我一样初学pcie的硬件工程师都会遇到这样一个问题,看了不少pcie相关的资料,还是搞不清这玩意儿到底该怎么用。于是我们打开ISE的core_generator工具,生成了一个pcie的ip核,用modelsim仿真一下example design,仔细分析一下,好像对协议部分理解更深了。至于怎么用,呵呵……
当然,多数硬件工程师都是有上进心的!于是我们上网找资料,发现了一个xilinx官方出品的demo:xapp1052。全称是Bus Master DMA Performance Demonstration Reference Design for the Xilinx Endpoint PCI Express® Solutions。高大上啊,终于知道用在什么地方了,果断下载下来。打开一看,东西不少,按照里面xapp1052.pdf的说明,一步一步生成bit,下载到开发板里,然后安装上位机软件,最后测试并且用chipscope抓信号分析。但事实上,你愚蠢得连bit都生成不了(遇到相同情况的朋友请默默为我点赞)。就在你干着急的时候,你看到了这篇伟大的博客……接下来,我将手把手教你如何使用这个xapp1052。
二:前期准备
1、pcie基础还是要有,尤其是协议部分。推荐一本电子书,很经典,请耐心读它(Addison.Wesley.PCI.Express.System.Architecture.eBook-LiB.chm)下载地址:http://download.csdn.net/download/yuzeren48/7723815
2、一块开发板,我使用的是Xilinx ML605。
3、一台带PCIE插槽的主机。
4、Xapp1052 Demo(http://download.csdn.net/download/yuzeren48/7723795)
5、ISE14.1套件
三:使用说明
1、打开coregenerator生成一个4通道gen2的pcie ip核,配置部分见下图,尤其注意classcode必须是’h058000,否则无法正常安装驱动。除图中几处需要更改外,其余均为默认设置

图1 配置1

图2 配置2

图3 配置3

图4 配置4

图5 Pcie核目录
2、建立BMD_Dsign 工程。完整工程文件下载地址(http://download.csdn.net/download/yuzeren48/7723831)。下载需要积分,推荐大家按照以下说明一步一步自己建立。首先打开ise,新建工程,添加文件。文件来自:
..\v6_pcie_v1_7\source全部
..\v6_pcie_v1_7\example_design中的xilinx_pcie_2_0_ep_v6_04_lane_gen2_xc6vlx240t-ff1156-1_ML605.ucf和xilinx_pcie_2_0_ep_v6.v
..\xapp1052\dma_performance_demo\fpga\BMD\common全部
..\xapp1052\dma_performance_demo\fpga\BMD中的BMD_64_RX_ENGINE.v和BMD_64_TX_ENGINE.v和v6_pci_exp_64b_app.v
然后编译,由于要先编译BMD_PCIE_20.v,所以右键选择manual compile order,如图6所示。

图6 编译工程
选中所有.v和.ucf文件,完成综合以及布局布线,并生成bit文件,如图7所示。

图7 生成bit文件
注意:如果觉得这样编译不舒服,看不清层次结构。可以将BMD_PCIE_20.v删除,并把所有文件中的`ifdef PCIE2_0去掉。
3、modelsim仿真
很多人觉得直接把bit写入开发板,用chipscope在线调试即可。小编觉得最好还是先用modelsim做一下仿真,确定逻辑没有问题再烧板子。小编曾好几次烧了错误的bit,用chipscope怎么都抓不到信号。接下来我们讲如何仿真。
首先将..\v6_pcie_v1_7\example_design文件夹下的文件(除xilinx_pcie_2_0_ep_v6.v以外)全部删除,将..\dma_performance_demo\fpga\BMD\common下的全部文件以及..\dma_performance_demo\fpga\BMD下的BMD_64_RX_ENGINE.v和BMD_64_TX_ENGINE.v和v6_pci_exp_64b_app.v复制到..\v6_pcie_v1_7\example_design文件夹下。
然后修改..\v6_pcie_v1_7\simulation\functional下的board.f文件,注意BMD_PCIE_20.v必须放在最前面编译,修改后的board.f文件如图8所示:

图8 修改后的board.f
最后,打开Modelsim SE10.1b软件,更改目录至. .\v6_pcie_v1_7\simulation\functional
输入脚本do simulate_mti.do 仿真结果如图9图10所示

图9 仿真结果1

图10 仿真结果2
备注:这里的modelsim仿真并没有用到DMA功能,只是测试我们的代码完整性。如果需要仿真DMA功能,可以自己调用pci_exp_usrapp_tx.v中的函数,往DMA控制寄存器中写入地址、长度等数据,然后启动DMA读或者写。
4、Chipscopes抓包分析
首先需要在ise工程里添加chipscope核,chipscope的使用方法详见(http://download.csdn.net/download/yuzeren48/7705033),这里给出带有chipscope核的ise工程文件下载地址(http://download.csdn.net/download/yuzeren48/7723831)
插入cdc,生成了bit之后,下载到开发板中,将开发板插入主机的PCIE插槽,上电设备管理器检测到有PCI内存控制器。用xapp1052.pdf中的步骤,强制安装驱动。安装完驱动后打开软件如图11所示

图11 上位机软件
先测试write:
将pattern to write 改成0x01020304,其余保持默认设置。点击start,在chipscope中我们就可以看到DMA控制寄存器一共收到了来自主机的多个数据包,如图12所示(注意,将windows设成8,depth设成8,同时设置触发信号如图13所示)。

图12 主机写DMA控制寄存器

图13 设置触发信号
这些包都是用来写DMA控制寄存器的,这几个包的发包顺序如下:

当主机向偏移地址为04的寄存器写入0x00000001时,DMA启动写内存模式,如图14所示。(我们可以通过设置触发信号trn_rd的低32位为0x01000000来检测DMA写开始)

图14 DMA写内存
同样的方法,测试read。我们可以通过DMA来读内存。如图15所示

图15 DMA读内存
PCIE_DMA实例一:xapp1052详细使用说明的更多相关文章
- PCIE_DMA实例四:xapp1052在Xilinx 7系列(KC705/VC709)FPGA上的移植
PCIE_DMA实例四:xapp1052在Xilinx 7系列(KC705/VC709)FPGA上的移植 一:前言 这段时间有个朋友加微信请求帮忙调试一块PCIe采集卡.该采集卡使用xilinx xc ...
- IDea 工具debug模式详细使用说明
IDea 工具debug模式详细使用说明 IDEA中如何使用debug调试项目 一步一步详细教程 Debug用来追踪代码的运行流程,通常在程序运行过程中出现异常,启用Debug模式可以分析定位异常发生 ...
- PCIE_DMA实例五:基于XILINX XDMA的PCIE高速采集卡
PCIE_DMA实例五:基于XILINX XDMA的PCIE高速采集卡 一:前言 这一年关于PCIE高速采集卡的业务量激增,究其原因,发现百度"xilinx pcie dma",出 ...
- python的urllib2库详细使用说明
一直以来技术群里会有新入行的同学提问关于urllib和urllib2以及cookielib相关的问题.所以我打算在这里总结一下,避免大家反复回答同样的问题浪费资源. 这篇属于教程类的文字,如果你已经非 ...
- R语言-Knitr包的详细使用说明
R语言-Knitr包的详细使用说明 by 扬眉剑 来自数盟[总舵] 群:321311420 1.相关资料 1:自动化报告-谢益辉 https://github.com/yihui/r-ninja/bl ...
- Spark+ECLIPSE+JAVA+MAVEN windows开发环境搭建及入门实例【附详细代码】
http://blog.csdn.net/xiefu5hh/article/details/51707529 Spark+ECLIPSE+JAVA+MAVEN windows开发环境搭建及入门实例[附 ...
- STM32-USB详细使用说明(转)
源:STM32-USB详细使用说明 附件HID的双向通信 亮点STM32开发板充实了USBHID数据发送和接收例程(STM32固件库3.5 USB库3.4)
- linux backtrace()详细使用说明,分析Segmentation fault
linux backtrace()详细使用说明,分析Segmentation fault 在此之前,开发eCos应用程序时,经常碰到程序挂掉后,串口打印输出一大串让人看不懂的数据.今天才明白,原来这些 ...
- 关于javascript中静态成员和实例成员的详细解释
关于javascript中静态成员和实例成员的详细解释 在我们了解什么是静态成员和实例成员之前,我们首先来了解一下什么是实例? 实例就是由构造函数创建出来的对象. 例如案例中 p 就是实例: fun ...
随机推荐
- idea springboot应用启动
在idea里启动springboot应用最好使用 spring-boot:run 如果通过运行main方法启动应用,会找不到页面
- Android8.0适配那点事(一)
最近有小伙伴说,7.0适配整了一波,现在又要来适配8.0,真是一波未平一波又起 但是作为开发者来说,学无止境,不跟上时代的步伐,肯定会被时代所淘汰... 话说Android P已经在路上了,你准备好了 ...
- 事件驱动模型 IO多路复用 阻塞IO与非阻塞IO select epool
一.事件驱动 1.要理解事件驱动和程序,就需要与非事件驱动的程序进行比较.实际上,现代的程序大多是事件驱动的,比如多线程的程序,肯定是事件驱动的.早期则存在许多非事件驱动的程序,这样的程序,在需要等待 ...
- shell_script2
一.函数 1.简介 Shell函数类似于Shell脚本,里面存放了一系列的指令 不过,Shell的函数存在于内存,而不是硬盘文件,所以速度很快 另外,Shell还能对函数进行预处理,所以函数的启动比脚 ...
- LeetCode题解之Find the Difference
1.题目描述 2.题目分析 比较两个字符串中加入的一个字符,由于可能在字符串中加入一个已经存在的字符,因此使用hash table 去统计字符个数最好. 3.代码 char findTheDiffer ...
- Oracle GI 日志收集工具 - TFA
1.TFA的目的: TFA是个11.2版本上推出的用来收集Grid Infrastructure/RAC环境下的诊断日志的工具,它可以用非常简单的命令协助用户收集RAC里的日志,以便进一步进行诊断:T ...
- extjs 可视化开发工具
不清楚Ext可视化的可以看一下http://www.screencast.com/users/JackSlocum这里的三个视频哈. 安装和汉化的步骤 第一步下载:Ext需要支持AIR的支持 下载并安 ...
- [翻译] UIImageView-Letters
UIImageView-Letters https://github.com/bachonk/UIImageView-Letters An easy, helpful UIImageView cate ...
- 最强自定义PHP集成环境,系统缺失dll和vc也能正常运行
PHPWAMP支持iis.apache.nginx等web服务器,并全部支持php多版本同时运行,无限自定义mysql.php PHPWAMP支持32和64,支持自定义自动匹配系统所需dll和vc,纯 ...
- PHP SPL神器实现堆排序
之前学习过内部排序的八大算法,也一一写过代码实现.其中堆排序的原理是 将一颗二叉树初始化为堆 依次将最后一个结点与堆顶结点交换.然后调整堆顶元素位置,重置堆. 将二叉树初始化为堆可以看做从最后一个非叶 ...