Xilinx PCIE DMA 仿真环境搭建

目录

1、前言

2、仿真环境搭建

3、BMD工程的PIO仿真

4、xapp1052DMA仿真

4.1 testcase

4.2 配置cfg_bus_mstr_enable

4.3 WR DMA仿真

4.4 RD DMA仿真


 

 

1、前言

       

        在阅读本文之前,建议刚接触PCIE的读者,请按顺序逐一阅读下面几个内容:

         五、Xilinx PCIE CORE学习

        六、Xilinx PCIE DMA--Sparten6/Kintex-7 BMD

        七、Xilinx PCIE DMA 仿真环境搭建

       win10 jungo windriver

 

       本文在上一篇博客 “六、Xilinx PCIE DMA--Sparten6/Kintex-7 BMD 搭建” 的基础上,讲解如何使用modelsim对建好的BMD工程,搭建仿真环境。

         本文搭建了BMD的仿真环境, 通过PIO仿真验证搭建BMD工程的完整性。

         通过xapp1052 DMA仿真,举例分析DMA的数据流。

         软件环境: ISE14.4/ISE14.7。xapp1052是在vivado环境下运行。

 

 

2、仿真环境搭建

“Xilinx PCIE DMA--Sparten6/Kintex-7 BMD 搭建” 基础上,

进行下面步骤:

(1)首先,example_design文件夹下的文件全部删除;

(2)章节3里所有代码层次的.V文件,都复制到example_design文件夹里;

(3)修改\ipcore_dir\dma_core\simulation\functional文件夹里的board.f文件,

         将以前PIO的相关内容,替换为下图中红色框框内容。

         注意,第五行BMD_PCIE_20.v必须放在最前面编译。

        修改后的board.f文件如下图所示。

(4)运行do simulate_mti.do文件后,

         可能会报告xilinx_pcie_2_1_ep_7x.v文件里一些管脚未连接的错误信息,注释掉这些行即可。

        (注释的过程中,可能会不小心将有用的信号线也给屏蔽掉了。因此,注释的过程中,需要格外小心!)

修改后的board.f文件如下图所示:

 

../../example_design/xilinx_pcie_2_1_ep_7x.v
../../example_design/pcie_app_7x_BMD.v
../../example_design/BMD.v
../../example_design/BMD_GEN2.v
../../example_design/BMD_EP.v
../../example_design/BMD_EP_MEM_ACCESS.v
../../example_design/BMD_EP_MEM.v
../../example_design/BMD_64_RX_ENGINE.v
../../example_design/BMD_64_TX_ENGINE.v
../../example_design/BMD_TO_CTRL.v
../../example_design/BMD_CFG_CTRL.v
../../example_design/BMD_INTR_CTRL.v
../../example_design/BMD_RD_THROTTLE.v
../../example_design/BMD_INTR_CTRL_DELAY.v
../../example_design/axi_trn_rx.v  
../../example_design/axi_trn_top.v 
../../example_design/axi_trn_tx.v  

 

3、BMD工程的PIO仿真

接下来可以进行对该BMD工程的仿真。运行do simulate_mti.do以后,可以看到仿真的层次结构如下图所示。

3.1可能遇到的问题

(1)若运行do simulate_mti.do后,modelsim报下面的错误,

打开该文件,可以看到下面的指令,将下面红色圈的部分替换为ISE安装目录下glbl文件的路径即可。

(2)在对Sparten6 pcie仿真时,还modelsim还可能出现下面的错误。

解决方法,将ipcore_dir\pcie_test\simulation\dsport\gtx_wrapper_v6.v文件里的POWER_SAVE[4]设置为1即可解决。

(3)问题:如果在对K7 的pcie进行modelsim仿真时,Wave界面没有自动添加显示观察的波形。

解决方法:找到ipcore_dir\dma_core\simulation\functional文件夹路径下的simulate_mti.do文件,

在其中添加(注意将该语句中的路径替换为自己电脑工程的实际路径):      do E:/k7_dma_test_SIM/dma_test/ipcore_dir/dma_core/simulation/functional/wave.do

(4)问题:在仿真中可能遇到modelsim报错,比如未定义某某函数一类的问题,该问题可能是由于仿真库没有添加到modelsim里。

