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 ...
随机推荐
- redis介绍(2)简单安装
我分两种方式讲解 window 下载地址:https://github.com/MSOpenTech/redis/releases. Redis 支持 32 位和 64 位.这个需要根据你系统平台的实 ...
- nodejs lodash的一些函数
1 _.compact用法 _.compact([0, 1, false, 2, '', 3,'mm']); var test = _.compact([-1,0, 1, false, 2, ...
- Oracle EBS 请求
SELECT t.responsibility_id, t.responsibility_key, t.responsibility_name, t.description, t.menu_id, f ...
- SVN合并时报错:Merge tracking not allowed with missing subtrees; try restoring these items
使用的是TortoiseSVN; Merge tracking not allowed with missing subtrees; try restoring these items 下面会有跟着几 ...
- 【Redis】命令学习笔记——键(key)(20个超全字典版)
安装完redis和redis-desktop-manager后,开始学习命令啦!本篇基于redis 4.0.11版本,从对键(key)开始挖坑! 准备工作,使用db1(默认db0,由于之前练习用db0 ...
- 封装用于解析NSDate的便利的类
封装用于解析NSDate的便利的类 此类可以从NSDate中解析出年份,月份,日期,时,分,秒,毫秒,足够用来做好多事情了,现提供源码如下: 以下是核心的类: TimeInfo.h 与 TimeInf ...
- C 转义字符说明
%a(%A) 浮点数.十六进制数字和p-(P-)记数法(C99)%c 字符%d 有符号十进制整数%f 浮点数(包括float和doulbe)%e(%E) 浮点数指数输出[e-(E-)记数法]%g(%G ...
- Linux vim命令详解
vi: o 处于下一行编辑模式 A 处于编辑的后面 ==>END gg 文件的开头 98gg 跳转到第98行 Shift + G 文件结尾 $ 文件行结尾 ^ 文件行开头 ==> ...
- Ubuntn系统(虚拟机)忘记密码的解决方法
1.重启ubuntu系统,开机时长按shift按键进入GRUB菜单,选择第二个高级选项,enter键进入.如下图: 2.在高级选择中选择Recovery mode模式,键盘按“e”键进入编辑模式.如下 ...
- Shell定时删除日志
vim del_log.sh #!/bin/bash location="/home/dl/code/logs" find $location -mtime +4 -type f ...