zynq - ps端的pcie ep功能测试

参考资料:

Zynq UltraScale+ MPSoC PS-PCIe End Point Driver - Xilinx Wiki - Confluence

PCIe Tips and Tricks - Xilinx Wiki - Confluence

1.枚举

如果硬件连接没有问题,在vivoda中配置好ping,在rc端使用lspci查找设备,就可以能看到ep节点了。

root@davinci-mini:~# lspci
80:08.0 PCI bridge: Huawei Technologies Co., Ltd. Device d103 (rev 45)
81:00.0 Memory controller: Xilinx Corporation Device a808

2.ps端配置

ps端配置注意device id,要和驱动中的ZYNQMP_DMA_DEVID1对应,interrupt settings中断的设置,有legacy,msi和msi-x三种,应该和rc端有关,如果加载驱动时出现错误,看错误信息排查问题。

3.编译rc端驱动

按上面的参考资料编译出ps_pcie_dma.ko并加载驱动,成功加载会出现下面5个设备文件,如果不成功查看log排查问题。

root@davinci-mini:~# ls /dev/ps_pcie_
ps_pcie_dmachan0_0  ps_pcie_dmachan2_0  ps_pcie_pio_0
ps_pcie_dmachan1_0  ps_pcie_dmachan3_0

4.在kernel中预留ddr空间

因为我们要用dma方式传输数据,所以需要在ep端预留一部分内存供pcie读写使用。在petalinux-config中添加u-boot参数“mem=1024M”,表示kerenl只使用1G的内存。比如我板子上接的是2G的ddr,ddr地址空间是0~0x7fff ffff。那么这样设置后kernel只使用0~0x3fff ffff这部分的ddr。0x4000 0000~0x7fff ffff这部分的空间是空闲的。

5.测试发送数据

资料中有2个例子,simple_test和pci_pio_test,对应pcie2种传输方式。

1.DMA(Direct Memory Access)模式:直接内存访问,该模式下数据传送不是由CPU负责处理,而是由一个DMA控制器来完成,占用较少的CPU资源。
2.PIO(Programmed Input-Output)模式:可编程IO,该模式下数据传送由CPU执行I/O端口指令来处理,占用大量的CPU资源,数据传输速度也大大低于DMA模式。

dma方式rc直接将数据写入ep的ddr中,ep端口不需要运行程序配置,pio方式需要在ep端开启BAR,然后将BAR中的数据再写到ddr中。

// 运行例子
./simple_test -c 0 -a 0x40000000 -l 4194304 -d s2c
write return value is 4194304
Total time taken for transferring 4194304 bytes of data is 3300 micro seconds

可以看到rc写4MByte数据到ep,耗时3300us,所以速度达到了1212MByte每秒。

pio传输的方式还没搞明白,如果有懂的欢迎指教。

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Zynq-7000是由Xilinx公司生产的一款集成了ARM处理器和可编程逻辑(PL)的片上系统(SoC)。它的可编程逻辑部分可以通过重新配置(Reconfigure)来进行定制和优化。 Zynq-7000的可编程逻辑部分由一系列可编程逻辑单元(PLU)组成,可以通过Vivado开发环境进行配置和定制。重配置PL意味着可以改变PL中的逻辑电路,以满足不同的需求。 重配置PL的过程大致分为三个步骤。首先,需要使用Vivado开发环境创建和配置逻辑电路。这可以通过使用硬件描述语言(如Verilog或VHDL)来实现,也可以通过使用硬件抽象层次语言(如C、C++或OpenCL)来实现。 其次,需要将配置好的逻辑电路编译成比特流(Bitstream)。比特流是一种描述逻辑电路的中间文件,可以被FPGA芯片理解和加载。 最后,将生成的比特流加载到Zynq-7000的可编程逻辑部分。这可以通过JTAG接口或SD卡等方式实现。一旦比特流被加载,Zynq-7000的可编程逻辑部分就被重新配置为新的逻辑电路。 通过重配置PL,可以实现许多应用场景,例如加速计算、优化算法、嵌入式系统的定制等。它提供了一种便捷的方式来优化和个性化Zynq-7000的使用。 总的来说,Zynq-7000的可编程逻辑部分可以通过Vivado开发环境进行重新配置,以满足不同的需求。这种重配置的过程包括创建和配置逻辑电路、生成比特流、加载比特流到Zynq-7000,并可以应用于各种应用场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值