这个问题,也仅出现在K7 FPGA芯片 DMA64工程里,在SPARTEN6的工程里就没有出现该问题。

解决方法:ipcore_dir\dma_core\simulation\functional文件夹路径下的simulate_mti.do,使用IP核自动产生的该文件,不可以删除该文件里的语句。

下面附上simulate_mti.do文件的内容:

vlib work
vmap work

vlog -work work +incdir+../.+../../example_design +define+SIMULATION +incdir+.+../dsport+../tests D:/ISE/14.4/ISE_DS/ISE/verilog/src/glbl.v -f board.f

vsim -voptargs="+acc" +notimingchecks +TESTNAME=BMD_wr_test -L work -L secureip -L unisims_ver -L unimacro_ver work.board glbl +dump_all

do E:/k7_dma_test_SIM/dma_test/ipcore_dir/dma_core/simulation/functional/wave.do


#add log -r /*
run -all

(5)问题:该工程若是直接生成FPGA 烧录文件(bit)的话,可能在综合的时候显示:ERROR:HDLCompier:1654.Line 276:Instantiating<dma_core_inst>from unkown modle<dma_core>。

这个问题,也仅出现在K7 FPGA芯片 DMA64工程里,在SPARTEN6的工程里就没有出现该问题。

解决方法:

在工程中不直接添加PCIE IP的.XCO文件,而是添加ipcore_dir\dma_core\source路径下的全部文件,替代PCIE IP的.XCO文件。

(6)问题:该工作直接生成FPGA 烧录文件(bit)的话,在最后generate bit文件环节,可能因为管脚约束问题,导致不能产生bit文件。

这个问题,也仅出现在K7 FPGA芯片 DMA64工程里,在SPARTEN6的工程里就没有出现该问题。

解决方法:

(7)在WIN10系统下仿真,可能会遇到下面的问题。这个问题,也仅出现在K7 FPGA芯片 DMA64工程里,在SPARTEN6的工程里就没有出现该问题。

解决方法:

这个问题是有Xilinx仿真库存在问题导致的。我将WIN7系统下编译的仿真库拷贝到WIN10系统ISE的安装目录,再次仿真。没有遇到问题。

但不确定具体问题原因。

 

 

3.2仿真介绍

board:是testbench的顶层;

EP    :是章节3里搭建的BMD工程,是Endpoint;

RP   :是模拟PC的相关测试环境,如下面有图搭建的测试环境。

dma_core_inst:是例化的PCIE DMA IP Core;

app_BMD        :是例化的BMD操作工程。

 

按照上面的步骤,是可以正确搭建DMA仿真平台的;可以通过PIO仿真验证该平台代码工程的完整性。

但,如果想进行DMA仿真的话,可能还会遇到一些问题,比如:工程搭建的过程中,误将有用的信号线给注释掉了;DMA testcase的配置步骤;如何使能cfg_bus_mstr_enable。

下面会以下xapp1052 DMA仿真进行举例说明。

4、xapp1052DMA仿真

4.1 testcase

首先,由于xapp1052是在vivado平台下开发的,其testname的引入方式与ISE平台是有区别的。

在vivado的工程里,testname的引入,则不是在simulate_mti.do文件里,其是在pci_exp_usrapp_tx.v文件里引用的

如下图所示

其次,testcase的设计,按照xapp1052中PDF给的配置过程即可。

下面再附上xapp1052给的读写配置步骤吧。

MEM WR 配置步骤

本文提供一种testcase示例。

在本testcase中,配置的是MWR存储器写访问事物,TLP size 是32(十进制),TLP count是20(十进制),TLP pattern是32'haa55_aa55。也即在启动DMA传输的时候,FPGA将会给RP端发送20个TLP数据包,每个TLP数据包含有32个DW,每个DM=32'haa55_aa55。

下载链接:  https://download.csdn.net/download/qq_22168673/11607712

将上面链接里的testcase粘贴复制到sample_tests1.vh文件里即可。

 

4.2 配置cfg_bus_mstr_enable

这里需要注意:

make sure you  set the Bus master enable bit on both RP and Endpoint.

 

在准备好testcase之后,需要修改pci_exp_usrapp_tx.v文件里的有个参数。

