• 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_7source全部

    ..v6_pcie_v1_7example_design中的xilinx_pcie_2_0_ep_v6_04_lane_gen2_xc6vlx240t-ff1156-1_ML605.ucf和xilinx_pcie_2_0_ep_v6.v

    ..xapp1052dma_performance_demofpgaBMDcommon全部

    ..xapp1052dma_performance_demofpgaBMD中的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_7example_design文件夹下的文件(除xilinx_pcie_2_0_ep_v6.v以外)全部删除,将..dma_performance_demofpgaBMDcommon下的全部文件以及..dma_performance_demofpgaBMD下的BMD_64_RX_ENGINE.v和BMD_64_TX_ENGINE.v和v6_pci_exp_64b_app.v复制到..v6_pcie_v1_7example_design文件夹下。

    然后修改..v6_pcie_v1_7simulationfunctional下的board.f文件,注意BMD_PCIE_20.v必须放在最前面编译,修改后的board.f文件如图8所示:

    图8 修改后的board.f

    最后,打开Modelsim SE10.1b软件,更改目录至. .v6_pcie_v1_7simulationfunctional

    输入脚本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读内存

     

     

  • 相关阅读:
    VS2008环境下CEGUI 0.7.1及相关工具的编译(转载 + 额外的注意事项)
    Makefile的学习
    Erlang 程序文档(转)
    erlang 二进制数据
    erlang中命令行传参,以及类型等。
    笔记:JAVA的静态变量、静态方法、静态类
    关于手机定位方案设计
    转:eclipse技巧
    DXUT CD3DArcBall类
    关于模型转向自然化思考
  • 原文地址:https://www.cnblogs.com/yuzeren48/p/3896138.html
Copyright © 2020-2023  润新知