PCIe测试#
实验VIvado工程为“PCIe_test”。
本实验使用Xilinx提供的PCIe XDMA来完成一个简单的PCIe,读写实验,来测试PCIe的速度。PCIe 2.0,每个lane的速度是5Gbit/s,由于编码、协议等开销,可用带宽可以达到80%。由于ZYNQ的HP只有64位,如果速度跑到150MHz,带宽只有9.6Gbit/s,不能够满足PCIe 2.0x8的带宽要求,因此选用PL端的DDR3做数据缓存。
开发板提供Windows 7 64位和Windows 10 64位驱动程序,已经驱动程序的源代码,驱动程序使用VS2015开发,开发板也提供了Linux版本的驱动源码和测试程序。
为了在Windows下更直观的测试,芯驿电子使用QT开发了一些带界面的测试程序,方便测试。
Vivado工程建立#
ZYNQ配置#
新建一个名为PCIe_test的Vivado工程
新建一个Block设计
添加ZYNQ处理器
配置MIO,BNAK 0电平为LVCMOS 3.3V, Bnak1电平为LVCMOS 1.8V,使能QSPI,这样才能固化程序,PCIe才能正常使用。
为了调试方便,使能UART0
ddr3配置,ddr3选择MT41J256M16 RE-125
配置FCLK_CLK0为100MHz用于GP0时钟,FCLK_CLK1为150MHz用于axi_interconnect,点击OK。
PCIe xdma配置#
添加PCIe DMA子系统
配置PCIe xdma参数,Lane宽度选择X8,速率选择5.0 GT/s,其他参数都保持默认。
添加PCIe 差分参考时钟缓冲
配置为收发器时钟差分缓冲
连接PCIe参考时钟
PL端DDR3配置#
添加PL端DDR3控制器MIG
与PL端读取DDR3配置类似
默认会选择AXI4总线
点击下一步
选择DDR3
选择型号MT41K256M16XX-125
AXI数据宽度选择256
输入时钟选择200MHz
系统时钟选择差分,参考时钟选择系统时钟,系统复位选择低电平有效
默认
选择Fixed Pin Out
与PL端读取DDR3一样,读取UCF文件(在工程目录下),并且点击Validate校验。
通过原理图可知,系统时钟选择F9/E8引脚
默认
选择Accept
最后选择Generate
模块连接#
添加axi_interconnect,连接M00_AXI到DDR3控制器的S_AXI,ui_clk连接到M00_ACLK
连接处理器GP0和xdma的M_AXI到axi_interconnect,连接FCLK_CLK0到S01_ACLK,连接FCLK_CLK1到ACLK,用于interconnect异步时钟。xdma的axi_aclk连接到S00_ACLK,xdma的axi_aresetn连接到S00_ARESETN。
点击Run Block Automation
连接MIG核的sys_rst到ZYNQ核的FCLK_RESET0_N
点击Run Connection Automation自动连接
点中MIG的SYS_CLK和DDR3端口右键选择Make External,导出引脚
添加reset模块,进行如下连接
继续添加两个复位模块,分别连接axi_interconnect的复位ARESETN和S01_ARESETN
修改端口名称
查看Address Editor,点击自动分配地址,由于PCIe上位机访问是从0地址开始的,因此需要将xdma的Offset Address改成0x0000_0000_0000_0000
保存设计,按F6 检查设计
创建HDL文件
运行Generate Output Products
添加其他的文件,主要是5338芯片的配置,为PL端DDR3提供时钟
添加xdc约束
修改xdc文件内容,详细文件可以参考例程提供的Vivado工程,xdc文件使用是TCL教程语言,不熟悉TCL可以去找相关资料
编译生成bit文件
生成烧写BOOT#
导出硬件,运行Vitis
新建名为fsbl的APP,模板选择Zynq FSBL
生成BOOT.bin
烧写BOOT.bin到QSPI flash,PCIe对启动时间有严格要求,使用QSPI启动比SD卡启动要快。
烧写完成以后设置开发板启动模式为QSPI,插入计算机PCIe插槽(断电操作),这时开发板不需要外部电源适配器供电,由电脑主板供电。
设置电脑进入测试模式#
由于PCIe驱动程序没有经过微软数字签名,所以只能用于测试,需要将系统设置到测试模式,设置的详细方法参考MSDN文档https://msdn.microsoft.com/en-us/windows/hardware/drivers/install/the-testsigning-boot-configuration-option
使用管理员身份运行cmd
输入命令Bcdedit.exe -set TESTSIGNING ON 打开测试模式
重启电脑后桌面显示正在运行测试模式
安装PCIe驱动#
PCIe驱动和上位机测试文件都位于“course_s1/资源文件/PCIe”
没有安装驱动时,设备管理器如下,发现一个PCI串行端口
例程提供的编译好的驱动程序
选择设备,右键更新驱动
浏览计算机以查找驱动程序软件
测试电脑安装的是win7,这里使用Win7_Release版本
有个安全警告,选择安装
正确安装了设备驱动
测试PCIe#
xilinx提供了一些测试程序,不过都是命令行的程序
芯驿电子开发了一些有界面的应用,使用pciespeed.exe来测试一下PCIe读写速率,这个读写测试会把数据写入ZYNQ的ddr然后再读取出来。
读写同时进行测试
只读测试
只写测试
ZYNQ-7000开发平台 FPGA教程 - Alinx官方网站