将下图中TSK_BAR_PROGRAM任务中的的value修改为32'h0000_0007即可,该数值是配置cfg_command寄存器使用的。

但,下图的修改,仅是使能EP 端的cfg_bus_mstr_enable。

RP端的Bus master enable 需要在testcase里进行配置。

 

4.3 WR DMA仿真

该仿真,配置步骤参考xapp1052的PDF中配置步骤,RP端模拟PC的相关操作,给EP寄存器进行配置,然后FPGA作为master发起WMR存储器写访问事物,将数据以DMA数据流的方式发送给RP端。

下图中reg_address的值应该参考xapp1052的配置步骤设置,下图后期再修改。

通过下图,可以看到TX连续发送了20个TLP数据包,每个TLP数据包含有32个DW,每个DM=32'haa55_aa55。

然后,再观察第二个TLP头包,可以分析存储器写地址的变化情况。

 

4.4 RD DMA仿真

参考xapp1052里的步骤,写testcase,配置 DMA RD的寄存器。

将FPGA配置称为master,之后启动DMA;然后,FPGA会连续发送多个(TLP COUNT)MRd读请求事务;RP端接收到FPGA 发送的MRd事务后,会返回CPLD 数据包。

首先是以PIO的方式,配置寄存器信息。如下图所示。

PIO 配置寄存器信息

当FPGA接收到RP以PIO方式配置的启动DMA标志后,会连续发送多个(TLP count)MRd存储器读请求事务。该testcase中,是配置20个存储器读请求,即TLP count=20(十进制)。

当RP接收到FPGA发起的存储器读请求之后,会返回CPLD事务。

但是,这里可能会遇到RP_rx端口接收到EP端FPGA发来的读请求之后,RP并没有给FPGA返回CPLD的情况。

应该是,RP端没有发送CPLD DMA数据流的相关task,这部分需要自己设计task、实现RP 返回DMA 的CPLD事务TLP包。

这个问题,论坛里也有相关讨论,大家可以看看

https://forums.xilinx.com/t5/PCI-Express/in-simulation-BMD-Not-read-request-and-completions/m-p/177106

 

另外一个仿真中大家可能会遇到的问题是,RP端可能接收不到EP发送的DMA MWr写访问事务TLP。这个问题的话,可以看看本文最后的参考文献3,将其中的3行配置信息写到init初始化配置task里试试。

 

 

最后,本文提供一种DMA 读访问的testcase示例,

下载链接:   https://download.csdn.net/download/qq_22168673/11609362

 

补充说明:

board:顶层文件+系统复位

RP:Root complex的部分。其中rport就是PCIE端口部分;cfg_usrapp是配置部分,配置读写使能,错误控制等,还有一些常用的任务方便其他模块调用;com_usrapp是加载RX/TX文件,把RX/TX的数据以dat文件形式保存,需要时加载/覆盖。pl_usrapp物理层控制和状态部分。

 

调用TASK方法:

