PCIe测试#

实验VIvado工程为“PCIe_test”。

本实验使用Xilinx提供的PCIe XDMA来完成一个简单的PCIe,读写实验,来测试PCIe的速度。PCIe 2.0,每个lane的速度是5Gbit/s,由于编码、协议等开销,可用带宽可以达到80%。

开发板提供Windows 7 64位和Windows 10 64位驱动程序,已经驱动程序的源代码,驱动程序使用VS2015开发,开发板也提供了Linux版本的驱动源码和测试程序。

为了在Windows下更直观的测试,芯驿电子使用QT开发了一些带界面的测试程序,方便测试。

Vivado工程建立#

  1. 新建一个名为PCIe_test的Vivado工程

../_images/image170.png
  1. 新建一个Block设计

../_images/image230.png
  1. 添加ZYNQ处理器

../_images/image330.png
  1. 配置ZYNQ参数,PS-PL配置,取消M AXI GP0 端口,使能S AXI HP0接口

../_images/image425.png
  1. 配置MIO,BNAK 0电平为LVCMOS 3.3V, Bnak1电平为LVCMOS 1.8V,使能QPSI,这样才能固化程序,PCIe才能正常使用。

../_images/image516.png
  1. 为了调试方便,使能UART1

../_images/image614.png
  1. ddr3配置,ddr3选择MT41256M16 RE-125

../_images/image714.png
  1. 添加PCIe DMA子系统

../_images/image814.png
  1. 配置PCIe xdma参数,Lane宽度选择X2,速率选择5.0 GT/s,其他参数都保持默认。

../_images/image913.png
  1. 添加PCIe 差分参考时钟缓冲

../_images/image1014.png
  1. 配置为收发器时钟差分缓冲

../_images/image1119.png
  1. 连接PCIe参考时钟

../_images/image1216.png
  1. 运行自动连接

../_images/image1314.png
  1. 选择所有自动连接

../_images/image1413.png
  1. 运行Block自动化

../_images/image1512.png
  1. 修改端口名称

../_images/image1611.png
  1. 保存设计,按F6 检查设计

  2. 创建HDL文件

../_images/image1711.png
  1. 由于PCIe约束比较特殊,xdma IP会自动生成一个IP,需要运行Generate Output Products后才能查看

../_images/image1810.png
  1. 在IP Sources页搜索xdc文件,可以找到一个关于PCIe管脚约束的文件,这个文件约束的和开发板设计不符合,我们需要修改,但是这个文件是只读的,这里先禁用这个文件,然后自己写xdc文件代替这个。

../_images/image1910.png
  1. 禁用自动生成的xdc约束

../_images/image208.png
  1. 添加xdc约束

../_images/image2114.png
  1. 修改xdc文件内容,详细文件可以参考例程提供的Vivado工程,xdc文件使用是TCL教程语言,不熟悉TCL可以去找相关资料学习一下。

../_images/image2211.png
  1. 编译生成bit文件

生成烧写BOOT#

  1. 导出硬件,运行Vitis

  2. 新建名为fsbl的APP,模板选择Zynq FSBL

  3. 生成BOOT.bin

../_images/image238.png
  1. 烧写BOOT.bin到QSPI flash,PCIe对启动时间有严格要求,使用QSPI启动比SD卡启动要快。

../_images/image248.png
  1. 烧写完成以后设置开发板启动模式为QSPI,插入计算机PCIe插槽(断电操作),这时开发板不需要外部电源适配器供电,由电脑主板供电。

设置电脑进入测试模式#

由于PCIe驱动程序没有经过微软数字签名,所以只能用于测试,需要将系统设置到测试模式,设置的详细方法参考MSDN文档https://msdn.microsoft.com/en-us/windows/hardware/drivers/install/the-testsigning-boot-configuration-option

  1. 使用管理员身份运行cmd

../_images/image258.png
  1. 输入命令Bcdedit.exe -set TESTSIGNING ON 打开测试模式

../_images/image268.png
  1. 重启电脑后桌面显示正在运行测试模式

../_images/image278.png

安装PCIe驱动#

PCIe驱动和上位机测试文件都位于“course_s1/资源文件/PCIe”

  1. 没有安装驱动时,设备管理器如下,发现一个PCI串行端口

../_images/image287.png
  1. 例程提供的编译好的驱动程序

../_images/image296.png
  1. 选择设备,右键更新驱动

../_images/image306.png
  1. 浏览计算机以查找驱动程序软件

../_images/image3113.png
  1. 测试电脑安装的是win7,这里使用Win7_Release版本

../_images/image3210.png
  1. 有个安全警告,选择安装

../_images/image337.png
  1. 正确安装了设备驱动

../_images/image346.png

测试PCIe#

  1. xilinx提供了一些测试程序,不过都是命令行的程序

../_images/image356.png
  1. 芯驿电子开发了一些有界面的应用,使用pciespeed.exe来测试一下PCIe读写速率,这个读写测试会把数据写入ZYNQ的ddr然后再读取出来。

  2. 读写同时进行测试

../_images/image366.png
  1. 只读测试

../_images/image375.png
  1. 只写测试

../_images/image385.png

实验总结#

本实验主要是掌握PCIe硬件工程的建立,初步体验PCIe读写速度,在后续的实验中我们会做一些更加实用的功能。上位机软件使用QT开发,如果需要自己修改编译,请先学习如何使用QT。