在我们平常设计XDMA的时候,经常会遇到一个问题:
在Vivado中设计的XDMA IP中选择的PCIE带宽和链路速度是理想的,但是下到板卡运行的时候,测量速度却发现读写速度根本不是理想中的速度,找不到问题,无法证明我们代码的问题还是硬件或者主机问题。
这样我们就可以利用这篇文章来获取XDMA在Windows系统下实际运行的速度和带宽。下面将以一个例子来介绍:
一、首先建立一个XDMA读写DDR的工程
这边就不多介绍了,不会的小伙伴记得看我以前的文章,主要把XDMA的配置来给大家看看:
我这边选择的PCIE带宽为x8,速度等级为5.0GT/s
接下来就把DDR接上,然后把工程编译,得到bit文件。
二、PCIE理论传输速率/吞吐量运算
首先我的开发板的PCIE为:PCI-e2.0协议
以我的开发板和上图xmda配置来计算:
吞吐量=传输速率 * 编码方案
PCI-e2.0 协议支持 5.0 GT/s,即每一条Lane 上支持每秒钟内传输 5G个Bit;但这并不意味着PCle 2.0协议的每-条Lane支持 5Gbps 的速率。
为什么这么说呢?因为PCle 2.0 的物理层协议中使用的是 8b/10b 的编码方案。 即每传输8个Bit,需要发送10个Bit;这多出的2个Bit并不是对上层有意义的信息。
那么,PCle 2.0协议的每-条Lane支持5*8/10=4 Gbps = 500 MB/s 的速率。
那么我的工程中PCle 2.0 x8的通道为例,x8的可用带宽为4*8=32 Gbps = 4 GB/s。
下图为其他PCIE配置的传输速率图,可根据自己的自行对比:
可以得到我的配置和开发板,最大的传输速率为4GB/s = 4000MB/s,但是一般PCIE的有效传输速率为70% - 80%,也就是我的传输速率要到达 2800MB/s,才算正常,下面我们将下板进行测试一下。
三、下板测试
把bit文件下载到开发板,并对主机进行热重启后,打开测试速度的软件:
只需要测量下面两个即可:
>> 2 - XDMA采集卡C2H从采集卡读数到上位机速度测试 (C2H: Card-to-Host)
>> 3 - XDMA采集卡H2C从上位机读数到采集卡速度测试 (H2C: Host-to-Card)
按照对应的数字编号,输入即可进行测速:
可以看出xdma读写速度分别为:1000M、1300M,显然没有达到我们的预期
这个时候就很难判断是我们的代码错了,还是硬件有问题,还是PCIE自动降级了,一般PCIE如果跑不到最大的带宽速度,会自动降级。
四、查看实际运行状态
在Windows系统查看PCIE实际运行状态:
右击我的电脑 - 选择管理,然后打开设备管理器
找到XDMA驱动,并右击查看属性,并点到详细信息:
在属性选项中选择:PCI最大读取请求大小
这里可以看到,显示的值为0x02,即PCI-e2.0,这个没错!!
然后再选择:PCI最大链路带宽
可以看出显示的值为0x04,即x4,但是我们选择的是x8,说明我们的主机或者开发板不支持x8的速率,这样我们就能排除我们代码的问题了,可以成功帅锅了,舒服!!!
接下里就让他们去找问题吧!!!!
如果感觉文章对您有用,麻烦三连支持一下,方便下次用到的时候,就可以快速找到我,非常感谢您的支持!!!