eg: board.RP.com_usrapp.TSK_READ_DATA(0, `RX_LOG, trn_rd, trn_rrem_n);——是指调用board-RP-com_usrapp里面的 TSK_READ_DATA任务,其中括号里面的是传递变量,按照usrapp里面TSK_READ_DATA定义里面的input顺序来传递变量。

$value$plusargs:将运行命令(run-options)中的参数值传递给指定的信号或者字符,用法:

       if ($value$plusargs("TESTNAME=%s", testname))

$display("Running test {%0s}......", testname);

则,当使用的运行命令为:<run-options>+TESTNAME=tst_name时,运行结果为:Running test {tst_name}......

  如果想把DMA功能用起来,自行调用pci_exp_usrapp_tx.v中的函数,往DMA控制寄存器中写入地址、长度等数据,然后启动DMA读或者写。

 

 

 

 

 

 

>>点击这里返回导航页<<

参考文献:

作者博客
1、Buyi_Shizi xapp1052之dma_test.v
2、Jack-Xu 一步一步开始FPGA逻辑设计 - 高速接口之PCIe
3、shiyinjita关于xilinx的pcie仿真说明!!!!pcie仿真建议看一下
4、yf869778412 如何使用xilinx pcie的源代码
  
  
  

 

  • 9
    点赞
  • 77
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
### 回答1: Xilinx授权公开全部源代码的PCIe DMA引擎是一种用于数据传输和处理的技术。DMA代表直接存取存储器,是一种处理器和外部设备之间直接进行数据传输的机制。PCIe(Peripheral Component Interconnect Express)则是一种高速串行总线接口标准,广泛应用于计算机系统中。 由于Xilinx授权公开全部源代码的PCIe DMA引擎,意味着用户可以获得完整的源代码,并据此进行自定义和修改以满足特定需求。这是一个非常有价值的授权,因为源代码的开放性允许用户深入了解引擎的工作原理和内部结构,并在此基础上进行个性化的优化和改进。用户可以根据自己的需求添加新的功能、调整性能参数、优化数据处理流程,甚至将引擎与其他硬件或软件系统集成。 公开全部源代码的PCIe DMA引擎授权的另一个优势是提供了更大的灵活性和可扩展性。用户可以根据自己的项目需求选择合适的硬件平台,并通过自定义代码来实现所需的性能和功能。这种可定制性有助于降低系统成本,因为用户可以精确地配置所需的功能,避免不必要的硬件或软件开销。 总之,Xilinx授权公开全部源代码的PCIe DMA引擎为用户提供了一个高度定制化的数据传输和处理解决方案。这种授权不仅使用户能够更好地理解和改进引擎的性能,还为用户提供了更大的灵活性和可扩展性。这对于需要高性能数据传输和处理的应用领域来说是非常有价值的。 ### 回答2: Xilinx授权是指Xilinx公司对其产品中的PCIe DMA引擎进行授权,允许用户公开全部的源代码。PCIe DMA引擎是一种用于处理数据传输的硬件模块,能够实现高效的数据传输和管理。 通过授权公开全部源代码,用户可以深入了解和学习PCIe DMA引擎的工作原理及其实现方式。对于开发人员来说,这是一个非常重要的资源,可以帮助他们更好地理解和使用该引擎,以满足自己特定的需求。 使用公开源代码的好处是,用户可以根据自身需求进行定制和优化。他们可以根据自己的应用场景进行修改和改进,以提高性能并满足特定需求。同时,公开源代码还促进了更广泛的协作和共享,使得更多的开发人员可以共同参与和贡献,推动引擎的不断发展与完善。 另外,公开源代码也有助于考虑和解决潜在的安全问题。通过对源代码的审查和分析,可以发现潜在的漏洞和安全隐患,并及时修复和增强相应的安全措施,从而提高系统的安全性和可靠性。 总之,Xilinx授权公开全部源代码的PCIe DMA引擎为开发人员提供了宝贵的资源和灵活性,使他们能够更好地利用和定制该引擎。这一举措促进了开发人员之间的合作与共享,推动了引擎的进一步发展,并提高了系统的性能、安全性和可靠性。 ### 回答3: Xilinx授权是指Xilinx公司开放并公开了他们的PCIe DMA引擎的全部源代码。 PCIe DMA引擎是一种用于数据传输和处理的技术,可以在计算机系统内的不同设备之间进行高速数据传输。通常,DMA引擎用于在计算机和外设之间进行数据传输,以减轻CPU的负担并提高数据传输的效率。 Xilinx是一家专门从事可编程逻辑器件的设计和制造的公司,他们的FPGA(现场可编程门阵列)器件非常流行。作为FPGA技术的先锋,Xilinx提供了许多解决方案和工具,用于开发各种应用程序,其中包括PCIe DMA引擎。 通过授权公开全部源代码,Xilinx向广大开发者提供了使用和定制PCIe DMA引擎的机会。使用源代码,开发者可以深入了解和探索该引擎的内部工作原理,以及它如何与其他系统组件进行交互。这使得开发者可以更好地优化引擎,以满足特定应用程序的需求。 此外,公开源代码还带来了更多的灵活性和可扩展性。开发者可以根据他们的需求进行修改和定制,并将其整合到自己的设计中。这种定制能力可以帮助开发者更好地适应各种应用场景,提高系统性能和效率。 总之,通过Xilinx授权公开全部源代码的PCIe DMA引擎,开发者能够更好地理解和使用该引擎,实现高速数据传输和处理。这对于加快应用程序的开发和优化,提高系统性能具有重要的意义。
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值